PreparedStatement 查询将数据插入表中的特定列

Posted

技术标签:

【中文标题】PreparedStatement 查询将数据插入表中的特定列【英文标题】:PreparedStatement query to insert data into specific columns in a table 【发布时间】:2015-05-27 10:00:24 【问题描述】:

我正在尝试将数据插入表的特定列(第 5 列和第 6 列)。 我的PreparedStatement代码如下:

PreparedStatement pst1  =  connection.prepareStatement("insert into CustomerPayment (End_Time,Paid) values (?,?) where PC_Used ='"+cmbpcname.getSelectedItem().toString()+"'");  
pst1.setString(5,lblendtime.getText());
pst1.setString(6,lblamount.getText().substring(3,5));
pst1.execute();

这个查询对吗?运行该查询时出现错误。任何建议都会有很大帮助。

【问题讨论】:

请提供错误文本 setString 的第一个参数和其他 set 方法告诉实现您要在准备好的语句中替换哪个 ? 占位符。由于您准备好的语句仅包含两个占位符,因此您会遇到一个异常,您尝试替换不存在的占位符。我假设End_TimePaid 分别是您的第五列和第六列。因此,您只需在占位符 1 和占位符 2 上使用 setString,而不是在占位符 5 和 6 上使用。此外,您的列和变量名称表明数字类型更合适。 您的查询不起作用,插入没有 where 子句。 INSERT 语句没有where 子句。您在寻找UPDATE 声明吗? postgresql.org/docs/current/static/tutorial-update.html 其他人已经解决了您的实际问题。我只想回应 @nikitoz 并说 always always always 提供错误文本和堆栈跟踪。说“我遇到了错误”然后离开是行不通的。我们看不到你的屏幕,也对运行你的代码没有兴趣(除非你的问题看起来很有趣)。 【参考方案1】:

索引指的是语句中的位置而不是表。所以,

pst1.setString(1,lblendtime.getText()); 
pst1.setString(2,lblamount.getText().substring(3,5));

应该可以。

【讨论】:

感谢您的建议,它对我的​​第二个错误有所帮助。首先非常重要的是使用了错误的 sql 语句,在我的情况下是“插入”......我使用了更新语句,一切都很顺利...... :D 好的,对于你的 WHERE 子句,你也可以使用这个:pst1.setString(3, cmbpcname.getSelectedItem().toString()); 如果是...where PC_Used = ? @Würgspaß 好的!【参考方案2】:
PreparedStatement pst1  =  connection.prepareStatement("Update CustomerPayment SET End_Time= ? , Paid = ? where PC_Used ='"+cmbpcname.getSelectedItem()+"'");  
            pst1.setString(1,lblendtime.getText());
            pst1.setString(2,lblamount.getText().substring(3,5));
            pst1.executeUpdate();

【讨论】:

您还应该在 where 条件中使用参数,而不是将值连接到其中。将值连接到查询字符串中对于 SQL 注入是开放的,并且通常比使用参数效率低。

以上是关于PreparedStatement 查询将数据插入表中的特定列的主要内容,如果未能解决你的问题,请参考以下文章

使用 PreparedStatement 插入并为插入的行返回一列的值

PreparedStatement 比使用 JDBC 的 Statement 慢

Java、PreparedStatement、TransactSQL (MS SQL)、最后插入 ID

使用PreparedStatement接口操作数据库

Java:使用 PreparedStatement 将多行插入 MySQL

PreparedStatement批量(batch)插入数据