Java 无法从Access数据库检索数据
我正在尝试创建一个JavaWeb应用程序。在该应用程序中,我创建了一个servlet来从MS Access数据库检索数据。我在实验室做了很多次,但现在不行了。我不知道原因是什么。以下是我的processRequest方法: 处理请求Java 无法从Access数据库检索数据,java,ms-access,Java,Ms Access,我正在尝试创建一个JavaWeb应用程序。在该应用程序中,我创建了一个servlet来从MS Access数据库检索数据。我在实验室做了很多次,但现在不行了。我不知道原因是什么。以下是我的processRequest方法: 处理请求 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, ClassNotFoundException, SQLException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String des=request.getParameter("desc");
Class.forName("sun.jdbc.odbc.JdbcOdbcConnection");
Connection con=DriverManager.getConnection("jdbc:odbc:wsds","","");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select * from Table1 where wsdesc="+des);
while(rs.next())
{
String description=rs.getString("wsdesc");
String url=rs.getString("url");
out.println(description);
out.println(url);
}
} finally {
out.close();
}
}
我使用Netbeans 7.0.1 IDE。我创建了一个数据源wsds。我检查表列名是否正确。任何人都可以帮助我???将驱动程序名称更新为
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
尝试添加引号
ResultSet rs=st.executeQuery("select * from Table1 where wsdesc='"+des+"'");
改变
ResultSet rs=st.executeQuery("select * from Table1 where wsdesc="+des);
到
ResultSet rs=st.executeQuery("select * from Table1 where wsdesc='"+des+"'");
Varchar数据类型应该用'
'
使用PreparedStatement代替语句
PreparedStatement pt=con.prepareStatement("select * from Table1 where wsdesc=?");
pt.setString(1,desc);
ResultSet rs=pt.executeQuery();
有错误吗?Stacktrace?您正在尝试访问MS access。你在
类中写了什么。对于name
请使用catch()
。至少您会知道它是正确执行还是抛出了“SQLException”(1)尝试注释掉Class.forName
语句。在大多数情况下,不再需要它。(2) 您将用户数据直接注入到SQL语句中,因此容易出现SQL注入问题。您也可能没有正确引用您的wsdesc
值。如果使用PreparedStatement
,这两个问题都会消失。我无法在try块之后添加catch。它显示了一个错误,对应的异常没有在try正文中抛出。@vinayakpingle我不认为sun.jdbc.odbc.JdbcOdbcConnection驱动程序存在。在我将JdbcOdbcConnection更改为JdbcOdbcDriver后,它不会显示任何内容。@user3243259您需要将varchar放在“”中,看我的answer@GordThompsonOP正在使用语句,所以我在语句中给出了解决方案。我还提供了使用preparedstatement的替代方案