JDBC的概念和由来
操作数据库的方式:
A:直接使用sql命令
B:使用工具
C:通过Java原来操作数据库!!!! =====>>> JDBC!!!!(使用Java语言来操作数据库,借助了JDBC!!!)
JDBC一般指的是规范!!!(接口或者抽象类!!!)
由来(为什么要使用JDBC):直接写代码存在的问题(图解)
1. 不知道MySQL数据库的操作方式,解析方式
2. 代码繁琐,写起来麻烦
3. MySQL和Oracle等其他数据库的操作方式和解析方式不同,每个数据库都要写一套代码
4. MySQL和Oracle等其他数据库相互切换麻烦
JDBC规范
JDBC是Java访问数据库的标准规范。真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。
每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可。数据库驱动由数据库厂商提供。(图解)
使用JDBC的好处
1. 我们只需要会调用JDBC接口中的方法即可,使用简单
2. 使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库(更改不同数据库对应的驱动包即可!)
使用JDBC涉及的包
1. java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection 【JavaSE】jdk中就有!!
2. javax.sql:JDBC访问数据库的扩展包 【JavaSE】jdk中就有!!
3. 数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver 【mysql-connector-java-5.1.39-bin.jar】
使用JDBC涉及到的核心对象
这几个对象都在java.sql包中!
1. DriverManager: 用于注册驱动以及获得连接对象 【类】
A:注册驱动(不依靠DriverManager)
注册驱动有两种方式:
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //基本不用!【代码写死!扩展性极低!!! 注册了2次!!!】
Class.forName("com.mysql.jdbc.Driver"); //开发常用! 【它可以将这个字符串(驱动全限定类名弄到配置文件中去!)】
B:获得连接
方法:static Connection getConnection(String url, String user, String password)
//连接到给定数据库URL ,并返回连接。
连接数据库的URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数名称=参数值
jdbc:mysql://localhost:3306/day18_db?characterEncoding=utf8
Connection: 表示与数据库创建的连接 【接口】
方法:Statement stmt = conn.createStatement() //获得一个执行SQL语句对象Statement
创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement: 执行SQL语句的对象 【接口】
boolean execute(String sql) 【几乎不用!!!】
//此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;
int executeUpdate(String sql)
//根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
ResultSet executeQuery(String sql) ====>>>>> 查询得到的N条记录封装到ResultSet对象中去!
//根据查询语句返回结果集,只能执行SELECT语句
ResultSet: 结果集或一张虚拟表 【接口】
原理:(图解)
A. ResultSet内部有一个指针,刚开始记录开始位置
B. 调用next方法, ResultSet内部指针会移动到下一行数据
C. 我们可以通过ResultSet得到一行数据 getXxx得到某列数据
API介绍:
看图解
三、JDBC的CRUD操作(C:create(插入) R:read(查询) U:update(修改) D:delete(删除))
1.JDBC操作步骤
第一步:导入驱动包 (mysql-connector-java-5.1.39-bin.jar)
第二步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
第三步:获得连接
Connection conn = DriverManager.getConnection(url,username,password);
第四步:编写SQL语句
String sql = "insert into category values(null,'手机数码')";
第五步:获得操作SQL语句对象
Statement stmt = conn.createStatement();
第六步:执行SQL语句
int rows = stmt.executeUpdate(sql);
第七步:释放资源
stmt.close();
conn.close();
JDBC入门案例(添加分类信息)
第一步:准备数据(有表!!!)
第二步:导入MySQL的驱动包!
第三步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
第四步:获得连接
Connection conn = DriverManager.getConnection(url,username,password);
第五步:编写SQL语句
String sql = "insert into category values(null,'手机数码')";
第六步:获得操作SQL语句对象
Statement stmt = conn.createStatement();
第七步:执行SQL语句
int rows = stmt.executeUpdate(sql);
第八步:释放资源
stmt.close();
conn.close();
JDBC事务操作
1.API介绍
JDBC操作事务借助的是Connection对象!
相关方法如下:
void setAutoCommit(boolean autoCommit) throws SQLException; //false:开启事务,ture:关闭事务
void commit() throws SQLException; //提交事务
void rollback() throws SQLException; //回滚事务
2.案例操作(转账功能)
try{
conn.setAutoCommit(false);
减钱
加钱
conn.commit();
}catch(Exception e){
conn.rollabck();
}