2014-06-22 3 views
0

Я хочу заполнить таблицу, используя инструкцию insert. Чтобы получить данные, я использовал массивы, содержащие нужные мне данные.Вставить в таблицу DB java

Я хочу вставить 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 

идентификатор ---> читать из нормального массива

другие цифры ---> читать из 2d массива

и я хочу для каждой новой строки нового идентификатора.

Проблема заключается в том, что строки перемещаются и увеличиваются, в то время как идентификатор застрял в 0, поэтому каждая новая строка добавляется с тем же идентификатором, что неверно, поскольку идентификатор является первичным ключом.

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=" ,"; 
+1

Вы не увеличивающиеся или установка 'G' в вашей трети для цикла. –

+0

Не относится к вопросу, но все еще важно: имена, которые вы выбрали для переменных, ужасны (FId, rssF, di, mat, g, sep, m, ffff ...), вы должны подумать о том, чтобы добавить дополнительную мысль в выборе более значимых имена. – alfasin

+0

@alfasin большое спасибо за совет. Я знаю, что я не пользуюсь хорошими именами, они временные, я поменяю их, когда закончу кодирование – Souad

ответ

1

Вы не должны вставлять идентификаторы, настроить столбец как AUTO_INCREMENT и пусть MySQL присваивать идентификаторы при каждом INSERT.

Во-вторых, вложение while цикла внутри цикла for, вероятно, является логической ошибкой.
В-третьих, ffff не объявлен нигде в коде, который вы опубликовали.
Forth, запрос INSERT отсутствует пробельные в нескольких местах, он выйдет (если все входные правильно), как что-то вроде:

INSERT INTO tableName(id,ffff)values(x,y) 
+0

Я хочу вставить идентификаторы вручную, эти идентификаторы берутся из другой таблицы. о заявлении вставки он работает, и я попробовал его в других случаях. Я отредактирую код, чтобы добавить объявление ffff. Спасибо за ваше время – Souad

Смежные вопросы