JDBC常用接口PrepareStatement

在新手推荐JSP+JavaBean+Servlet MVC模式用户注册模块中,有关数据库的操作,我们用到了:

  String sql ="select * from tb_user WHERE username=?";
  PreparedStatement ps = connection.prepareStatement(sql);
  ps.setString(1, username);
  ResultSet resultSet = ps.executeQuery();

这段代码用来在数据库中查找用户名为username的记录。

对比Statement只能用于执行事先准备好的静态SQL语句,PrepareStatement显得更加灵活。

PrepareStatement继承了Statement接口,是Statement的子接口,可以完成Statement的所有功能。SQL语句被预编译并存储在PrepareStatement对象中,然后可以使用该对象多次执行该语句。其中SQL语句中不确定的字段值用”?”代替。

我们在获取PrepareStatement对象是,必须传入一个待封装的SQL语句,如上述程序1~2行所示。

然后可以使用

  • void setString(int index, String s) throws SQLException;
  • void setInt(int index, Int i) throws SQLException;
  • void setLong(int index, Long l) throws SQLException;
  • void setObject(int index, Object o) throws SQLException;

等来设置”?”处的参数值。

例如上述程序第3行,设置传入的参数值为username,由于我们要传入的参数值为VARCHAR类型,因此选用

ps.setString(1, username);

如果我们需要传入的参数类型为INTEGER则应选用

* void setInt(int index, Int i) throws SQLException;

方法。

再比如UserDao.java中的如下代码:

        String sql = "insert into tb_user (username, password) values(?,?) ";
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());

            ps.executeUpdate();
        }catch(SQLException e) {
            e.printStackTrace();
        }finally {
            DataBaseUtil.closeConnection(connection);
        }

这里需要传入两个参数值,分别为username和password:

ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());

你可能感兴趣的:(jdbc)