JDBC技术
简介
使用java程序访问(操作)数据库(发送sql语句),这叫用到了jdbc技术.jdbc就是Sun公司设计的一套java程序连接(操作)具体的数据库产品的接口
jdbc的API
Driver接口:驱动程序接口
Connection connect() 用于连接数据库的方法
Connection接口:代表和数据库的连接
Statement createStatement() 创建Statement接口的对象
PreparedStatement prepareStatement(String sql) 创建PrepareStatement接口的对象
CallableStatement prepareCall(String sql)创建CallableStatement接口的对象
Statement接口:用于执行静态的sql语句
Int executeUpdate(String sql) 执行DDL和DML语句(更新sql语句)
ResultSet executeQuery(String sql) 执行DQL语句
PreparedStatement接口:用于执行预编译的sql语句
CallableStatement接口:用于执行存储过程的sql,存储过程只能执行查询sql
ResultSet接口:表示数据库结果集
boolean next() 将光标移至下一行
getxxx(): 获取结果集中的每列的值
Demo1:
jdbc操作步骤
1.注册驱动程序
2.获取连接对象
3.准备sql语句(DDL+DML)
4.创建Statement对象
5.执行sql语句
6.返回结果,处理结果
7.关闭资源
Statement和PreparedStatement
语法不同:
1.Statement只能执行静态sql
2.PreparedStatement即可以执行静态sql,也可以执行预编译sql语句
安全性不同:
1.Statement可以被用户进行sql注入
2.PreparedStatement不能被用户注入sql,比Statement更安全
执行效率问题:
1.Statement不能利用数据库sql缓存功能
2.PreparedStatement可以利用数据库sql缓存功能,比Statement效率更高
结论:建议尽量使用PreparedStatement
JDBC批处理
Statement的批处理:
void addBatch(String sql) 把sql添加到缓存区中(没有发送的)
int[] executeBatch() 执行批处理缓存中sql语句(发送到数据库执行)
void clearBatch() 清空缓存区sql语句
PreparedStatement的批处理:
void addBatch() 把参数添加到缓存区中
int[] executeBatch() 执行批处理缓存中所有参数(发送到数据库执行)
void clearBatch() 清空缓存区参数列表
JDBC处理大容量数据
什么是大容量
字符::
text,longtext(4G字符串内容)
字节:
blob(65kb),mediumblob(16MB),longblog(4GB)
JDBC如何获取自增长的值
JDBC的事务
innoDB数据库类型: 支持事务。
MyISAM: 不支持事务,但执行效率高。
事务的特性:ACID
原子性(Atomidity):事务是一个不可分割的工作单位.事务中的操作要么都发生,要么都不发生
一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态
隔离性(Isolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事物的操作数据所干扰,多个并发事务之间要相互隔离
持久性(Durability):一个事务一旦被提交,它对数据库的影响是永久性的
事务并发问题:
脏读:一个事务读到了另一个事务没有提交的数据
不可重复读:一个事务读到了另一个事务已提交(update)数据
幻读:一个事务读到了另一个事务已经提交的新插入(insert)的数据