使用 JDBC 驱动程序处理元数据
Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的。
DatabaseMetaData类
DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:
getURL():返回一个String类对象,代表数据库的URL。
getUserName():返回连接当前数据库管理系统的用户名。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
getDatabaseProductName():返回数据库的产品名称。
getDatabaseProductVersion():返回数据库的版本号。
getDriverName():返回驱动驱动程序的名称。
getDriverVersion():返回驱动程序的版本号。
ResultSetMetaData 类
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:
getColumnName(int column):获取指定列的名称
getColumnCount():返回当前 ResultSet 对象中的列数。
getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
isNullable(int column):指示指定列中的值是否可以为 null。
isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。
取得数据库自动生成的主键
aaarticlea/png;base64,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" alt="" width="660" height="249" />
在 ResultSet 中,只有一列 Generated_Key, 用于存放新生成的主键值。
利用反射及JDBC元数据编写通用的查询方法
/**
* 通用的查询方法:可以根据传入的 SQL、Class 对象返回 SQL 对应的记录的对象
* @param clazz: 描述对象的类型
* @param sql: SQL 语句。可能带占位符
* @param args: 填充占位符的可变参数。
* @return
*/
public <T> T get(Class<T> clazz, String sql, Object... args) {
T entity = null; Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null; try {
//1. 得到 ResultSet 对象
connection = JDBCTools.getConnection();
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery(); //2. 得到 ResultSetMetaData 对象
ResultSetMetaData rsmd = resultSet.getMetaData(); //3. 创建一个 Map<String, Object> 对象, 键: SQL 查询的列的别名,
//值: 列的值
Map<String, Object> values = new HashMap<>(); //4. 处理结果集. 利用 ResultSetMetaData 填充 3 对应的 Map 对象
if(resultSet.next()){
for(int i = 0; i < rsmd.getColumnCount(); i++){
String columnLabel = rsmd.getColumnLabel(i + 1);
Object columnValue = resultSet.getObject(i + 1); values.put(columnLabel, columnValue);
}
} //5. 若 Map 不为空集, 利用反射创建 clazz 对应的对象
if(values.size() > 0){
entity = clazz.newInstance(); //5. 遍历 Map 对象, 利用反射为 Class 对象的对应的属性赋值.
for(Map.Entry<String, Object> entry: values.entrySet()){
String fieldName = entry.getKey();
Object value = entry.getValue();
BeanUtils.setProperty(entity, fieldName, value);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.releaseDB(resultSet, preparedStatement, connection);
}
return entity;
}
Oracle LOB
LOB,即Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据)。
LOB 分为两种类型:内部LOB和外部LOB。
内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。
BLOB(二进制数据)
CLOB(单字节字符数据)
NCLOB(多字节字符数据)。
CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、音频,文件等。
MySQL BLOB 类型介绍
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)
aaarticlea/png;base64,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" alt="" width="346" height="141" />
插入 BLOB 类型的数据必须使用 PreparedStatement:因为 BLOB 类型的数据时无法使用字符串拼写的。 调用 setBlob(int index, InputStream inputStream)
读取 blob 数据: 1. 使用 getBlob 方法读取到 Blob 对象 2. 调用 Blob 的 getBinaryStream() 方法得到输入流。再使用 IO 操作即可.
JDBC 事务处理
保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),要么整个事务回滚(rollback)到最初状态
为了让多个 SQL 语句作为一个事务执行:
调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务
在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
在出现异常时,调用 rollback(); 方法回滚事务
若此时 Connection 没有被关闭, 则需要恢复其自动提交状态
try {
// 开始事务: 取消默认提交. connection.setAutoCommit(false);
// ...
// 提交事务 connection.commit();
} catch (Exception e) {
// ...
// 回滚事务
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
JDBCTools.releaseDB(null, null, connection);
}
数据库的隔离级别
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:
脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.
数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱
数据库提供的 4 种事务隔离级别:
aaarticlea/png;base64,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" alt="" width="723" height="206" />
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ
在 MySql 中设置隔离级别
每启动一个 mysql 程序, 就会获得一个单独的数据库连接. 每个数据库连接都有一个全局变量 @@tx_isolation, 表示当前的事务隔离级别.
查看当前的隔离级别: SELECT @@tx_isolation;
设置当前 mySQL 连接的隔离级别: set transaction isolation level read committed;
设置数据库系统的全局的隔离级别: set global transaction isolation level read committed;
批量处理JDBC语句提高处理速度
当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。
JDBC的批量处理语句包括下面两个方法:
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;
for(int i = 0; i < 100000; i++){
preparedStatement.setInt(1, i + 1);
preparedStatement.setString(2, "name_" + i); //"积攒" SQL
preparedStatement.addBatch(); //当 "积攒" 到一定程度, 就统一的执行一次. 并且清空先前 "积攒" 的 SQL
if((i + 1) % 300 == 0){
preparedStatement.executeBatch();
preparedStatement.clearBatch();
}
}
//若总条数不是批量数值的整数倍, 则还需要再额外的执行一次.
if(100000 % 300 != 0){
preparedStatement.executeBatch();
preparedStatement.clearBatch();
}
DAO 设计模式
what: DAO: data Access Object 。 访问信息数据的类。包含了对数据的增删改查,而不包含任何业务相关信息。
why: 能实现功能的模块化,更有利于代码的维护和升级。
Java 类的属性
1). 在JavaEE 中,Java类的属性通过getter,setter来定义,除去get 或set 后,第一个字母小写即为Java类的属性。
2). 以前叫的属性为 成员变量,称之为字段。 一般情况下,字段名和属性名都一致。
3). 操作Java属性有一个工具包:beanutils
<1>. 搭建环境:需要同时加入 commons-logging-1.1.1.jar 和 commons-beanutils-1.8.0.jar。
<2>. setProperty() 和 getProperty() 方法。
BeanUtils.setProperty(object, "type", 4);
Object type = BeanUtils.getProperty(object, "type");