2016-11-03 2 views
0

테이블에 행을 추가하려고합니다. 처음에 나는이 코드를 가지고 있지만, 8 열 (추가 열이 변경되었다가 난 단지 2 열을했다 처음)이 있다는 오류를 만들지 만 나는 단지 2 개 값을 추가하고 :열이 변경된 후 테이블에 행을 추가하는 방법은 무엇입니까? (SQLite, JAVA)

PreparedStatement addDate = 
con.prepareStatement("insert into contributions values(?,?)"); 

      addDate.setString(2, string); 
      addDate.execute(); 
    } 

그리고 나는이 시도를 :

[SQLITE_ERROR] SQL error or missing database (table contributions has 8 columns but 1 values were supplied) 

어떤 도움을 주시면 감사하겠습니다 :

public void addDateToContributionsTable(String string) throws ClassNotFoundException, SQLException { 
     if(con == null) { 
      // get connection 
      getConnection(); 
     } 
      Statement st = con.createStatement(); 
      ResultSet rs = st.executeQuery("Select * from contributions"); 
      ResultSetMetaData rsmd = rs.getMetaData(); 
      int columnsNumber = rsmd.getColumnCount(); 
      StringBuilder sb = new StringBuilder(); 
      for(int i= 0; i < columnsNumber; i++){ 
       sb.append("?"); 
       sb.append(","); 
      } 

      System.out.println(sb.toString()); 
      System.out.println("insert into contributions values('"+sb.toString()+"')"); 
      PreparedStatement addDate = con 
        .prepareStatement("insert into contributions values('"+sb.toString()+"')"); 


      addDate.setString(2, string); 
      addDate.execute(); 
    } 

하지만 난 여전히 같은 오류가 데. :)

+0

당신이 값을 전달하는에 열 이름을 가지고 당신의 INSERT 쿼리를 변경할 수있는 경우, 이러한 문제를 제기하지 않을 - 다른 사람이 필요하지 않은 고려! –

답변

0

감사 :

INSERT INTO MYTABLE VALUES(?, ?, ?) 

당신은 3 개 값을 제공해야합니다. 문제는 그 숫자와 관련이 있습니까? 컬럼 번호를 늘리거나 줄일 때마다 내 진술을했습니다. 나의 진술에 관한 유일한 문제는이 표현을 갖는 것이다. '+ questionMarks +' '대신'+ questionMarks + '로 변경하면 효과가있었습니다. 얼마나 많은 setXXX() 메소드를 사용 하느냐에 관계없이 얼마나 많은 수의? 테이블의 열 개수와 동일하면 작동합니다. 아래 코드를 가지고 더 이상 오류가 발생하지 않았습니다.

PreparedStatement addmembers = con 
        .prepareStatement("insert into membersdata values "+questionMarks+""); 
        addmembers.setString(2, name); 
        addmembers.setString(3, accounts); 
        addmembers.setString(4, email); 
        addmembers.execute();    
0

값은 어디에 삽입해야하는지 모르기 때문에 각 값의 열 이름을 작성하는 것이 좋습니다.

reparedStatement addDate = 
con.prepareStatement("insert into contributions (COLUMN_NAMES) values (?,?)"); 

     addDate.setString(2, string); 
     addDate.execute(); 
} 
+0

제 문제는 열 번호를 변경하는 방법이 있다는 것입니다. 그래서 값을 (?,?)로 설정하면. 열의 수가 증가 할 수 있기 때문에 앞으로 문제가 발생할 것입니다. –

0

당신은 SQL에서 여러 바인드 매개 변수를 추가,하지만 당신은 오직 그들 중 하나를 바인딩 :

addDate.setString(2, string); 

당신은 바인드 매개 변수 당()의 setXXX을 호출해야합니다.

정말로 같은 값을 사용하려면 이름이 지정된 매개 변수를 대신 사용할 수 있습니다. 그러면 setXXX()를 여러 번 호출 할 필요가 없습니다. 이것을 참조 할 수 있습니다 : Named parameters in JDBC

또한 questionMarksList 및 StringBuilder sb는 두 개의 루프를 통해 동일한 작업을 수행합니다.

편집

은 SQL 2 물음표가있는 경우, 당신은이 개 바인드 매개 변수를 가지고, 당신은이 개 바인드 매개 변수를 설정해야합니다.

3 바인드 매개 변수와 SQL의 경우 : 내 질문에 응답하는 모든

addDate.setString(1, "String1"); // Bind to first question mark 
addDate.setString(2, "String2"); // etc. 
addDate.setString(3, "String3"); 
+0

내 코드를 편집하고 questionMarksList를 제거했습니다. :) setXXX() 사용하는 방법을 잘 모르겠지만 내 주요 문제는 열을 언제든지 변경할 수 있습니다. 내 데이터베이스에는 회원 이름이 있습니다. 따라서 사용자가 멤버를 추가 할 때마다 열 번호가 변경됩니다. 당신의 방법은 내 문제를 해결할 수 있습니까? 프로그래밍에 관해서 미안해. –

+0

내 편집 내용이 삭제되는지 확인하십시오.또한, 아니오. 프로그램이 해당 컬럼의 의미를 아는 경우 문제가됩니다. 무엇을 넣을 지 어떻게 말할 수 있습니까? –

관련 문제