gpt4 book ai didi

java - 错误 : ORA-01858: a non-numeric character was found where a numeric was expected

转载 作者:行者123 更新时间:2023-11-29 05:53:40 26 4
gpt4 key购买 nike

当我执行准备好的语句时,我得到了 ORA-01858:在需要数字的地方发现了一个非数字字符。当我搜索一些论坛时,他们说这是因为日期数据类型。我准备好的声明是

insert  into OPRS_ZONES(
ZONE_ID,
ZONE_CODE,
ZONE_NAME,
PLACE_ID,
CORP_ID,
CREATED_BY,
CREATED_DATE,
MODIFIED_BY,
MODIFIED_DATE)
values(?,?,?,?,?,?,?,?,?)

我要插入的值是

03.0, 
'FLORIDA',
'FLORIDA',
05231.0,
01.0,
01.0,
TO_DATE('19102012130639','DDMMYYYYHH24MISS'),
NULL,
NULL

表定义

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 );

我为准备好的语句填充值的代码,

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;
}

列表 myCollection 包含。变量 queryprepared statement当用值替换时,这个准备好的语句在 SQLDEVELOPER 中工作正常,但是当我运行我的 java 程序时,我收到错误。这真的是日期格式的问题吗?如果是这样,为什么它在 SQLDEVELOPER 中运行良好?

请帮忙,

谢谢

最佳答案

更改准备好的声明:

insert  into OPRS_ZONES(
ZONE_ID,
ZONE_CODE,
ZONE_NAME,
PLACE_ID,
CORP_ID,
CREATED_BY,
CREATED_DATE,
MODIFIED_BY,
MODIFIED_DATE)
values(?,?,?,?,?,?,
TO_DATE(?,'DDMMYYYYHH24MISS'),
?,?)

并且仅将实际的 CREATED_DATE 设置为字符串,也就是说让您的集合对象中的 getter 返回“19102012130639”而不是整个 TO_DATE 语法。

编辑:假设您有一个包含所有值的字符串数组,并且您使用我编辑过的语句版本,这应该可行。

   String[] values = { "03.0", "FLORIDA", "FLORIDA", "05231.0", "01.0", "01.0",   "19102012130639", null, null };
ps = conn.prepareStatement(query);
int i = 1;
foreach(String par : values) {
ps.setObject(i, par);
i++;
}
ps.execute();

关于java - 错误 : ORA-01858: a non-numeric character was found where a numeric was expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com