JDBC 简单的使用API
对于jdbc的理解
- jdbc 全称是 Java DataBase Connection
- jdbc 是java提供的操作数据库的一种语言, 对于操纵关系型数据库的一种规范并没有实现
- 我们使用它 他只是一个接口,我们使用的是各个数据库公司对于这个接口的实现类对象 (多态的一种体现)
怎样使用jdbc 在idea中 连接数据库
- 下载驱动, 导入驱动 , 添加到 对应的library 库中并注册驱动
- 获取连接对象
- 获取执行sql语句的对象
- 书写对应的sql语句
- 处理结果
-
关闭资源
`ArrayList<Student> list = new ArrayList<>(); //注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + "liang?serverTimezone=UTC", "root", "root"); //获取sql语句执行对象 Statement stat = conn.createStatement(); String sql = "select * from student where id <7"; //int i = stat.executeUpdate("UPDATE student set NAME = liang where id = 5"); //执行sql语句 ResultSet resultSet = stat.executeQuery(sql); //结果处理 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); list.add(new Student(name, id)); } //关闭资源 stat.close(); conn.close(); //遍历结果集 list.stream().forEach(System.out::println);
对于jdbc中 各个对象的理解
DriverManager 驱动管理对象
-
注册驱动 static void registerDriver(Driver driver) 注册于给定的驱动程序 写代码使用:Class.forName("com.mysql.cj.jdbc.Driver")' 解释:我们使用 反射的机制将Driver这个类加载进内存 ,肯定是在创建对象之前执行了一部分代码。 有可能是静态代码块: static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } 果然我们找到这个静态代码块 里面调用了 静态的注册驱动的方法
-
获得连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + "liang?serverTimezone=UTC", "root", "root"); 如果说是:连接的是本地的数据库 并且端口号是3306 可以省略 IP和端口号
Connection 数据库连接对象
- 获取执行sql对的对象 Statement createStatement() create PrepraedStament()
- 管理事务
- 开启事务 void setAutoCommit(boolean);
- 提交事务 commit()
- 回滚事务 rollback()
Statement 执行sql对象
- 执行静态sql
- execute (String sql)
- int executeUpdate();执行的是dml语句(增删改表中数据的语句 insert update delete)和DDL语句 库和表的创建一般是不执行的》》》 返回值是一个 int 影响的行数 可以用来判断sql语句是否执行成功,
- ResultSet executeQuery() DQL语句 查询的语句 返回值是一个集合