1、批处理(batch) 操作数据库:批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。当向数据库中添加大量的数据时,需要用到批处理。
2、Statement和PreparedStatement都支持批处理操作,这里我们介绍一下PreparedStatement的批处理方式:
3、mysql 批处理是默认关闭的,所以需要加一个参数才打开mysql 数据库批处理,在url中添加:rewriteBatchedStatements=true
例如: url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8&rewriteBatchedStatements=true
4、示例代码:
package com.lagou.testbatch;import com.lagou.utils.DruidUtils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;/** * @author angang @create 2020-12-23 10:51 */public class BatchInsert {//使用批处理 向表中添加 10000条数据 public static void main(String[] args) throws SQLException {//1.获取连接 Connection connection = DruidUtils.getConnection(); //2.获取预处理对象 PreparedStatement ps = connection.prepareStatement("insert into testBatch(uname) values(?)"); //3.执行批量插入操作 for (int i = 0; i < 10000 ; i++){ps.setString(1,"小强" + i); //将SQL添加到批处理列表 ps.addBatch(); }//添加时间戳 测试执行效率 long start = System.currentTimeMillis(); //4.统一执行 批量插入操作 ps.executeBatch(); long end = System.currentTimeMillis(); System.out.println("插入10000条数据需要使用: " + (end - start) + " 毫秒!"); //5.关闭连接 DruidUtils.close(connection,ps); } }
4、使用JDBC 获取元数据:通过JDBC 也可以获取到元数据,比如数据库的相关信息,或者当我们使用程序查询一个不熟悉的表时, 我们可以通过
获取元素据信息,了解表中有多少个字段,字段的名称 和 字段的类型.
5、示例代码:
package com.lagou.testmetadata;import com.lagou.utils.DruidUtils;import org.junit.Test;import java.sql.*;/** * @author angang @create 2020-12-23 10:58 */public class TestMetaData {//1.获取数据库相关的元数据信息 使用DatabaseMetaData @Test public void testDataBaseMetaData() throws SQLException {//1.获取数据库连接对象 connection Connection connection = DruidUtils.getConnection(); //2.获取代表数据库的 元数据对象 DatabaseMetaData DatabaseMetaData metaData = connection.getMetaData(); //3.获取数据库相关的元数据信息 String url = metaData.getURL(); System.out.println("数据库URL: " + url); String userName = metaData.getUserName(); System.out.println("当前用户: " + userName ); String productName = metaData.getDatabaseProductName(); System.out.println("数据库产品名: " + productName); String version = metaData.getDatabaseProductVersion(); System.out.println("数据库版本: " + version); String driverName = metaData.getDriverName(); System.out.println("驱动名称: " + driverName); //判断当前数据库是否只允许只读 boolean b = metaData.isReadOnly(); //如果是 true 就表示 只读 if(b){System.out.println("当前数据库只允许读操作!"); }else{System.out.println("不是只读数据库"); }connection.close(); }//获取结果集中的元数据信息 @Test public void testResultSetMetaData() throws SQLException {//1.获取连接 Connection con = DruidUtils.getConnection(); //2.获取预处理对象 PreparedStatement ps = con.prepareStatement("select * from employee"); ResultSet resultSet = ps.executeQuery(); //3.获取结果集元素据对象 ResultSetMetaData metaData = ps.getMetaData(); //1.获取当前结果集 共有多少列 int count = metaData.getColumnCount(); System.out.println("当前结果集中共有: " + count + " 列"); //2.获结果集中 列的名称 和 类型 for (int i = 1; i <= count; i++) {String columnName = metaData.getColumnName(i); System.out.println("列名: "+ columnName); String columnTypeName = metaData.getColumnTypeName(i); System.out.println("类型: " +columnTypeName); }//释放资源 DruidUtils.close(con,ps,resultSet); } }