2016-09-22 12 views
1

私はjava derbyデータベースを持っています。データベースに書き込んだり、データベースから読み込んだりできます。ユーザーがテキストフィールドに入力したテキストは、表示される結果を決定するために、データベースクエリに組み込まれるようにユーザ入力テキストがあるjava derbyデータベースクエリ

がそれを作る:

私は問題を抱えています。

検索ボタンをクリックすると、情報/クエリが「実行」画面に返されます。実際にユーザー入力をクエリに組み込むことができます。 abcをデータベースの番号に置き換えることで、コード内でそれを行うことができます。

何らかのコマンドライン引数を作成する必要がありますか?変数を別に設定しますか?次の例でどのように試したかのように、データベース情報がどこにあるクエリ情報を変数に置き換えることはできますか?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 

    String abc = jTextField1.getText(); 
    String data = "jdbc:derby://localhost:1527/sample"; 
    try (
     Connection conn = DriverManager.getConnection(
      data, "app", "app"); 
     Statement st = conn.createStatement()) { 
      Class.forName("org.apache.derby.jdbc.ClientDriver"); 
      ResultSet rec = st.executeQuery(
       "select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 " 
         + "where (ROW4 = 'abc')"); 
     while (rec.next()) { 
      System.out.println("ROW1:\t" 
      + rec.getString(1)); 
      System.out.println("ROW2:\t" + rec.getString(2)); 
      System.out.println("ROW3:\t" + rec.getString(3)); 
      System.out.println("ROW4:\t" + rec.getString(4)); 
      System.out.println("ROW5:\t" + rec.getString(5)); 
      System.out.println(); 
     } 
     st.close(); 

    } catch (SQLException s) { 
     System.out.println("SQL Error: " + s.toString() + " " 
       + s.getErrorCode() + " " + s.getSQLState()); 
    } catch (Exception e) { 
     System.out.println("Error: " + e.toString() 
     + e.getMessage()); 
    }           
} 
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {            

} 

答えて

1

変数を正しく設定していません。 ROW4を'abc'に設定する代わりに、変数を設定する必要があります。これを試して。

"select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 " + "where (ROW4 = '"+abc+"')" 

常により良いpreparedStatementを使用すること。これはSQLインジェクションに関連する多くの問題を回避します。

String selectSQL = "select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 where ROW4 = ?"; 
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL); 
preparedStatement.setString(1, abc); 
ResultSet rs = preparedStatement.executeQuery(selectSQL); 
関連する問題