-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」を使用して、選択したテスト名のみを取得できるようにします。

4

3 に答える 3

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 + "%");
于 2013-02-23T09:55:08.033 に答える
0

?を持つことはできません。引用すると、うまくいきません。簡単な回避策は、クエリ文字列に実際の値を追加することです。

String keyword = "parametervalue";
String query = "select * from test where testname like '" + keyword +"%'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
于 2013-02-23T10:06:49.690 に答える
0

クエリを次のように変更します

PreparedStatement stmt=con.prepareStatement("select * from test where testname  LIKE '%' || ? || '%' "); 

http://www.coderanch.com/t/502785/JDBC/databases/preparedstatement

于 2013-02-23T09:55:41.890 に答える