error : ORA-01858: ein nicht numerisches Zeichen wurde gefunden, wo ein numerisches erwartet wurde
Wenn ich Sie ausführen, meine vorbereitete Erklärung, ich bin immer die ORA-01858: a non-numeric character was found where a numeric was expected
. Wenn ich gesucht, durch manche Foren sagen Sie, dass es ist, weil der date-Datentyp. Meine vorbereitete Anweisung ist
insert into OPRS_ZONES(
ZONE_ID,
ZONE_CODE,
ZONE_NAME,
PLACE_ID,
CORP_ID,
CREATED_BY,
CREATED_DATE,
MODIFIED_BY,
MODIFIED_DATE)
values(?,?,?,?,?,?,?,?,?)
Die Werte, die ich versuche zu legen sind
03.0,
'FLORIDA',
'FLORIDA',
05231.0,
01.0,
01.0,
TO_DATE('19102012130639','DDMMYYYYHH24MISS'),
NULL,
NULL
Tabelle Definition
CREATE TABLE OPRS_ZONES (
ZONE_ID NUMERIC(20,0) ,
ZONE_CODE VARCHAR2(16) ,
ZONE_NAME VARCHAR2(255) ,
PLACE_ID NUMERIC(20,0) ,
CORP_ID NUMERIC(20,0) ,
CREATED_BY NUMERIC(20,0) ,
CREATED_DATE DATE ,
MODIFIED_BY NUMERIC(20,0) ,
MODIFIED_DATE DATE );
Den code, wo ich bin, bevölkern die Werte für eine vorbereitete Anweisung
public int executePreparedStatement(String query, List myCollection, int colLength, String tableName) throws DBException,SQLException {
int rowsAffected = 0;
int [] noOfRowsExecuted = null;
try{
conn.setAutoCommit(false);
if(query != null){
ps = conn.prepareStatement(query);
for (int i = 0; i < myCollection.size(); i++) {
logger.info("@@mycollcetion -- "+myCollection.get(i));
List list = (List) myCollection.get(i);
int count = 1;
for (int j = 0; j < list.size(); j++) {
ps.setObject(count, list.get(j));
count++;
}
ps.execute();
logger.info("@@ noOfRowsExecuted == "+noOfRowsExecuted);
}
}
}catch(Exception e){
logger.error("Error in the execution of Prepared Statement: \n" + query + "\nData : " + listData, e);
rowsAffected = Utility.getErrorCode(e);
throw new DBException(e);
}finally{
try {
if (ps != null) {
ps.close();
ps = null;
}
} catch (Exception e) {
}
rowsAffected = 0;
noOfRowsExecuted = null;
}
return rowsAffected;
}
Den list myCollection
enthält die values
. Die variabele query
ist die prepared statement
Diese vorbereitete Erklärung, wenn ersetzt mit den Werten funktioniert in SQLDEVELOPER, aber wenn ich Sie durch mein java-Programm, das ich immer Fehler. Ist das wirklich das problem mit Datumsformat ? wenn dem so ist, warum ist es in Ordnung, die in SQLDEVELOPER ?
Bitte helfen,
Dank
CREATE TABLE
Anweisung für OPRS_ZONES
Ich habe versucht, die Umwandlung von Datum in TIMESTAMP und auch versucht, das "CAST" aber immer noch der gleiche Fehler 🙁
Warum die führenden Nullen auf alle zahlen?
Auch, warum die
.0
- suffix auf, was sollen die ganzen zahlen?Das ist, wo das problem ist, dass Java keine Ahnung, was TO_DATE, es erwartet numerischer Wert statt. Allerdings BigMake schon beantwortet also werde ich nicht machen doppelten post.
InformationsquelleAutor Srikanth Sridhar | 2012-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie Ihre vorbereitete Erklärung, in:
Und nur die tatsächlichen CREATED_DATE als string, also machen die getter in Ihrem collection-Objekt zurückgeben "19102012130639" und nicht die ganze syntax TO_DATE.
EDIT: vorausgesetzt du hast ein String-array, das alle deine Werte, und verwenden Sie meine bearbeitete version-Anweisung, sollte diese Arbeit.
Versuchen Sie zu schreiben, ein einfaches test-Einheit, mit der vorbereiteten Anweisung und die .setObject() mit den Werten, oder zumindest eine Spur von der eigentlichen Werte, die Sie in Ihre vorbereitete Anweisung. Remembre mit Anweisungen vorbereitet, die Sie nicht brauchen, um zu entkommen string mit ', und Sie brauchen nicht die TO_DATE () den Wert, sondern nur in der Aussage. So ändern Sie die Sammlung um enthalten nur die Datums-Zeichenfolge.
ist es so, dass ich brauchen, um zu konvertieren, wie ein string ? die Werte nach den änderungen entsprechend Ihrer Anregung sind wie folgt [03.0, 'FLORIDA', 'FLORIDA', 05231.0, 01.0, 01.0, 19102012130639, 00.0, NULL].. willst du mich zu umschließen, in date-Wert in Anführungszeichen ?
Die sollten java-Typen, solange Sie string oder java-primitive Objekte, die Sie sollte Recht behalten. Wie Sie bauen Ihre Sammlung ? Denken Sie daran, dass ' die Flucht erfolgt durch den JDBC-Treiber mit prepared statements, also brauchst du es nicht.
Ich bin die Generierung einer text-Datei mit Werten aus der sql-Datenbank für eine bestimmte Tabelle. Ich bin mit dieser text-Datei zum Lesen der Werte und deren Zuordnung auf die Sammlung. Ich bin auch mit einen Scheck für den Datentyp. Die Polsterung ist gesorgt, während die Erzeugung der text-Datei.
InformationsquelleAutor BigMike
Ich hatte das gleiche problem, allerdings, in meinem Fall, ich hatte
sysdate
als argument für dieDATE
Feld der Ziel-Tabelle.War die Lösung, um den Wert zu ändern, um eine
java.sql.Timestamp
.InformationsquelleAutor johanwannheden