Hallo,
ich habe ein Problem mit einem Prepared Statement von mir und zwar bekomme ich immer den fehler aus dem Titel, diesen hier:
Der Code ist folgender:
Das statement ist relativ lang und deshalb wohl ziemlich unverständlich. Allerdings glaube ich auch nicht das man es verstehen muss. Ich setze hier beispielsweise foldenden String ein : pgid = "801, 614, 615, 616, 618, 619, 620, 802, 803, 804, 805, 806, 812, 813, 824, 843, 844, 869". Nun bekomme ich allerdings diesen Fehler, der meiner Recherche zufolge auftritt wenn man mit falschen Datentypen arbeitet bzw. filtern will. Das merkwürdige allerdings ist, dass wenn ich diesen String manuell einsetze direkt ins Statement, ohne die setString Methode, funktioniert es. ???:L
ich habe ein Problem mit einem Prepared Statement von mir und zwar bekomme ich immer den fehler aus dem Titel, diesen hier:
Java:
java.sql.SQLException: ORA-01722: invalid number
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:810)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:850)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1134)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3384)
at datenbankZugriff.dbzugriff.anfragetest(dbzugriff.java:68)
at tagHandler.test.main(test.java:16)
Der Code ist folgender:
Java:
public static ArrayList<Procstep> anfragetest(String pgid, String db){
pgid = anfraPgids(pgid, db);
pgid = pgid.substring(0, pgid.length()-2);
System.out.println(pgid);
ResultSet rs = null;
PreparedStatement pstmt;
Connection con = datenbankZugriff.dbverbindung.getConnection(db);
ArrayList<Procstep> liste = new ArrayList<Procstep>();
try {
pstmt = con.prepareStatement("select process.name, processgroup.pgroupid,process.pid," +
" processstep.seqnr, toolrelease.maincommand,processstep.status, " +
"processstep.jobmachineid, processstep.psid, processinstance.pinid, " +
"processstep.laststatuschange, processstep.priority, processinstance.startdate " +
"from process,processgroup, processinstance,processstep,toolrelease where " +
"process.pgroupid=processgroup.pgroupid and processgroup.pgroupid in (?) and " +
"process.pid = processinstance.pid and processinstance.pinid = processstep.pinid " +
"and processstep.treleaseid = toolrelease.treleaseid and process.name not like " +
"'Admin %\' order by process.pid,processinstance.startdate ASC, " +
"processstep.seqnr, processstep.psid");
pstmt.setString(1, pgid);
rs = pstmt.executeQuery();
Das statement ist relativ lang und deshalb wohl ziemlich unverständlich. Allerdings glaube ich auch nicht das man es verstehen muss. Ich setze hier beispielsweise foldenden String ein : pgid = "801, 614, 615, 616, 618, 619, 620, 802, 803, 804, 805, 806, 812, 813, 824, 843, 844, 869". Nun bekomme ich allerdings diesen Fehler, der meiner Recherche zufolge auftritt wenn man mit falschen Datentypen arbeitet bzw. filtern will. Das merkwürdige allerdings ist, dass wenn ich diesen String manuell einsetze direkt ins Statement, ohne die setString Methode, funktioniert es. ???:L