什么是批处理
批处理操作数据库
批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
当想数据库中添加大量数据时,需要用到批处理。
实现批处理
Statement和preparedStatement都支持批处理操作,这里我们介绍一下PreparedStatement的批处理方式:
1)要用到的方法
方法
说明
void addBatch()
将给定的SQL命令添加到此Statement对象的当前命令列表中。
通过调用方法executeBatch 可以批量执行此列表中的命令。
int[] executeBatch
每次提交一批命令到数据库中执行,如果所有的命令都成功执行了,那么返回一个数组,这个数组是说明每条命令所影响的行数
2)mysql批处理是默认关闭的,所以需要加一个参数才打开mysql数据库批处理,在url中添加
rewriteBatchedBatchedStatements = true例如:url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8&rewriteBatchedStatements=true
3)创建一张表
create table testBatch(id int primary key auto_Increment,uname varchar(50))
4)测试向表中插入1万条数据
核心代码Connection con = DruidUtils.getConnection();String sql = "insert into testBatch(uname)values(?)";PreparedStatement ps = con.preparedStatement(sql);for(int i = 0; i < 10000; i++){ps.setString(1,"小强"+i);ps.addBatch();}ps.executeBatch();
MySql元数据
什么是元数据
除了表之外的数据都是元数据,可以分为三类
查询结果信息:update或delete语句 受影响的记录数。
数据库和数据表的信息:包含了数据及数据表的结构信息。
MySql服务器信息:包含了数据库的当前状态,版本号等。
常用命令
select version();获取mysql服务器的版本信息
show status 查询服务器的状态信息
show columns from table_name; 显示表的字段信息等;和desc table_name 一样
show index from table_name; 显示数据表的详细索引信息,包括primary key(主键)
show databases; 列出所有的数据库
show tables; 显示当前数据库的所有表
select database();获取当前的数据库名
使用JDBC获取元数据
通过JDBC也可以获取到元数据,比如数据库的相关信息,或者我们使用程序查询一个不熟悉对的表时,我们可以通过获取元素信息,了解表中有多少个字段 字段的名称和字段的类型
常见类介绍
JDBC中描述元数据的类
元数据类
作用
DatabaseMetaData
描述数据库的元数据对象
ResultSetData
描述结果集的元数据对象
获取元数据对象的方法:getMetaData()
connection连接对象,调用getMetaData()方法,获取的是DatabaseMetaData数据库元数据对象
PreparedStatement预处理对象调用getMetaData(),获取的是ResultMetaData,结果集元数据对象
DatabaseData的常见方法
方法说明
getURL();获取数据库的URL
getUserName();获取当前数据库的用户名
getDatabaseProductName();获取数据库的产品名称
getDatabaseProductVersion(); 获取数据的版本号
getDriverName();返回驱动程序的名称
isReadOnly(); 判断数据库是否值允许只读true代表只读
ResultSetMetaData的常见方法
方法说明
getColumnCount(); 当前结果集共有多少列
getColumnName(int i);当前指定列号的列名,参数是整数 从1开始
getColumnTypeName(int i);获取指定列名的类型,参数是整数 从1开始
代码实例
package jdbc_task02.testmetadata;import jdbc_task02.com.wwjie.Utils.DruidUtils;import org.junit.Test;import java.sql.*;public class TestMetaData{//1.get sql mataData use DatabaseMetaData@Testpublic void testDataMetaData()throws SQLException {Connection connection = DruidUtils.getConnection();DatabaseMetaData databaseMetaData = connection.getMetaData();String url = databaseMetaData.getURL();System.out.println(url);String userName = databaseMetaData.getUserName();System.out.println(userName);String productName = databaseMetaData.getDatabaseProductName();System.out.println(productName);System.out.println(databaseMetaData.getDatabaseMinorVersion());//read only?boolean b = databaseMetaData.isReadOnly();if (b){System.out.println("only read");}else{System.out.println(" not only read");}connection.close();}//get result data@Testpublic void testResultSetMetaData()throws SQLException{Connection connection = DruidUtils.getConnection();PreparedStatement ps = connection.prepareStatement("select * from employee");ResultSet resultSet = ps.executeQuery();ResultSetMetaData resultSetMetaData = ps.getMetaData();//获取当前结果集中 共有多少列int count = resultSetMetaData.getColumnCount();System.out.println(count);for (int i = 1;i<=count;i++){//获取当前结果集中 列的名称和类型String columnName = resultSetMetaData.getColumnName(i);System.out.println(columnName);String columnTypeName= resultSetMetaData.getColumnTypeName(i);System.out.println(columnName);}DruidUtils.close(connection,ps,resultSet);}}
篇末:
立个flag: 最近要把上学期没学好的的东西都给肝出来。。。