2016-09-22 77 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);