java.sql.SQLSyntaxErrorException:ORA-01722
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.sql.SQLSyntaxErrorException:ORA-01722相关的知识,希望对你有一定的参考价值。
我有以下JDBC代码:
public int addItem(String name, String price, String count, String isPR, String img) {
int result = 0;
try {
String query = "INSERT INTO T001_ITEM"
+ "(ITEM_NO,ITEM_NM,UNIT_PRICE,STOCK_COUNT,RECORD_DATE,IS_PR,ITEM_IMAGE_FILE_PATH)"
+ "VALUES(TABLE_SEQ.NEXTVAL,'" + name + "','" + price + "','" + count + "', sysdate,'" + isPR
+ "','" + img + "')";
pstmt = conn.prepareStatement(query);
result = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
它抛出以下错误:
java.sql.SQLSyntaxErrorException:ORA-01722。
这是怎么造成的,我该如何解决?
不要像使用'" + name + "'
那样将值连接到查询中,为了避免SQL注入,我建议你使用带参数的预准备语句:
String query = "INSERT INTO T001_ITEM "
+ "(ITEM_NO, ITEM_NM, UNIT_PRICE, STOCK_COUNT, RECORD_DATE, IS_PR, ITEM_IMAGE_FILE_PATH) "
+ "VALUES(TABLE_SEQ.NEXTVAL, ?, ?, ?, sysdate, ?, ?)";
pstmt = conn.prepareStatement(query);
pstmt.setString(1, name);
pstmt.setString(2, price);
pstmt.setString(3, count);
pstmt.setString(4, isPR);
pstmt.setString(5, img);
注意
确保表中属性的类型相同,将所有值设置为String。我不认为price
可以是一个字符串或isPR
似乎是一个Boolean
而不是String
,而count
可以是一个数字而不是String
所以仔细检查你的类型。
如果您无法更改方法之外的类型,那么您可以将其转换为正确的类型但是您应该测试它们,这可能会产生另一个问题。
所以举个例子
int countN = Integer.parseInt(count);
要么
pstmt.setInt(3, Integer.parseInt(count));
等等所有其他类型。
是什么导致这个错误?
尝试将字符串转换为数字时,会发生ORA-01722(“无效数字”)错误,并且该字符串无法转换为有效数字。有效数字包含数字'0'到'9',可能有一个小数点,字符串开头或结尾的符号(+或 - ),或'E'或'e'(如果它是浮点数)科学记数法中的点数)。禁止所有其他角色。
就像我之前说过的那样,检查表中的类型是否完全,你不能在Number
的位置设置一个String
抱歉,我没有足够的声誉将此添加为评论,
ORA-01722:简单地表示它无法将String值转换为整数。
通过查看您可以理解的内容,您正在将价格和计数作为字符串传递给数据库,您可以查看数据库中字段的声明是什么。您需要将它们转换为int,然后您可以尝试插入。
以上是关于java.sql.SQLSyntaxErrorException:ORA-01722的主要内容,如果未能解决你的问题,请参考以下文章