JBDC java数据库连接(2)

目录

JBDC建立

获得PrepareStatement执行sql语句

形式:

PrepareStatement中的方法:

实例

PreparedStatement和Statement

基于以下的原因:


JBDC建立


获得PrepareStatement执行sql语句


 在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数

形式:

  •  PrepareStatement ps = connection.prepareStatement(sql);

PrepareStatement中的方法:

  • Int executeUpdate()
  1. 用于执行ddl语句和dml(增,删,改)语句 返回操作的行数
  2. 用于执行ddl语句返回0 用于执行dml语句返回操作的行数
  • ResultSet executeQuery();
  1. 用于执行查询语句 返回一个ResultSet 集合、
  • close()
  1. 关闭与数据库的链接通道
  2. 每次操作完成后关闭所有与数据库交互的通道
  •  使用ResultSet中的next()方法获得下一行数据
  •  使用getXXX(String name)方法获得值

实例

public class demo5 {
    public static void main(String[] args) {
        ArrayList students = null;
        try {
            students = demo5.findStudentByGender("女");
            System.out.println(students);

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public static ArrayList findStudentByGender(String gender) throws SQLException {
        ArrayList students = new ArrayList<>();//用来封装查询到的多个学生对象
        Connection connection = JDBCUtil.getConnection();
        PreparedStatement ps = connection.prepareStatement("select id,num,name,gender,birthday,phone,regtime from student where gender = ?");
        ps.setObject(1, gender);
        ResultSet resultSet = ps.executeQuery();
        while (resultSet.next()){
            Student student = new Student();
            student.setId(resultSet.getInt("id"));
            student.setNum(resultSet.getInt("num"));
            student.setName(resultSet.getString("name"));
            student.setGender(resultSet.getString("gender"));
            student.setBirthday(resultSet.getDate("birthday"));
            student.setRegtime(resultSet.getTimestamp("regtime"));
            students.add(student);
        }
        resultSet.close();
        ps.close();
        connection.close();
        return students;
    }
}

PreparedStatement和Statement

基于以下的原因:

1、代码的可读性和可维护性. 虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读 性还是可维护性上来说.都比直接用Statement的代码高很多档次: stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')"); perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例

2、最重要的一点是极大地提高了安全性. 防止sql注入

Stringsql=“ delete from user where id = ”+num;

如果我们把[or 1=1]作为id传入进来? delete from tb_name where id = 1 or 1 = 1; 因为1=1肯定成立 而如果使用预编译语句.

你传入的任何内容就不会和原来的语句发生任何匹配的关系. 预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句.

PreparedStatement和Statement中的executeQuery()方法中会返回一个 ResultSet对象,查询结果就封装在此对象中.

你可能感兴趣的:(数据库,java,oracle)