一、jdbc基本概念
jdbc : Java Database Connectivity
sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc
这套api完全有接口组成,我们在编写程序的时候针对接口进行调用
这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动
步骤:
1. 实验环境
建 user 表 user.sql
2. 导入数据库的驱动
mysql-connector-java-5.0.8-bin.jar
3. 编程java程序
public class Demo01 { public static void main(String[] args) throws SQLException, ClassNotFoundException { //jdbc 四要素 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/jaky"; String user = "root"; String password = "123456"; //注册数据库驱动 //DriverManager.registerDriver(new com.mysql.jdbc.Driver());重复注册驱动
//查看com.mysql.jdbc.Driver源码发现,在静态代码块中完成了驱动注册所以只需加载类驱动就行 Class.forName(driver); //获得数据库连接 Connection conn = DriverManager.getConnection(url, user, password); String sql = "select * from users";
Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id= rs.getInt("id"); String name=rs.getString("name"); System.out.println(id+"===="+name); } rs.close(); stmt.close(); conn.close(); } }
三、jdbc程序详解
1. 注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
上面的语句会导致注册两次驱动
原因在于,查看Driver类的源码会发现在静态代码块中完成了注册驱动的工作,
也就是说注册驱动其实很简单,只需要加载驱动类即可
Class.forName(“com.mysql.jdbc.Driver”);
2. 创建数据库的连接
Connection conn = DriverManager.getConnection(url, user, password);
其中:
url, 相当于数据库的访问地址,程序员通过url指定需要访问的数据库
jdbc:mysql:[]//localhost:3306/jaky?参数名:参数值
其中jdbc为主协议,mysql为子协议,localhost为主机名,3306为端口号,jaky为数据库名
url的后面可以跟参数,常用的参数有:user=root&password=root&characterEncoding=UTF-8
如果url地址后面跟了user和password,创建Connection对象时将不必再次传入值
Connection conn = DriverManager.getConnection(url);
补充: 如果访问的localhost:3306,url 可省写为jdbc:mysql:///jaky
3. Connection 对象
Connection对象用于表示与某个数据库之间的连接,在程序中对数据库的所有操作都需要通过此对象来完成
常用方法有:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。
4. Statement 对象
用于向数据库发送sql语句
execute(String sql):用于向数据库发送任意sql语句,返回值是boolean类型
executeQuery(String sql) :只能向数据发送查询语句。返回值是结果集ResultSet
executeUpdate(String sql):只能向数据库发送insert、update或delete语句,返回值是int
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。
5. ResultSet 对象
对于查询操作,该对象特别重要,因为它专门用于封装结果集
存储的形式就是一种表格的形式,同样是列+行,说白了就和我们在 dos 命令行窗口查询的结果一样
遍历方式:
一开始游标指向结果集第一行, 也就是表头
通过 next 将游标移向下一行, 如果没有下一行,该方法会返回false
获得当前行的数据需要调用get方法:
get(int index)获得第几列 列数从1开始
get(String columnName) 根据列名获得值 常用
数据库的数据类型与java中数据类型的对应关系
ResultSet对象的常用方法
next():移动到下一行
previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
6. 释放数据库资源
由于数据库的资源非常宝贵,所以用完了一定要记得释放资源
特别是Connection对象,因为数据允许的并发访问连接数量往往都比较有限
在java程序中,我们应该将最终必须要执行的代码放到finally当中
释放资源的代码
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
四、jdbc实现crud
1. 编写程序对User表进行增删改查操作
2. 防止 sql 注入
在 service 层进行逻辑判断
使用PreparedStatement对象
3. 编写工具类对 jdbc 程序进行优化
将获得连接和释放资源的代码写到通用的工具类中
五、 jdbc案例
实现一个简单的员工信息管理系统,练习对员工表的crud
字段名 |
说明 |
类型 |
id |
编号 |
varchar(40) |
name |
员工姓名 |
varchar(20) |
gender |
性别 |
varchar(4) |
birthday |
出生日期 |
date |
idcard |
身份证号 |
varchar(20) |
degree |
学历 |
varchar(20) |
entrydate |
入职日期 |
date |
position |
部门 |
varchar(40) |
department |
职位 |
varchar(20) |
web开发的两种模式
model1: jsp+javabean 只适合小型应用
model2: servlet+jsp+javabean mvc
jsp 的作用只是显示的模板,所以在mvc中jsp应该禁止外界直接方法,藏在 web-inf下面
web应用的分层框架
案例实现步骤:
1. 搭建开发环境
1) 建工程 建包
2) 导入需要jar包
BeanUtils 相关jar包
jstl 标签
mysql 的驱动
3) 创建数据库和表
create database day12_employee;
use day12_employee;
create table employee
(
id varchar(40) primary key,
name varchar(20),
gender varchar(6),
birthday date,
idcard varchar(20),
degree varchar(20),
entrydate date,
department varchar(20),
position varchar(40)
);
写工具类
2. 设计bean
Employee.java
3. 实现dao
4. 实现service
简单service 原封不动调用dao的方法
5. 实现web层
首页