![](/img/trans.png)
[英]ERROR --> java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
[英]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);
笔记
确保表中的属性类型相同,将所有值设置为字符串。 我不认为price
可以是 String 或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:仅表示它无法将字符串值转换为整数。
通过查看您的内容,我可以理解您正在将价格和计数作为字符串传递给数据库,您能否检查数据库中字段的声明是什么。 您需要将它们转换为 int 然后您可以尝试插入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.