JDBC
JDBC(Java Databases Connectity)数据库连接。通俗点讲是Java语言中用于连接数据库的标准API。
只要和数据库打交道的地方都有JDBC的影子。
JDBC有什么特点:
优势:
1.简单易学,安全。
2.可移植性强。
劣势:
需要手动管理JDBC的连接以连接资源的释放。
需要编写大量的SQL代码量大。
JDBC结构
JDBC仅是一套标注接口,不同的厂商有不同的实现。
JDBC主要接口
JDBC开发步骤
JDBC开发详解
- 注册驱动
有两种注册驱动的方式:
使用:DriverManager.registerDriver(new Driver())
该注册数据库有两个缺点:通过观察mysql的中Driver接口的实现类发现在静态代码块中注册驱动的逻辑,所以这种方式会造成驱动被注册两次。另外,这种方式导致了程序和具体的数据库驱动绑死在了一起,程序的灵活性比较低。
使用:Class.forName(“com.mysql.jdbc.Driver”);
利用反射的方式注册数据库驱动。
- 获取数据连接
/**
*URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数 据库,我们通常是在一个属性文件内配置数据库的相关信息;
常用数据库URL地址的写法:
Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid
MySql:jdbc:mysql://localhost:3306/sid
Mysql的url地址的简写形式: jdbc:mysql:///sid
Connection :代表数据库的链接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql):创建向数据库发送预编译sql的PreparedSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit():在链接上提交事务。
rollback():在此链接上回滚事务。
*/
Connection conn = DriverManager.getConnection(url,name,psw)
- 创建SQL语句
/**
Statement对象用于向数据库发送SQL语句,Statement对象常用方法:
executeQuery(String sql) :用于向数据库发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
addBatch(String sql):把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。
*/
Statement stm = conn.createStattement();
- 执行SQL语句
stm.executeUpdate("insert into person(id,name,age) values(520,'X-MAN',18)")
- 处理结果
/**
利用ResultSet:处理数据结果
ResultSet用于代表Sql语句的执行结果。
Resultset封装执行结果时,采用的类似于表格的方式。
ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
相关方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
getInt(columnIndex)
getInt(columnLabel)
getDouble(columnIndex)
getDouble(columnLabel)
操作游标的方法
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
*/
- 与数据库建断开连接,释放资源
JDBC中的事物
-
事物是具有ACID的特性的工作单元。
A:原子性–保证对数据库的操作要么全部成功,要么全部失败。
C:一致性–指事物执行之前、之后,数据库的状态都必须处于一致的状态。
I:隔离性–即一个事物对数据的操作,不能被其他事物看到。
D:持久性–即事物一旦提交,它对数据库中数据的改变是永久的。 -
JDBC事物处理三部曲
-
事务的隔离级别
Statement 和 PreparedStatement
两者都可以用来操作数据库,与Statement 相比,PreparedStatement有以下优点:
1.可以防止sql注入攻击
通过PreparedStatement对象发送sql, 是先把sql语句的骨架发送给数据库编译并确定下来, 后面发送的只能是参数的值, 不能影响sql语句的骨架, 即使参数中包含sql关键字或特殊符号, 也只会当成普通的文本来处理!
2.通过方法来设置参数, 省去了拼接SQL语句的麻烦!
3.可以提高程序的效率:
PreparedStatement对象发送的sql语句(骨架)到数据库编译后会被数据缓存下来, 如果下次执行的sql与缓存中的相匹配, 就不再编译而是直接使用缓存中的语句, 可以减少sql语句编译的次数, 提高程序执行的效率!
Statement对象发送的sql语句到数据库之后也会编译, 但是Statement对象是先拼接好再发送sql到数据库, 如果每次参数不同, 整条sql也就不同. 所以每次都需要编译!
下一篇:【基础系列二十】–事务