我有以下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。
这是如何引起的?如何解决?
答案 0 :(得分:1)
不要像现在使用'" + 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
答案 1 :(得分:0)
抱歉,我没有足够的声誉将其添加为评论,
ORA-01722:简单地表示它无法将String值转换为整数。
通过查看您能理解的内容,您正在将价格和计数作为字符串传递给数据库,您可以查看数据库中字段的声明是什么。您需要将它们转换为int,然后您可以尝试插入。