1、JDBC 加载流程
-
加载驱动 Driver
-
注册驱动 DriverManager
-
获取链接 Connection
-
获取语句对象statment
-
执行sql语句
-
关闭对象 connenction statment 释放资源
//1
Driver driver = new com.mysql.cj.jdbc.Driver();
//2
DriverManager.registerDriver(driver);
//合并1和2 反射加载静态代码块
//Class.forName("com.mysql.cj.jdbc.Driver");
//3
connection = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&useUnicode=true" +
"&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true",
"root", "root");
//4
statement = connection.createStatement();
//5
String sql = "insert into dept values(52, '教学部', '北京')";
String sql = "delete from dept where DEPTNO=52";
int i = statement.executeUpdate(sql); //增加删除改查
System.out.println(i);
//6
statement.close();
connection.close();
2、增删改
String sql = "delete from dept where DEPTNO=52";
int i = statement.executeUpdate(sql); //增加删除改查
3、查
String sql = "select * from emp";
ResultSet resultSet = statement.executeQuery(sql);
resulSet.next();游标
resulSet.getInt(1) //值可以是1-n, 也可以是字段名称(建议使用这个)
resulSet.getString()..。等其他类型
//通过游标 next()
String sql = "select * from emp";
ResultSet resultSet = statement.executeQuery(sql);
List<Emp> list = new ArrayList();
while (resultSet.next()){
Emp emp = new Emp();
emp.setEMPNO(resultSet.getInt("empno"));
emp.setENAME(resultSet.getString("ename"));
emp.setMGR(resultSet.getString("mgr"));
emp.setHIREDATE(resultSet.getDate("hiredate"));
emp.setSAL(resultSet.getDouble("sal"));
emp.setCOMM(resultSet.getDouble("comm"));
emp.setDEPTNO(resultSet.getInt("deptno"));
list.add(emp);
}
4、sql注入 预编译
预编译吧 单引号 '
String sql = "select * from emp where empno = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//预编译对象 设置参数
preparedStatement.setInt(1,73691);
//运行
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
System.out.println(resultSet.getInt(1));
5、批量处理
for(i=0;i<1000; i++){
preparedStatement.setInt(1,73691);
if(i%1000 == 0){
//满一千条直接执行 防止内存存入太多数据
preparedStatement.executeBathc();
//清除上面1000条数据
preparedStatement.ClearBatch();
}
}
6、事务
//设置事务手动提交
connect.setAutoCommit(false);
//异常了可以使用回滚 在catch中
connect.rollback()
//无论是否回滚事务都要提交 建议在finally 在关闭资源之前提交
connect.commit();
###高级操作 回滚点
数据在100插入异常 我们在99以上的提交。