使用JDBC,我正在尝试执行以下SQL语句:
INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES (SomeString,6,4794,1,76)
Run Code Online (Sandbox Code Playgroud)
但这会返回错误消息
'字段列表'中的未知列'SomeString'
所以似乎第一个值被解释为一个列,那是怎么回事?
已经检查了表结构,也许我只是通过这个隧道,但我似乎无法找到导致此问题的原因.
所以似乎第一个值被解释为一个列,那是怎么回事?
因为你已经得到它SomeString,而不是像文本值那样'SomeString'.这就是SQL的工作方式 - 这也是正常代码的工作原理.如果你有:
String foo = bar;
Run Code Online (Sandbox Code Playgroud)
你会期望试图复制一个被调用的变量的值bar,不是吗?如果你的意思是一个由三个字符组成的字符串,b,a,r,你可以使用:
String foo = "bar";
Run Code Online (Sandbox Code Playgroud)
它在SQL中也是一样的.
但是,假设这个SQL是从实际值构建的,那么你应该使用PreparedStatementwith参数:
String sql = "INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount)"
+ " VALUES (?, ?, ?, ?, ?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, "SomeString");
pst.setInt(2, 6);
// etc
Run Code Online (Sandbox Code Playgroud)
这样你就可以避免SQL注入攻击和字符串转换问题(例如日期).它还使您的SQL更清洁,将代码与数据分开.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |