JDBC
来源:互联网 发布:ubuntu安装飞秋 编辑:程序博客网 时间:2024/06/14 21:03
JDBC 总结
JDBC 简介
JDBC 全称为: Java Data Base Connectivity ( java 数据库连接),它主要由接口组成。
组成 JDBC 的2个包:
java.sql
javax.sql
开发 JDBC 应用需要以上 2 个包的支持外,还需要导入相应 JDBC 的数据库实现 ( 即数据库驱动 ) 。
第一个 JDBC 程序
编写一个程序,这个程序从 user 表中读取数据,并打印在命令行窗口中。
一、搭建实验环境 :
1 、在 mysql 中创建一个库,并创建 user 表和插入表的数据。
2 、新建一个 Java 工程,并导入数据驱动。
二、编写程序,在程序中加载数据库驱动
Class.forName( “ com.mysql.jdbc.Driver ” );
DriverManager. registerDriver(Driver?driver)
三、建立连接 (Connection)
Connection conn = DriverManager.getConnection(url,user,pass);
四、创建用于向数据库发送 SQL 的 Statement 对象,并发送 sql
Statement st = conn.createStatement();
ResultSet rs = st.excuteQuery(sql);
五、从代表结果集的 ResultSet 中取出数据,打印到命令行窗口
六、断开与数据库的连接,并释放相关资源 Jdbc 程序中的 Connection ,它用于代表数据库的链接, Collection 是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过 connection 对象完成的,这个对象的常用方法:
createStatement() :创建向数据库发送 sql 的 statement 对象。
prepareStatement(sql) :创建向数据库发送预编译 sql 的 PrepareSatement 对象。
prepareCall(sql) :创建执行存储过程的 callableStatement 对象。
setAutoCommit(boolean?autoCommit) :设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。 Jdbc 程序中的 Statement 对象用于向数据库发送 SQL 语句, Statement 对象常用方法:
execute(String sql) :用于向数据库发送任意 sql 语句
executeQuery(String?sql) :只能向数据发送查询语句。
executeUpdate(String?sql) :只能向数据库发送 insert 、 update 或 delete 语句
addBatch(String?sql) :把多条 sql 语句放到一个批处理中。
executeBatch() :向数据库发送一批 sql 语句执行。 CRUD 操作 -create
Statement st = conn.createStatement();
String sql = "insert into user( … .) values( … ..) ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(" 插入成功!!! ");
}
PreperedStatement 是 Statement 的孩子,它的实例对象可以通过调用 Connection.preparedStatement() 方法获得,相对于 Statement 对象而言:
PreperedStatement 可以避免 SQL 注入的问题。
Statement 会使数据库频繁编译 SQL ,可能造成数据库缓冲区溢出。 PreparedStatement 可对 SQL 进行预编译,从而提高数据库的执行效率。
并且 PreperedStatement 对于 sql 中的参数,允许使用占位符的形式进行替换,简化 sql 语句的编写。
练习:使用 PreparedStatement 改写 UserDao
select * from (
select rownum r_, row_.* from (
select * from student order by id
) row_ where rownum <=5
) where r_>=1
1 位置:起始索引位置。
5 位置:结束索引位置。
使用 JDBC 处理大数据
基本概念:大数据也称之为 LOB(Large Objects) , LOB 又分为: clob 和 blob
clob 用于存储大文本。 Text
blob 用于存储二进制数据,例如图像、声音、二进制文等。
对于 MySQL 中的 Text 类型,可调用如下方法设置: PreparedStatement.setCharacterStream(index, reader, length);
// 注意 length 长度须设置,并且设置为 int 型
对 MySQL 中的 Text 类型,可调用如下方法获取: reader = resultSet. getCharacterStream(i);
reader = resultSet.getClob(i).getCharacterStream();
string s = resultSet.getString(i);
对于 MySQL 中的 BLOB 类型,可调用如下方法设置:
PreparedStatement. setBinaryStream(i, inputStream, length);
对 MySQL 中的 BLOB 类型,可调用如下方法获取:
InputStream in = resultSet.getBinaryStream(i);
InputStream in = resultSet.getBlob(i).getBinaryStream();
实现批处理有两种方式,第一种方式:
Statement.addBatch(sql) list
执行批处理 SQL 语句
executeBatch() 方法:执行批处理命令
clearBatch() 方法:清除批处理命令
采用 Statement.addBatch(sql) 方式实现批处理:
优点:可以向数据库发送多条不同的SQL语句。
缺点:
SQL 语句没有预编译。
当向数据库发送多条语句相同,但仅参数不同的 SQL 语句时,需重复写上很多条 SQL 语句。
实现批处理的第二种方式:
PreparedStatement.addBatch()
JDBC 调用存储过程
编写存储过程(参看 mysql 文档)
得到 CallableStatement ,并调用存储过程:
CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");
设置参数,注册返回值,得到输出 cStmt.setString(1, "abcdefg");
cStmt.registerOutParameter(2, Types.VARCHAR);
cStmt.execute();
System.out.println(cStmt.getString(2));
事务的概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
例如: A —— B 转帐,对应于如下两条 sql 语句
update from account set money=money+100 where name= ‘ b ’ ;
update from account set money=money-100 where name= ‘ a ’ ;
数据库开启事务命令
start transaction 开启事务
Rollback 回滚事务
Commit 提交事务
设置事务回滚点
Savepoint sp = conn.setSavepoint();
Conn.rollback(sp);
Conn.commit(); // 回滚后必须要提交
创建 JDBC 的事务主要分以下步骤
1. 设置事务的提交方式为非自动提交:
conn.setAutoCommit(false);
2. 将需要添加事务的代码放入 try , catch 块中。
3. 在 try 块内添加事务的提交操作,表示操作无异常,提交事务。
conn.commit();
4. 在 catch 块内添加回滚事务,表示操作出现异常,撤销事务:
conn.rollback();
5. 设置事务提交方式为自动提交:
conn.setAutoCommit(true);
原子性( Atomicity )
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 ?
一致性( Consistency )
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性( Isolation )
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性( Durability )
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
数据库共定义了四种隔离级别:
Serializable :可避免脏读、不可重复读、虚读情况的发生。(串行化) ( 序列化 )
Repeatable read :可避免脏读、不可重复读情况的发生。(可重复读)
Read committed :可避免脏读情况发生(读已提交)。
Read uncommitted :最低级别,以上情况均无法保证。 ( 读未提交 )
set transaction isolation level 设置事务隔离级别
select @@tx_isolation 查询当前事务隔离级别
- jdbc
- JDBC
- jdbc
- JDBC
- jdbc
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- jdbc
- JDBC
- JDBC
- jdbc
- servlet
- 软件开发过程及其组织
- Linux操作系统环境下jdk的配置和tomcat中web项目部署(从U盘中)
- 会话管理 Cookie
- ServletContext
- JDBC
- objective-c Unicode转中文
- 网络编程
- access registry
- apache环境下 禁止显示 index of/ 目录下
- 用Google Analytics「網頁活動分析」看部落格/網站配置效率
- IIS是如何处理ASP.NET请求的
- .sql数据备份大文件分割与合并
- Session