Java JSP文件中的SQL查询从VXML文件中提取变量
我试图让SQL查询在JSP文件中工作。JSP文件由VXML文件拉取。这是我的JSP文件代码: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
<?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语句以便我们可以看到它并获取返回代码怎么样?