Java.sql.SQLException正在执行选择

Java.sql.SQLException正在执行选择,java,sql,sqlexception,Java,Sql,Sqlexception,当我尝试执行此代码时: try { pstm = connection.prepareStatement("SELECT * FROM Menu WHERE (menuName LIKE '?%')"); pstm.setString(1,searchedMenu.getMenuName()); rs = pstm.executeQuery(); while (rs.next()) { Menu m

当我尝试执行此代码时:

    try {

        pstm = connection.prepareStatement("SELECT * FROM Menu WHERE (menuName LIKE '?%')");
        pstm.setString(1,searchedMenu.getMenuName());
        rs = pstm.executeQuery();
        while (rs.next()) {
            Menu menu=new Menu();
            menu.setMenuId(rs.getInt("menuId"));
            menu.setMenuName(rs.getString("menuName"));
            temp.add(menu);
        }
我在主题上有错误,为什么?我的目的是搜索字符串或其一部分。 多谢各位

编辑:错误为: java.sql.SQLException:参数索引超出范围(1>参数数,为0)。 这是指这一行: setString(1,searchedMenu.getMenuame())

试试这个:

SELECT * FROM Menu WHERE (menuName LIKE ?)

pstm.setString(1, searchedMenu.getMenuName() + "%");
试试这个:

SELECT * FROM Menu WHERE (menuName LIKE ?)

pstm.setString(1, searchedMenu.getMenuName() + "%");
试试这个:

SELECT * FROM Menu WHERE (menuName LIKE ?)

pstm.setString(1, searchedMenu.getMenuName() + "%");
试试这个:

SELECT * FROM Menu WHERE (menuName LIKE ?)

pstm.setString(1, searchedMenu.getMenuName() + "%");
请尝试此查询

"SELECT * FROM Menu WHERE menuName LIKE ?"
然后将
%
附加到要绑定到此占位符的字符串

pstm.setString(1,searchedMenu.getMenuName()+"%");
请尝试此查询

"SELECT * FROM Menu WHERE menuName LIKE ?"
然后将
%
附加到要绑定到此占位符的字符串

pstm.setString(1,searchedMenu.getMenuName()+"%");
请尝试此查询

"SELECT * FROM Menu WHERE menuName LIKE ?"
然后将
%
附加到要绑定到此占位符的字符串

pstm.setString(1,searchedMenu.getMenuName()+"%");
请尝试此查询

"SELECT * FROM Menu WHERE menuName LIKE ?"
然后将
%
附加到要绑定到此占位符的字符串

pstm.setString(1,searchedMenu.getMenuName()+"%");

该错误可能是因为您没有任何要设置的参数标记,因为您在字符串中添加了问号:

menuName LIKE '?%'
因此,当您这样做时:

pstm.setString(1,searchedMenu.getMenuName());
没有要设置的内容,它将抛出一个错误。如果检查堆栈跟踪,可能会看到一条关于参数标记数量的消息

您应该在Java中将百分比连接到字符串中。在SQL中连接它将提供不太一致的结果,这因RDBMS而异

因此,我建议您使用如下参数编写SQL:

SELECT * FROM Menu WHERE (menuName LIKE ?)
然后在java代码中设置如下参数:

pstm.setString(1, searchedMenu.getMenuName() + "%");

还考虑修剪菜单名,如果您知道将有空格。如果在一组空格后有一个百分号,则结果可能与预期不符

该错误可能是因为您没有任何要设置的参数标记,因为您在字符串中添加了问号:

menuName LIKE '?%'
因此,当您这样做时:

pstm.setString(1,searchedMenu.getMenuName());
没有要设置的内容,它将抛出一个错误。如果检查堆栈跟踪,可能会看到一条关于参数标记数量的消息

您应该在Java中将百分比连接到字符串中。在SQL中连接它将提供不太一致的结果,这因RDBMS而异

因此,我建议您使用如下参数编写SQL:

SELECT * FROM Menu WHERE (menuName LIKE ?)
然后在java代码中设置如下参数:

pstm.setString(1, searchedMenu.getMenuName() + "%");

还考虑修剪菜单名,如果您知道将有空格。如果在一组空格后有一个百分号,则结果可能与预期不符

该错误可能是因为您没有任何要设置的参数标记,因为您在字符串中添加了问号:

menuName LIKE '?%'
因此,当您这样做时:

pstm.setString(1,searchedMenu.getMenuName());
没有要设置的内容,它将抛出一个错误。如果检查堆栈跟踪,可能会看到一条关于参数标记数量的消息

您应该在Java中将百分比连接到字符串中。在SQL中连接它将提供不太一致的结果,这因RDBMS而异

因此,我建议您使用如下参数编写SQL:

SELECT * FROM Menu WHERE (menuName LIKE ?)
然后在java代码中设置如下参数:

pstm.setString(1, searchedMenu.getMenuName() + "%");

还考虑修剪菜单名,如果您知道将有空格。如果在一组空格后有一个百分号,则结果可能与预期不符

该错误可能是因为您没有任何要设置的参数标记,因为您在字符串中添加了问号:

menuName LIKE '?%'
因此,当您这样做时:

pstm.setString(1,searchedMenu.getMenuName());
没有要设置的内容,它将抛出一个错误。如果检查堆栈跟踪,可能会看到一条关于参数标记数量的消息

您应该在Java中将百分比连接到字符串中。在SQL中连接它将提供不太一致的结果,这因RDBMS而异

因此,我建议您使用如下参数编写SQL:

SELECT * FROM Menu WHERE (menuName LIKE ?)
然后在java代码中设置如下参数:

pstm.setString(1, searchedMenu.getMenuName() + "%");

还考虑修剪菜单名,如果您知道将有空格。如果在一组空格后有一个百分号,则结果可能与预期不符

我不知道这是哪个错误,
java.sql
是如何工作的,或者您使用的是哪种sql。但是,请尝试
其中的menuName类似(?| |'%”)
。它可能失败的原因有很多,在您发布实际错误消息之前,我们不会知道实际原因,因为您的参数可能包含单引号。@GermannArlington:这在参数化查询中并不重要…@minitech我注意到了其中的引号,我没有意识到的是,它们将完全阻止参数替换。我知道在参数化查询中,引号是转义的,我的想法是,使用封闭引号可能无法正确转义。我不知道这是哪一个错误,
java.sql
是如何工作的,或者您使用的是哪一个sql。但是,请尝试
其中的menuName类似(?| |'%”)
。它可能失败的原因有很多,在您发布实际错误消息之前,我们不会知道实际原因,因为您的参数可能包含单引号。@GermannArlington:这在参数化查询中并不重要…@minitech我注意到了其中的引号,我没有意识到的是,它们将完全阻止参数替换。我知道在参数化查询中,引号是转义的,我的想法是,使用封闭引号可能无法正确转义。我不知道这是哪一个错误,
java.sql
是如何工作的,或者您使用的是哪一个sql。但是,请尝试
其中的menuName类似(?| |'%”)
。它可能失败的原因有很多,在您发布实际错误消息之前,我们不会知道实际原因,因为您的参数可能包含单引号。@GermannArlington:这在参数化查询中并不重要…@minitech我注意到了其中的引号,我没有意识到的是,它们会阻止参数完全替换