Mysql -Issue with preparedStatement insert query

时间:2014-11-04 12:28:35

标签: java mysql prepared-statement

我在MySQL数据库中有一个表,它是2列,

String insertquery = "INSERT INTO Table (Col1, Col2) VALUES (?, ?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(insertSQL);
preparedStatement.setString(1, "Val 1");
preparedStatement.setString(2, "Val 2");
preparedStatement.executeUpdate();

问题是第二列值在运行时决定,在哪里插入值或保持默认值。 如何将setString设置为默认值。

preparedStatement.setString(2, default );  

或者我可以写两个单独的sql取决于条件?有没有办法处理这个Senario?

更新sql的相同问题。

String updatequery = "UPDATE Table SET Col1=?, Col2=?;"
PreparedStatement preparedStatement = dbConnection.prepareStatement(updatequery);
preparedStatement.setString(1, "Val 1");
preparedStatement.setString(2, "Val 2");
preparedStatement.executeUpdate();

我可以像这样设置     preparedStatement.setNull(2,'');

我必须保持旧的值,而不是更新为null

谢谢...

1 个答案:

答案 0 :(得分:1)

要实现这一点,您必须省略列名,然后MySQL将使用已省略的任何列名的默认值。

因此,当您希望Col2的值为默认值时,您可以像这样编写查询:

"INSERT INTO Table (Col1) VALUES (?)";

我认为您最好的选择是根据要更改的列在运行时实际准备语句本身。

我不确定在Java中可以轻松完成这项工作但是使用PHP可以通过在运行时使用列数组和在数组中添加/删除项来轻松完成,具体取决于列需要什么要更新,然后使用PHP Implode function用逗号粘合数组的每个项目,最后将结果字符串连接到最终查询。

也许您可以通过阅读this related stack-overflow answer找到更适合java的解决方案。

祝你好运