繁体   English   中英

java.sql.SQLSyntaxErrorException: ORA-01722

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM