jdbc
全称:Java DataBase Connectivity, 意思就是 java连接数据库用到的,用来操作不同数据库的。
jdbc 出现原因: 数据库可能有好多种,比如mysql,oracl,db2等数据库,java 需要操作不同数据库,需要不同的实现,就很乱,特别麻烦,不是很规范,为了解决这个问题,Java就开发了一种接口规范,让不同的数据库去实现,通过不同厂商的是实现产生很多实现类,java将这些类(jar包)导入就可以操作不同数据库。
jdbc编写入门:1.加载Driver 驱动 个人理解 (就是创建驱动实现类对象,调不同方法实现)
2.获取连接得到Connection
3.执行增删改查 -发送sql给mysql 执行sql语句返回结果 Statement
4.释放资源-关闭连接 (求解答 Java中什么样就算是一种资源链接,需要关闭,就是java去操作别的程序吗)
ResultSet(结果集) sql查询语句返回结果 一行一行的形式返回
PreparedStatement 对sql语句预处理 ,防止sql注入(特殊手段(字符组合)破环数据库资源),是Statement子类,也是执行静态sql语句, 减少编译次数,效率高 (这里不懂)
jdbc 事务(不懂先看 mysql 事务,资源)
mysql事务默认是自动提交的 ,需要开启事务方法使用:
1.connect.setAutoCommit(false); 开启事务
2.connect.rollback(); 回滚
3.connect.commit(); 提交事务
批处理(将很多sql语句打包,一起发送到mysql 执行)
需求,我们向数据库添加数据inster 3000条数据,我们一条一条执行特别浪费网络资源,执行时间也长,这时候就需要批处理
使用方法:
@Test public void noBath() throws Exception { //JdbcUtils 这个是我自己封装的 ,无法导入其他资源包 Connection connection = JdbcUtils.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("insert into t_user (name) values (?)"); for (int i = 0; i < 5900; i++) { preparedStatement.setString(1,"java"+i); //将很多sql语句存储起来 preparedStatement.addBatch(); if ((i+1)%500 == 0) { //执行SQL语句 preparedStatement.executeBatch(); //清空batch preparedStatement.clearBatch(); } } JdbcUtils.close(null,preparedStatement,connection); }
数据连接池:
出现原因:每次去连接connect 数据库时,直接去获取连接资源,比较慢,同时一个数据库同时支持1000个连接,Java同时2000个连接过去直接导致mysql数据库瘫痪,无法控制最大连接数,这时 连接池就出现了 比如c3p0 阿里 Druid连接池
连接池原例图:
原理解释:就是连接池帮助我们创建好一定连接资源,我们直接从连接池拿取连接,用完再放回连接池,帮助我们管理数据库连接。
使用实现: @Test public void Druid() throws Exception { //创建properties对象,读取配置文件 Properties properties = new Properties(); //这里加载的资源时druid配置好的连接规范 properties.load(new FileInputStream("src\\druid.properties")); //创建一个指定数据源的连接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); //从连接池拿取资源 Connection connection = dataSource.getConnection(); System.out.println("连接成功"); //不是真正意义上关闭,而是放回连接池资源啊 connection.close(); }