I am dynamically creating SQL and setting values into them as shown
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();
}
}
But the issue i am facing here is that the values are being set as null
could anybody please let me know why
The sql that is being formed here is
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'
Well, you're only populating fixedValues
with as many values as are in inputStr
:
for(int j=0;j<inputStr.length;j++)
{
fixedvalues[j]=inputStr[j];
System.out.println("jii"+fixedvalues[j]);
}
You're then running over all 10 elements of fixedValues
and for each value, setting all the first to parameters in your prepared statement to that value. This means if inputStr
has less than 10 values, at the end of your loop all the prepared statement parameters will be null.
I strongly suspect that your prepared statement loop preparation should actually be:
for (int i = 0; i < fixedvalues.length; i++) {
preparedStatement.setString(i, fixedvalues[i]);
}
preparedStatement.setString(11, vendor_brand_id);
preparedStatement.setString(12, category_id);
So each prepared statement parameter ends up with a different value from fixedvalues
. Surely that's what you really intended...
See more on this question at Stackoverflow