我想使用insert语句填充表。为了获取数据,我使用了包含我需要的数据的数组。
我想以这种格式插入id和其他一些值。
id w0 w1 w2 w3
1 0.0 1.0 0.54 0.0
2 1.0 0.5 0.0 0.8
and others
id --->从普通数组中读取
其他数字--->从二维数组中读取
我想为每个新行添加一个新ID。
我遇到的问题是当id被卡在0时行正在移动和递增,因此每个新行都添加了相同的id,这是错误的,因为id是主键。
String sqlselect=new String("select k_id from keywordsTable");
ResultSet rss = stmt1.executeQuery(sqlselect);
kId=new String[numOfFields];
String f="";
String ff="";
String ffff="";
for (int i=0;i<kId.length;i++) {
while(rss.next())
{
kId[i]=rss.getString(1);
f="w"+kId[i]+ " varchar(20)";
ff+="w"+kId[i]+", ";
ffff+="w"+kId[i]+", ";
//fff+="w"+kId[i]+ " varchar(20), ";
String sqlalter=new String("ALTER TABLE "+ tableName +" add "+f+"");
//System.out.println(sqlalter);
stmt1.executeUpdate(sqlalter);
}
}
ff = ff.replaceAll(", $","");
ffff = ffff.replaceAll(", $","");
String sqlselectF=new String("select f_id from filesTable");
ResultSet rssF = stmt1.executeQuery(sqlselectF);
FId=new String[numOfFiles];
String matInsert = null;
String g="";
String seperator = "";
for (int s=0;s<FId.length;s++) {
while(rssF.next())
{
FId[s]=rssF.getString(1);
g=seperator+FId[s];
for (int k=0;k<di.mat.length;k++) { //row
String m="";
String sep = "";
for (int j=0;j<di.mat[k].length;j++) { //col
m+= (sep+di.mat[k][j]);
sep = " ,";
matInsert=new String("INSERT INTO "+ tableName +"(id,"+ffff+")"+"values" +"("+g+","+m+")");
} //col
System.out.println("ff="+g);
System.out.println(matInsert);
stmt1.executeUpdate(matInsert);
} //row
} //while
} //for 1
seperator=" ,";
答案 0 :(得分:1)
您不应插入ID,将列配置为 AUTO_INCREMENT ,并让MySQL在每次INSERT时分配ID。
其次,在while
循环内嵌套for
循环可能是一个逻辑错误。
第三,ffff
未在您发布的代码中的任何位置声明
第四,INSERT查询在几个地方缺少空格,它会出现(如果所有输入都是正确的),如下所示:
INSERT INTO tableName(id,ffff)values(x,y)