java基础-jdbc

106 阅读1分钟

1、JDBC 加载流程

  1. 加载驱动 Driver

  2. 注册驱动 DriverManager

  3. 获取链接 Connection

  4. 获取语句对象statment

  5. 执行sql语句

  6. 关闭对象 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以上的提交。