JDBC : Java Database Connectivity,Java数据库连接。SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。
JDBC就像一座桥,连接Java程序与数据库 。
JDBC的简介:
驱动实际上就是现在的程序能够跟目标程序进行通信的一个接口规范,驱动中包含接口实现。
进行JDBC开发
1、学习JDBC接口规范 java.sql javax.sql 接口如何使用
2、在工程中导入 相应数据库驱动(JDBC实现)
核心JDBC接口规范
DriverManager 驱动管理器
Connection 连接
Statement 操作状态 (子接口 PreparedStatement、CallableStatement)
ResultSet 结果集
第一个JDBC程序
1、搭建数据库环境
在运行中通过services.msc启动MySQL
再通过cmd连接mysql
创建数据库 create database megustas;
切换数据库use megustas;
创建数据表:
create table users(
id int primary key not null,
name varchar(40),
pwd varchar(40),
email varchar(100)
);
向数据表插入数据
insert into users values(1,'aaa','111','aaa@megustas.cn');
insert into users values(2,'bbb','111','bbb@megustas.cn');
insert into users values(3,'ccc','111','ccc@megustas.cn');
insert into users values(4,'ddd','111','ddd@megustas.cn');
通过查询语句进行查询:
2、创建web工程 megustas,导入数据库驱动(去各个数据库的官网下载),将对应的jar包复制到WebContent\WEB-INF\lib目录下:
3、新建Java程序,使用JDBC接口规范连接数据库
public class JDBCTest{
@Test
public void demo1() throws SQLException, ClassNotFoundException{
// 第一个JDBC程序,连接MySQL数据库
// 步骤一:加载数据库JDBC实现 ---- 加载驱动Driver类,并在DriverManager类中注册
DriverManager.registerDriver(new Driver());
// 步骤二:建立数据库连接
//DriverManager.getConnection(url, "userID", "passwd");
//注意这里的url不是http协议,而是jdbc协议
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/megustas", "root", "xxxx");
// 步骤三:将SQL发送给数据库
Statement statement = conn.createStatement();
//得到结果集
ResultSet rs = statement.executeQuery("select * from users");
// 遍历结果集 -----迭代器
while(rs.next()){
System.out.println(rs.getString("name"));//打印name列
}
// 步骤四:断开连接,释放资源
rs.close();
statement.close();
conn.close();
}
}
注意:在实际开发中并不推荐采用registerDriver方法注册驱动,一般使用Class.forName("com.mysql.jdbc.Driver");
具体原因会在后续JDBC API中进行详细介绍。
结果集ResultSet可以通过下图进一步认识:
sql注入
可以使用PreparedStatement代替Statement,通过预编译来防止这种sql注入。
小结:
一、搭建实验环境 :
1、在mysql中创建一个库,并创建user表和插入表的数据。
2、新建一个Java工程,并导入数据驱动。
二、编写程序,在程序中加载数据库驱动
DriverManager. registerDriver(Driver driver)
三、建立连接(Connection)
Connection conn = DriverManager.getConnection(url,user,pass);
四、创建用于向数据库发送SQL的Statement对象,并发送sql(向数据库发送的是sql语句,得到的回复是ResultSet结果集)
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
五、从代表结果集的ResultSet中取出数据,打印到命令行窗口
六、断开与数据库的连接,并释放相关资源
- 通过DriverManager加载驱动程序driver;
- 通过DriverManager类获得表示数据库连接的Connection类对象;
- 通过Connection对象绑定要执行的语句,生成Statement类对象;
- 执行SQL语句,接收执行结果集ResultSet;
- 可选的对结果集ResultSet类对象的处理;
- 必要的关闭ResultSet、Statement和Connection
图解如下:
对于上图中的数据库URL需要注意:
连接任何数据库 编写JDBCURL
Mysql URL : jdbc:mysql://localhost:3306/day13 通过?传递参数
Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
常见API
1、Connection接口 —- JDBC连接表示接口
* Connection接口一个对象 代表 一个数据库 连接
作用两点:
1) 获得操作数据库Statement对象
createStatement()
—– Statement 获得普通操作状态对象
prepareStatement(String sql)
—– PreparedStatement(是Statement子接口) 预编译状态对象
prepareCall(String sql)
—— CallableStatement(是PreparedStatement子接口) 操作数据库内部存储过程的
* Statement对象可以向数据库发送sql语句,获得ResultSet结果集
2) 进行事务控制
setAutoCommit(boolean) ;
开启一个事务
commit();
提交一个事务
rollback();
回滚一个事务
2、Statement接口 —- 代表一个操作状态
作用:操作数据库SQL语句、调用存储过程
executeQuery(String sql)
:用于向数据发送查询语句。select语句,返回值ResultSet 结果集
executeUpdate(String sql)
:用于向数据库发送insert、update或delete语句 返回值int 受影响行数
execute(String sql)
:用于向数据库发送任意sql语句 — 建立数据库 建立数据表,增删改查 — 返回值boolean
* sql结果是ResultSet 返回true — 否则false
批处理 —- 一次执行多条sql
addBatch(String sql)
:把多条sql语句放到一个批处理中。
executeBatch()
:向数据库发送一批sql语句执行。
3、ResultSet
while(rs.next()){
// 根据数据表列类型 --- 转换表规则,调用java中相应getXXX方法
}