Java JSP文件中的SQL查询从VXML文件中提取变量

Java JSP文件中的SQL查询从VXML文件中提取变量,java,jsp,jdbc,Java,Jsp,Jdbc,我试图让SQL查询在JSP文件中工作。JSP文件由VXML文件拉取。这是我的JSP文件代码: <?xml version="1.0"?> <%@ page import="java.util.*" %> <%@ page import="java.sql.*" %> <% boolean success = true; // Always optimistic String info = ""; String schoolname = request

我试图让SQL查询在JSP文件中工作。JSP文件由VXML文件拉取。这是我的JSP文件代码:

<?xml version="1.0"?>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<% boolean success = true; // Always optimistic
 String info = "";
 String schoolname = request.getParameter("schoolname");
 String informationtype = request.getParameter("informationtype");

 try {
        Class.forName("org.postgresql.Driver");
        String connectString = "jdbc:postgresql://localhost:5435/N0176359";
        String user = "****";
        String password = "*****";
        Connection conn = DriverManager.getConnection(connectString, user, password);
        Statement st = conn.createStatement();
  ResultSet rsvp = st.executeQuery("SELECT * FROM lincolnshire_school_information_new WHERE school_name=\'"+schoolname+"\'");
        rsvp.next();
       info = rsvp.getString(2);
 }catch (ClassNotFoundException e) {
         success = false; // something went wrong
 }
%>

如您所见,我试图将声明为“schooname”的变量的值插入SQL查询的末尾。然而,当我开始运行jsp文件时,它不起作用,我得到一个错误“ResultSet未正确定位”。当我放入一个标准查询时(不尝试使其成为变量的值,它工作正常)


希望这是有意义的,谢谢你的帮助

在我看来没问题,我怀疑这与您传递的参数有关-我建议执行以下调试步骤:

1) 您能否打印schoolname参数的值并验证它是否是您认为的值

2) 在执行SQL语句之前,能否在变量中形成SQL语句,并将其打印出来


您可能还需要检查
rsvp.next()
调用的布尔返回值。如果为false,则表示查询没有返回任何行。(javadoc for)

在尝试访问行的列之前,您将忽略的结果。
ResultSet#next()
如果有行,则返回
true
,否则返回
false
。如果试图访问不存在的行,则会出现这种异常

因此,更改以下两行

    rsvp.next();
    info = rsvp.getString(2);
详情如下:

    if (rsvp.next()) {
        info = rsvp.getString(2);
    }
这样,代码将不再尝试访问不存在的行。下一个问题可能是:“为什么它没有返回一行”?答案可能是:“要么SQL查询错误,要么该行实际上不在数据库中”。这个问题不在Java/JSP/JDBC的范围之内。调试SQL查询(运行一个调试器,或者只执行它的
System.out.println()
)并将其复制粘贴到DB管理工具中,然后验证/执行它。我打赌这些超级反斜杠是问题的根本原因,或者
schoolname
本身包含一个需要转义的字符


也就是说,这段代码不属于JSP文件。它属于一个真正的Java类。趁现在还不太晚就开始吧。另外,我将再次学习基于的JDBC,您的JDBC代码就是泄漏资源。您需要在
try
块的
finally
块中使用后释放(关闭)它们,因为您已经获得了它们。另外,我会使用
PreparedStatement
而不是
Statement
来保存您的代码。前面提到的Sun教程也介绍了这一点。

您好,我已经尝试使用准备好的语句,但它不起作用。我似乎成功地传递了变量,因为我可以让它说出变量。好的,打印SQL语句以便我们可以看到它并获取返回代码怎么样?