2012-04-17 17 views
0

検索クエリを実行して結果をJTableに表示したい場合は、私は、ユーザがという名前,年齢、またはIDのように検索するフィールドを選択できるJComboBoxを持っています。検索クエリとその結果をjtableに表示

これは私のコードです。

try { 
    Class.forName("com.mysql.jdbc.Driver");  
    String connectionUrl = "jdbc:mysql://localhost/db?" + "user=root&password="; 
    con = DriverManager.getConnection(connectionUrl); 
    Statement state = con.createStatement(); 

    ResultSet result = state.executeQuery("SELECT * FROM db.atelier where '" + 
     jComboBox1.getSelectedItem().toString() + "'='" + 
     jTextField1.getText().toString() + "'"); 

    ResultSetMetaData resultMeta = result.getMetaData(); 

    while(result.next()){ 
     model.addRow(new Object[]{result.getObject(1),result.getObject(2)});  
     model.setDataVector(
      new Object[][]{{result.getObject(1),result.getObject(2)},{}},       
      new Object[]{resultMeta.getColumnName(1),resultMeta.getColumnName(2)}); 
     } 

    jPanel1.revalidate(); 
    model.fireTableDataChanged(); 
    this.repaint(); 
    state.close(); 
} 
catch (SQLException e){ 
    System.out.println("SQL Exception: "+ e.toString()); 
} 
catch (ClassNotFoundException cE){ 
    System.out.println("Class Not Found Exception: "+ cE.toString()); 
} 

con=null; 
+1

あなたの質問は何ですか? – ControlAltDel

+1

コードブロックに一貫した論理インデントを使用してください。 –

+0

SQLインジェクションに関してこの[Q&A](http://stackoverflow.com/q/332365/230513)も参照してください。 – trashgod

答えて

1

ちなみに、検索クエリを作成する方法は、アプリケーションをSQLインジェクションに公開するだけです。

2

コンボボックスの選択した項目の周りの一重引用符を削除して、文字列リテラルではなくフィールド名にする必要があります。さらに、PreparedStatementでは、SQL文字列内の?を置き換える追加のパラメータとしてテキストフィールドが指定されています。これは、テキストフィールド(とバックスラッシュなど)に入力された一重引用符をエスケープします。

関連する問題