其实···,我个人是很不喜欢这样的缩写的,比如:我有一句MMP不知道该不该讲!!!
这里面的MMP你知道是什么意思么!!!
还有WQNMLGB,你知道是什么吗?是的,没错,写全了就是“我去年买了个包”!!!
好吧,还是讲点正经的,JDBC是什么呢?大家说得不错,就是“觉得不错”!!!其工作原理如下图:
根据上图来看,使用的步骤很清楚了吧。
第一步:导入JDBC的驱动包。
第二步:使用DriverManager加载驱动。
第三步:调用JDBC API访问或操作数据库中的数据。
JDBC要使用的常用类和接口如下图如式:
接下来我们通过几个常用操作来演示使用Java访问MySql中的数据该如何编写代码。
先创建一个博客管理的数据库,在其中添加文章表,表中有以下几个字段:
文章ID,文章标题,文章内容,发表时间,文章显示状态(0.不显示 1.显示)
之后再添加几条测试数据。
一、添加博文
1.1 创建Blog实体类
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类,编写添加方法
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类,测试添加方法
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 编写查询所有博文的方法
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编写测试方法
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基本就这两个套路,一个是增、删、改的功能,一个是查询的功能。