将数据插入数据库时​​出错

时间:2017-02-19 15:40:22

标签: java jdbc firebird jaybird

我尝试将数据插入到名为newdevice的数据库表名中。 我的疑问是:

String query= uni +"," + nam +","+ temp + "," + vendor + "," + invoice +","+ dop +"," + cost ;
                res=stm.executeQuery("INSERT INTO newdevice " + "(uniqueid , device , device_status , vendor_name , invoice , dop , cost)" + " VALUES(" + query +")");

但是在我这样做时我遇到了这个错误:

org.firebirdsql.jdbc.FBSQLException:GDS异常。 335544569.动态SQL错误 SQL错误代码= -104 令牌未知 - 第1行,第106列

(,)以逗号显示错误。

2 个答案:

答案 0 :(得分:2)

问题是您可能缺少字符串值等引号,但是您根本不应该连接这样的值。它让你对SQL注入开放。相反,你应该使用PreparedStatement参数,如下所示:

try (PreparedStatement pstmt = connection.prepareStatement(
        "INSERT INTO newdevice (uniqueid, device, device_status, vendor_name, invoice, dop, cost) VALUES(?, ?, ?, ?, ?, ?, ?)"
    pstmt.setInt(1, uni);
    pstmt.setString(2, nam);
    pstmt.setInt(3, temp);
    pstmt.setString(4, vendor);
    pstmt.setInt(5, invoice);
    pstmt.setInt(6, dop);
    pstmt.setBigDecimal(7, cost);
    pstmt.executeUpdate();
}

请注意,我已经对setXXX的实际数据类型进行了随机猜测。

答案 1 :(得分:0)

引号有问题。 我想语句(uniqueid , device , device_status , vendor_name , invoice , dop , cost)不应该是双引号。你可以尝试删除这个双引号。

相关问题