JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
•连接数据源,如:数据库。
•为数据库传递查询和更新指令。
•处理数据库响应并返回的结果。
JDBC 架构
分为双层架构和三层架构。
双层
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
三层
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。
JDBC 编程步骤
加载驱动程序:
1
2
3
4
5
|
Class.forName(driverClass)
//加载MySql驱动
Class.forName( "com.mysql.jdbc.Driver" )
//加载Oracle驱动
Class.forName( "oracle.jdbc.driver.OracleDriver" )
|
获得数据库连接:
复制代码 代码如下:
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
创建Statement\PreparedStatement对象:
复制代码 代码如下:
conn.createStatement();
conn.prepareStatement(sql);
完整实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DbUtil {
public static final String URL = "jdbc:mysql://localhost:3306/imooc" ;
public static final String USER = "liulx" ;
public static final String PASSWORD = "123456" ;
public static void main(String[] args) throws Exception {
//1.加载驱动程序
Class.forName( "com.mysql.jdbc.Driver" );
//2. 获得数据库连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3.操作数据库,实现增删改查
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT user_name, age FROM imooc_goddess" );
//如果有数据,rs.next()返回true
while (rs.next()){
System.out.println(rs.getString( "user_name" )+ " 年龄:" +rs.getInt( "age" ));
}
}
}
|
增删改查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
public class DbUtil {
public static final String URL = "jdbc:mysql://localhost:3306/imooc" ;
public static final String USER = "liulx" ;
public static final String PASSWORD = "123456" ;
private static Connection conn = null ;
static {
try {
//1.加载驱动程序
Class.forName( "com.mysql.jdbc.Driver" );
//2. 获得数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
return conn;
}
}
//模型
package liulx.model;
import java.util.Date;
public class Goddess {
private Integer id;
private String user_name;
private Integer sex;
private Integer age;
private Date birthday; //注意用的是java.util.Date
private String email;
private String mobile;
private String create_user;
private String update_user;
private Date create_date;
private Date update_date;
private Integer isDel;
//getter setter方法。。。
}
//---------dao层--------------
package liulx.dao;
import liulx.db.DbUtil;
import liulx.model.Goddess;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class GoddessDao {
//增加
public void addGoddess(Goddess g) throws SQLException {
//获取连接
Connection conn = DbUtil.getConnection();
//sql
String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile," +
"create_user, create_date, update_user, update_date, isdel)"
+ "values(" + "?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)" ;
//预编译
PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
//传参
ptmt.setString( 1 , g.getUser_name());
ptmt.setInt( 2 , g.getSex());
ptmt.setInt( 3 , g.getAge());
ptmt.setDate( 4 , new Date(g.getBirthday().getTime()));
ptmt.setString( 5 , g.getEmail());
ptmt.setString( 6 , g.getMobile());
ptmt.setString( 7 , g.getCreate_user());
ptmt.setString( 8 , g.getUpdate_user());
ptmt.setInt( 9 , g.getIsDel());
//执行
ptmt.execute();
}
public void updateGoddess(){
//获取连接
Connection conn = DbUtil.getConnection();
//sql, 每行加空格
String sql = "UPDATE imooc_goddess" +
" set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?," +
" update_user=?, update_date=CURRENT_DATE(), isdel=? " +
" where id=?" ;
//预编译
PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
//传参
ptmt.setString( 1 , g.getUser_name());
ptmt.setInt( 2 , g.getSex());
ptmt.setInt( 3 , g.getAge());
ptmt.setDate( 4 , new Date(g.getBirthday().getTime()));
ptmt.setString( 5 , g.getEmail());
ptmt.setString( 6 , g.getMobile());
ptmt.setString( 7 , g.getUpdate_user());
ptmt.setInt( 8 , g.getIsDel());
ptmt.setInt( 9 , g.getId());
//执行
ptmt.execute();
}
public void delGoddess(){
//获取连接
Connection conn = DbUtil.getConnection();
//sql, 每行加空格
String sql = "delete from imooc_goddess where id=?" ;
//预编译SQL,减少sql执行
PreparedStatement ptmt = conn.prepareStatement(sql);
//传参
ptmt.setInt( 1 , id);
//执行
ptmt.execute();
}
public List<Goddess> query() throws SQLException {
Connection conn = DbUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT user_name, age FROM imooc_goddess" );
List<Goddess> gs = new ArrayList<Goddess>();
Goddess g = null ;
while (rs.next()){
g = new Goddess();
g.setUser_name(rs.getString( "user_name" ));
g.setAge(rs.getInt( "age" ));
gs.add(g);
}
return gs;
}
public Goddess get(){
Goddess g = null ;
//获取连接
Connection conn = DbUtil.getConnection();
//sql, 每行加空格
String sql = "select * from imooc_goddess where id=?" ;
//预编译SQL,减少sql执行
PreparedStatement ptmt = conn.prepareStatement(sql);
//传参
ptmt.setInt( 1 , id);
//执行
ResultSet rs = ptmt.executeQuery();
while (rs.next()){
g = new Goddess();
g.setId(rs.getInt( "id" ));
g.setUser_name(rs.getString( "user_name" ));
g.setAge(rs.getInt( "age" ));
g.setSex(rs.getInt( "sex" ));
g.setBirthday(rs.getDate( "birthday" ));
g.setEmail(rs.getString( "email" ));
g.setMobile(rs.getString( "mobile" ));
g.setCreate_date(rs.getDate( "create_date" ));
g.setCreate_user(rs.getString( "create_user" ));
g.setUpdate_date(rs.getDate( "update_date" ));
g.setUpdate_user(rs.getString( "update_user" ));
g.setIsDel(rs.getInt( "isdel" ));
}
return g;
}
}
|