2017-05-12 9 views
0

NetbeansのJFrameパネルからSQLデータベースを更新しようとしています。現在、私は "registernewStudent"パネルのボタンを使用しようとしています。ここでは、最初の(Student ID)と最後の(room)は整数で、中間2は文字列でなければなりません。しかし、「スレッド内の例外」というエラーメッセージが表示されています。AWT-EventQueue-0「java.lang.NullPointerException」Java with SQL insert

以下はボタンのソースコードです。

これは私たちの最初の実際のプロジェクトです。私たちが得ることのできるお役に立てれば幸いです。

private void btnNyREActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     String talStrang1 = txtElevID.getText(); 
     int tal1 = Integer.parseInt(talStrang1); 
     String Strang2 = txtElevFN.getText(); 
     String Strang3 = txtElevEN.getText(); 
     String talStrang4 = txtElevSS.getText(); 
     int tal2 = Integer.parseInt(talStrang4); 

     database.insert("insert into Elev values(tal1, Strang2, Strang3,tal2)"); 

    } catch (InfException ex) { 
     Logger.getLogger(NyRegElev.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}  
+2

'PreparedStatement'の使い方を学んでください:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

答えて

3

1つは、値を挿入する列を指定する必要があります。ような何か:

database.insert("insert into Elev (column1, column2, column3, column4) values...;

column#は、テーブル内の列の実際の名前になります。

第2に、変数をSQLに文字列として入れることはできません。変数として検出されません。代わりに、連結を使用して、次のようなことをする必要があります。

database.insert("insert into Elev (column1, column2, column3, column4) values(" + tal1 + "," + Strang2 + "," Strang3 + "," tal2 + ")"; 

しかしこれは脆弱性につながります。 SQLインジェクションを避けるには、prepared statementsを代わりに使用する必要があります。

JavaのMySQLプリペアドステートメントの例は、上記のリンクにあります。例えば、私はあなたのクエリを撮影した、それはあなたのためにどのように見えるかに例を変換:

String query = "insert into Elev (column1, column2, column3, column4) values (?, ?, ?, ?)"; 

// create the mysql insert preparedstatement 
     PreparedStatement preparedStmt = conn.prepareStatement(query); 
     preparedStmt.setInt(1, tal1); 
     preparedStmt.setString (2, Strang1); 
     preparedStmt.setString (3, Strang3); 
     preparedStmt.setInt(4, tal2); 

// execute the preparedstatement 
     preparedStmt.execute(); 

指定されたパラメータを取得している?年代の場所でそれらを置くプリペアドステートメントquery変数(他のものの中で)。