jdbc

全称:Java DataBase Connectivity, 意思就是 java连接数据库用到的,用来操作不同数据库的。

jdbc 出现原因: 数据库可能有好多种,比如mysql,oracl,db2等数据库,java 需要操作不同数据库,需要不同的实现,就很乱,特别麻烦,不是很规范,为了解决这个问题,Java就开发了一种接口规范,让不同的数据库去实现,通过不同厂商的是实现产生很多实现类,java将这些类(jar包)导入就可以操作不同数据库。

jdbc编写入门:1.加载Driver 驱动 个人理解 (就是创建驱动实现类对象,调不同方法实现)

  1. 2.获取连接得到Connection
  2. 3.执行增删改查 -发送sqlmysql 执行sql语句返回结果 Statement
  3. 4.释放资源-关闭连接 (求解答 Java中什么样就算是一种资源链接,需要关闭,就是java去操作别的程序吗)
  1. ResultSet(结果集) sql查询语句返回结果 一行一行的形式返回
  1. PreparedStatement sql语句预处理 ,防止sql注入(特殊手段(字符组合)破环数据库资源),是Statement子类,也是执行静态sql语句,
  2. 减少编译次数,效率高 (这里不懂)

jdbc 事务(不懂先看 mysql 事务,资源)

mysql事务默认是自动提交的 ,需要开启事务方法使用:

1.connect.setAutoCommit(false); 开启事务

2.connect.rollback(); 回滚

3.connect.commit(); 提交事务

批处理(将很多sql语句打包,一起发送到mysql 执行)

需求,我们向数据库添加数据inster 3000条数据,我们一条一条执行特别浪费网络资源,执行时间也长,这时候就需要批处理

使用方法:

  1. @Test
  2. public void noBath() throws Exception {
  3. //JdbcUtils 这个是我自己封装的 ,无法导入其他资源包
  4. Connection connection = JdbcUtils.getConnection();
  5. PreparedStatement preparedStatement = connection.prepareStatement("insert into t_user (name) values (?)");
  6. for (int i = 0; i < 5900; i++) {
  7. preparedStatement.setString(1,"java"+i);
  8. //将很多sql语句存储起来
  9. preparedStatement.addBatch();
  10. if ((i+1)%500 == 0) {
  11. //执行SQL语句
  12. preparedStatement.executeBatch();
  13. //清空batch
  14. preparedStatement.clearBatch();
  15. }
  16. }
  17. JdbcUtils.close(null,preparedStatement,connection);
  18. }

数据连接池:

出现原因:每次去连接connect 数据库时,直接去获取连接资源,比较慢,同时一个数据库同时支持1000个连接,Java同时2000个连接过去直接导致mysql数据库瘫痪,无法控制最大连接数,这时 连接池就出现了 比如c3p0 阿里 Druid连接池

连接池原例图:

原理解释:就是连接池帮助我们创建好一定连接资源,我们直接从连接池拿取连接,用完再放回连接池,帮助我们管理数据库连接。

  1. 使用实现:
  2. @Test
  3. public void Druid() throws Exception {
  4. //创建properties对象,读取配置文件
  5. Properties properties = new Properties();
  6. //这里加载的资源时druid配置好的连接规范
  7. properties.load(new FileInputStream("src\\druid.properties"));
  8. //创建一个指定数据源的连接池
  9. DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
  10. //从连接池拿取资源
  11. Connection connection = dataSource.getConnection();
  12. System.out.println("连接成功");
  13. //不是真正意义上关闭,而是放回连接池资源啊
  14. connection.close();
  15. }