2013-02-23 50 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