我正在动态创建SQL并将值设置到它们中,如图所示
public static void main(String args[])
{
try
{
String vendor_brand_id = "3000";
String reqstr = "popcorn";
String category_id = "11";
PreparedStatement preparedStatement = null;
String fixedvalues[] = new String[10];
String inputStr[] = reqstr.split("@");
for(int j=0;j<inputStr.length;j++)
{
fixedvalues[j]=inputStr[j];
System.out.println("jii"+fixedvalues[j]);
}
Connection dbConnection = null;
String updateTableSQL = "UPDATE category_dev SET T1 = ? , T2 = ? , T3 = ? , T4 = ? , T5 = ? , T6=? , T7= ? , T8 = ? , T9 = ? , T10 = ? , vendor_brand_id = ? where category_id = ?";
dbConnection = DBConnection.getDBConnection();
preparedStatement = dbConnection.prepareStatement(updateTableSQL);
for (int i = 0; i < fixedvalues.length; i++) {
preparedStatement.setString(1, fixedvalues[i]);
preparedStatement.setString(2, fixedvalues[i]);
preparedStatement.setString(3, fixedvalues[i]);
preparedStatement.setString(4, fixedvalues[i]);
preparedStatement.setString(5, fixedvalues[i]);
preparedStatement.setString(6, fixedvalues[i]);
preparedStatement.setString(7, fixedvalues[i]);
preparedStatement.setString(8, fixedvalues[i]);
preparedStatement.setString(9, fixedvalues[i]);
preparedStatement.setString(10, fixedvalues[i]);
preparedStatement.setString(11, vendor_brand_id);
preparedStatement.setString(12, category_id);
}
System.out.println(preparedStatement);
}
catch(Exception e)
{
e.printStackTrace();
}
}
但我面临的问题是这些值被设置为空
任何人都可以让我知道为什么
这里形成的sql是
UPDATE category_dev SET T1 = null , T2 = null , T3 = null , T4 = null , T5 = null , T6=null , T7= null , T8 = null , T9 = null , T10 = null , vendor_brand_id = '3000' where category_id = '11'
答案 0 :(得分:2)
嗯,您只使用fixedValues
中的值填充inputStr
:
for(int j=0;j<inputStr.length;j++)
{
fixedvalues[j]=inputStr[j];
System.out.println("jii"+fixedvalues[j]);
}
然后,您将运行fixedValues
的所有10个元素,并为每个值,将 all 的第一个参数设置为预准备语句中的参数。这意味着如果inputStr
的值小于10,则在循环结束时,所有准备好的语句参数都将为null。
我强烈怀疑你准备好的语句循环准备应该是:
for (int i = 0; i < fixedvalues.length; i++) {
preparedStatement.setString(i, fixedvalues[i]);
}
preparedStatement.setString(11, vendor_brand_id);
preparedStatement.setString(12, category_id);
因此,每个预准备语句参数都以fixedvalues
的不同值结束。当然这就是你真正想要的......
答案 1 :(得分:1)
我不认为你意识到在这个循环中你所做的就是将所有变量设置为相同的东西,直到你到达fixedvalues
的最后一个。最终结果是您将所有字段设置为fixedvalues[fixedvalues.length - 1]
preparedStatement = dbConnection.prepareStatement(updateTableSQL);
for (int i = 0; i < fixedvalues.length; i++) {
preparedStatement.setString(1, fixedvalues[i]);
preparedStatement.setString(2, fixedvalues[i]);
preparedStatement.setString(3, fixedvalues[i]);
preparedStatement.setString(4, fixedvalues[i]);
preparedStatement.setString(5, fixedvalues[i]);
preparedStatement.setString(6, fixedvalues[i]);
preparedStatement.setString(7, fixedvalues[i]);
preparedStatement.setString(8, fixedvalues[i]);
preparedStatement.setString(9, fixedvalues[i]);
preparedStatement.setString(10, fixedvalues[i]);
preparedStatement.setString(11, vendor_brand_id);
preparedStatement.setString(12, category_id);
}