Первое, что вы хотите, чтобы исправить это, пожалуйста, не используйте String
случай, когда вы хотите, чтобы изменить его. String
intance неизменен, и при изменении уже созданного String
создается новый модифицированный экземпляр и он не является бесплатным. Для этого необходимо использовать StringBuilder
, которые имеют методы экземпляра, которые позволяют изменять его без необходимости создания нового экземпляра. Я рекомендую вам всегда использовать StringBuilder
при изменении String
. и во-вторых, вы вызываете con.prepareStatement(sql)
, а затем вы изменяете его поле sql. это не хорошо, не так ли? Так что добавьте его только после работы со строкой.
String sql =
"CREATE TABLE if not exists itemset (?";
for(int j=1; j < ccolumns; j++) {
sql += ",?";
}
sql += ")";
System.out.println(sql);
up1 = con.prepareStatement(sql);
for(int j=1; j < ccolumns+1; j++) {
System.out.println(j);
up1.setString(j, "item"+j+" TINYINT(10)");
}
up1.executeQuery();
Вы не можете назвать prepareStatement
с данной String
, а затем изменить его.
Но более чище и быстрее, попробуйте сделать это как этот
StringBuilder sqlStatement = new StringBuilder(
"CREATE TABLE if not exists itemset (?");
for(int j=1; j < ccolumns; j++) {
sqlStatement.append(",?");
}
sqlStatement.append(")");
up1 = con.prepareStatement(sqlStatement.toString());
for(int j=1; j < ccolumns+1; j++) {
System.out.println(j);
up1.setString(j, "item"+j+" TINYINT(10)");
}
up1.executeQuery();
Возможно, вам следует называть «подготовить» * после того, как * вы закончите строить строку SQL;)? – paulsm4
PreparedStatement не следует использовать для CREATE TABLE sql. –