其实···,我个人是很不喜欢这样的缩写的,比如:我有一句MMP不知道该不该讲!!!
这里面的MMP你知道是什么意思么!!!
还有WQNMLGB,你知道是什么吗?是的,没错,写全了就是“我去年买了个包”!!!
好吧,还是讲点正经的,JDBC是什么呢?大家说得不错,就是“觉得不错”!!!其工作原理如下图:
根据上图来看,使用的步骤很清楚了吧。
第一步:导入JDBC的驱动包。
第二步:使用DriverManager加载驱动。
第三步:调用JDBC API访问或操作数据库中的数据。
JDBC要使用的常用类和接口如下图如式:
接下来我们通过几个常用操作来演示使用Java访问MySql中的数据该如何编写代码。
先创建一个博客管理的数据库,在其中添加文章表,表中有以下几个字段:
文章ID,文章标题,文章内容,发表时间,文章显示状态(0.不显示 1.显示)
之后再添加几条测试数据。
一、添加博文
1.1 创建Blog实体类
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
|
public class Blog {
private int blogid; //ID
private String title; //标题
private String content; //内容
private String pubtime; //发表时间
private int blogstate; //状态 0.不可见 1.可见
public int getBlogid() {
return blogid;
}
public void setBlogid( int blogid) {
this .blogid = blogid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this .title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this .content = content;
}
public String getPubtime() {
return pubtime;
}
public void setPubtime(String pubtime) {
this .pubtime = pubtime;
}
public int getBlogstate() {
return blogstate;
}
public void setBlogstate( int blogstate) {
this .blogstate = blogstate;
}
} |
1.2 创建BlogDAO类,编写添加方法
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
|
public class BlogDAO {
/**
* 添加博客文章
* @param blog
* @return 是否添加成功 0.失败 1.成功
*/
public int addBlog(Blog blog){
int result = 0 ;
try {
//1. 加载驱动
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2. 创建连接
String url = "jdbc:mysql://127.0.0.1:3306/blogdb" ;
Connection conn = DriverManager.getConnection(url, "root" , "root" );
//3. 执行SQL语句,?表示占位符,后期可以使用setxxx()方法给对应的位置填充数据
String sql = "INSERT INTO blogTbl (title, content) VALUES (?, ?)" ;
PreparedStatement ps = conn.prepareStatement(sql);
//3.1 填充数据
ps.setString( 1 , blog.getTitle());
ps.setString( 2 , blog.getContent());
result = ps.executeUpdate();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
} |
1.3 创建Test类,测试添加方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static void main(String[] args){
Blog blog = new Blog();
BlogDAO blogDAO = new BlogDAO();
blog.setTitle( "添加一个标题" );
blog.setContent( "添加了一点点内容..." );
if (blogDAO.addBlog(blog)> 0 ){
System.out.println( "添加成功!" );
}
else {
System.out.println( "失败了..." );
}
} |
结果:
二、查询所有博文
因为前面需要创建的文件都已经创建了,所以这儿只需要在BlogDAO类中编写查询所有博文的方法即可。
2.1 编写查询所有博文的方法
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
|
public List<Blog> findAll(){
List<Blog> list = new ArrayList<Blog>();
try {
//1. 加载驱动
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2. 创建连接
String url = "jdbc:mysql://127.0.0.1:3306/blogdb" ;
Connection conn = DriverManager.getConnection(url, "root" , "root" );
//3. 执行SQL语句
String sql = "select blogid, title, content, pubtime, blogstate from blogTbl" ;
PreparedStatement ps = conn.prepareStatement(sql);
//3.1 读取数据并封装成Blog对象
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Blog blog = new Blog();
blog.setBlogid(rs.getInt( "blogid" )); //getInt()也可以通过下标读取数据
blog.setTitle(rs.getString( "title" ));
blog.setContent(rs.getString( "content" ));
blog.setPubtime(rs.getString( "pubtime" ));
blog.setBlogstate(rs.getInt( "blogstate" ));
list.add(blog);
}
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} |
注意:因为是读取数据,并且读取的数据不止一条记录,所以一般使用集合保存后返回。
2.2编写测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void main(String[] args){
BlogDAO blogDAO = new BlogDAO();
List<Blog> list = blogDAO.findAll();
System.out.println( "文章ID\t标题\t\t发表时间\t\t状态\t内容" );
for ( int i = 0 ; i < list.size(); i++) {
System.out.println(list.get(i).getBlogid()+ "\t" +
list.get(i).getTitle() + "\t" +
list.get(i).getPubtime()+ "\t" +
(list.get(i).getBlogstate()== 0 ? "不可见" : "可见" )+ "\t" +
list.get(i).getContent());
}
} |
结果:
使用JDBC基本就这两个套路,一个是增、删、改的功能,一个是查询的功能。