不能使用preparestatement插入数据

时间:2014-10-29 06:50:45

标签: java mysql prepared-statement

我正在尝试使用prepareStatement将数据插入到mysql数据库中,但它显示错误,如

  

类型不匹配:无法从java.sql.PreparedStatement转换为    com.mysql.jdbc.PreparedStatement

以下是我的代码:

<%@ page import="java.sql.*" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>


           <%

               try
                   {
                      Class.forName("com.mysql.jdbc.Driver");
   Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
                      // Statement st=connection.createStatement();
                      PreparedStatement st=null;
                      String Eid = request.getParameter("Eid");
                      String Rpswd=request.getParameter("Rpswd");
                      String uType=request.getParameter("uType");

                     // String query="insert into login_table(`uid`,`pswd`,`user_type`)  values('"+Eid+"','"+Rpswd+"','"+uType+"')";
    String query="insert into login_table(`uid`,`pswd`,`user_type`)  values(?,?,?)";
                       st = con.prepareStatement(query);
                       st.setString(1,Eid);
                       st.setString(2,Rpswd);
                       st.setString(3,uType);


                           // int i= st.executeUpdate(query);

                         int i= st.executeUpdate();


                      }
                 catch(Exception e)
                              {
                                 e.printStackTrace();
                               }

                   %>

</body>
</html>

st = con.prepareStatement(query);上收到错误。

帮帮我。我哪里错了?

注意:这是我第一次使用preparedstatement中的CreateStatement,所以建议我哪一个代码有用?

2 个答案:

答案 0 :(得分:4)

修复导入并替换

import com.mysql.jdbc.PreparedStatement;

通过

import java.sql.PreparedStatement;

您不应该在代码中使用特定于mysql的类。您只需要标准的JDBC类。

关于使用aof准备好的stataments,是的,每次需要将参数传递给查询时都应该使用它。这是一个健壮性和安全性问题(阅读SQL注入攻击)。

但是,JDBC代码和一般的scriptlet在JSP中没有任何关系。 JSP是视图组件,其作用是生成HTML。他们不是数据访问组件。这些应该用Java编写,并从控制器servlet访问。

答案 1 :(得分:2)

只需删除

import com.mysql.jdbc.PreparedStatement;

并替换为

import java.sql.PreparedStatement;