2017-09-02 124 views
1

我有這樣的與Oracle數據庫的連接:JDBC PreparedStatement和參數選擇查詢

String selectSQL = "SELECT ?,supplier_name FROM supplier WHERE supplier_id = ?"; 
     PreparedStatement preparedStatement = con.prepareStatement(selectSQL); 
     preparedStatement.setString(1, "supplier_id"); 
     preparedStatement.setInt(2, 1); 
     ResultSet rs2 = preparedStatement.executeQuery(); 

     while (rs2.next()) { 
      String userid = rs2.getString(1); 
      String username = rs2.getString(2); 
      System.out.println(userid); 
      System.out.println(username); 
     } 
     con.close(); 
    }; 

的問題是,第二個參數傳遞像我想這意味着

supplier_id = 1

但我有第一個參數的問題。每次只有字符串beeing通過,所以我的查詢看起來像

select「supplier_id」,supplier_name FROM supplier WHERE supplier_id = ?

代替

選擇supplier_id,supplier_name FROM供應商WHERE supplier_id = ?

由於這個原因,我沒有從表corecponding到supplier_id的值而是字符串「supplier_id」。 我在做什麼錯?我應該改變什麼才能使值不是字符串?

回答

4

以這種方式創建動態查詢是不可能的,您必須使用正常的字符串操作。參數只能用於值,如字符串,數字等,而不是名稱。

你的情況有可能做這樣的事情

String sqlTemplate = "SELECT <id_column>,supplier_name FROM supplier WHERE supplier_id = ?"; 
String selectSQL = sqlTemplate.replace("<id_column>", "supplier_id"); 
+0

這是什麼意思正常的字符串操作? – EdXX

+0

我編輯了我的答案,提供一個例子 – user3151902

+0

現在對我來說很清楚:)非常感謝你,你真棒:) – EdXX