2013-02-23 90 views
-1
 PreparedStatement stmt=con.prepareStatement("select * from test where testname like '?%'"); 
     stmt.setString(1,keyword); 
     rset=stmt.executeQuery(); 

     while(rset.next()){ 
      out.println(rset.getString(1)); 
      out.println(rset.getString(2)); 
      out.println(rset.getString(3)); 
      out.println(rset.getString(4)); 


     } 

輸入一個值我使用Tomcat作爲服務器獲取選擇的行形式的數據庫表和例外是: java.sql.SQLException中:參數索引超出範圍(1>的參數數目,這是0)。爲了通過在形式

這裏我輸入testname的形式,並通過使用getParameter();方法將此值分配給字符串關鍵字。我想使用'like',這樣我就可以只檢索選定的測試名稱。

+0

你的數據庫是什麼樣的? – Achrome 2013-02-23 09:48:41

+0

表中有多少列? 「rset.getString(4)」應該至少有4個才能工作。 – 2013-02-23 09:52:48

回答

1

問號不得用引號引起來。試試這個:

PreparedStatement stmt=con.prepareStatement(
    "select * from test where testname like concat(?, '%')"); 

或者,你可以這樣來做:

PreparedStatement stmt=con.prepareStatement(
    "select * from test where testname like ?"); 
stmt.setString(1,keyword + "%"); 
0

你不能有一個?引用中的,它不起作用。一個簡單的解決方法是在查詢字符串中追加實際值。

String keyword = "parametervalue"; 
String query = "select * from test where testname like '" + keyword +"%'"; 
Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery(query); 
+0

這使您打開SQL注入。更好的辦法是將'%'放入參數值本身,或者將參數與它連接(例如'LIKE?||'%'') – 2013-02-23 12:54:02