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);    }

}