一 环境搭建
1.导入MySQL的开发商提供的MySQL数据库的驱动包。
选中驱动包右键Add as library添加。
2.加载MySQL驱动类。
第一种:
//根据类名加载MySQL驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
第二种:
//根据类名加载MySQL驱动类
DriverManager.registerDriver(new Driver());
3.建立与数据库的连接通道。
1)这需要使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个
物理连接的数据库。
2) Connection conn = DriverManager.getConnection(URL,USER,PASS); URL:jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库名?serverTimezone=Asia/Shanghai
//返回connection对象
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai", "root", "root");
4.向数据库发送sql 。
获得Satement执行sql语句
//获得stateme,用来发送sql
Statement st = connection.createStatement();
st.executeUpdate("INSERT INTO student(NAME,gender,birthday,phone)"+
"VALUE('"+name+"','"+gender+"','"+birthday+"','"+phone+"')");
5.关闭与数据库的连接通道。
.close()方法
//关闭发送通道
st.close();
//关闭数据库连接通道
connection.close();
二 Statement与PreparedStatement
//获得stateme,用来发送sql
Statement st = connection.createStatement();
st.executeUpdate("INSERT INTO student(NAME,gender,birthday,phone)"+
"VALUE('"+name+"','"+gender+"','"+birthday+"','"+phone+"')");
Satement直接将参数拼接到sql语句中,不能防止sql注入,不安全。
2.获得PrepareStatement执行sql语句
//预编译方式,预先将sql及参数预编译到PreparedStatement对象中
PreparedStatement ps = connection.prepareStatement("insert into student(name,gender,birthday,phone)"+
"value(?,?,?,?)");
ps.setObject(1, name);
ps.setObject(2, gender);
ps.setObject(3, birthday);
ps.setObject(4, phone);
//执行
ps.executeUpdate();
PrepareStatement对与代码的可读性和可维护性有较好的表现。
在安全性方面,预编译sql,向sql中传值是进行检测,一个?是一个占位符,对应一个值,能防止sql注入。
三 结果集处理
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai", "root", "root");
String NO = "1";
PreparedStatement ps = connection.prepareStatement("SELECT NO,NAME," +
"gender,birthday," +
"height,phone," +
"address,reg_time " +
"FROM student\n" +
"WHERE NO = ?");
ps.setObject(1, NO);
//执行查询语句,将查询到的数据封装在ResultSet对象中
ResultSet rs = ps.executeQuery();
多数据结果集处理方式:ResultSet rs = ps.executeQuery();
ResultSet rs = ps.executeQuery();
ArrayList<Student> students = new ArrayList<>();
while (rs.next()) {
Student student = new Student();
student.setNo(rs.getInt("no"));
student.setName(rs.getString("name"));
student.setGender(rs.getString("gender"));
student.setBirthday(rs.getDate("birthday"));
student.setHeight(rs.getFloat("height"));
student.setPhone(rs.getString("phone"));
student.setAddress(rs.getString("address"));
student.setRegTime(rs.getTimestamp("reg_time"));
students.add(student);
}
System.out.println(students);