2019独角兽企业重金招聘Python工程师标准>>>

本部分内容,主要实现对数据库的基本操作,并更换数据访问部分,将原来的使用文件存储更换为数据库进行数据的存储

在项目中,要引入mysql的驱动程序

在项目根目录下,创建lib文件夹,将mysql的驱动程序复制到lib目录下,然后在项目中引用

一、创建数据库与数据表

数据库名称:dbbook 书籍信息表:tbook 用户信息表:tuser 数据库操作命令如下:

create database dbbook;
use dbbook;
create table tbook( id int autoincrement, bookname varchar(30), bookauthor varchar(30), count int, primary key(id)
)engine=innodb default charset=utf8;
insert into tbook(bookname,bookauthor,count) values('Java','admin',10);
create table tuser( id int autoincrement,name varchar(20) null,password varchar(20) null,email varchar(20) null, primary key(id)
)engine=innodb default charset=utf8;
insert into t_user(name,password,email) values('admin','admin','admin@126.com');

二、创建DBUtil

1.在src下创建db.properties文件

db.properties文件中保存数据库的连接信息,一行一组数据,格式是key=value内容如下

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_book
user=root
password=hyg760414

2.加载配置文件

对应properties文件处理,使用Properties对象进行处理,采用加载properties文件获得流,然后使用Properties对象进行处理,代码如下:

private static String driver;
private static String url;
private static String user;
private static String password;
//静态代码块
static{try {Properties props=new Properties();//使用PropertiesReader is=new FileReader("db.properties");props.load(is);//使用Load方法加载指定的流//通过getProperty(key),通过key获得需要的值driver=props.getProperty("driver");url=props.getProperty("url");user=props.getProperty("user");password=props.getProperty("password");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}

3.创建连接数据库的方法和关闭连接的方法

在DBUtil类中添加如下方法

/*** 获得连接* @return*/
public static Connection getConnection(){try {Class.forName(driver);Connection conn=DriverManager.getConnection(url,user,password);return conn;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return null;
}/*** 关闭连接* @param conn* @param pstat* @param rs*/
public static void close(Connection conn, PreparedStatement pstat, ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(pstat!=null){try {pstat.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

三、编写MyDbExecute抽象类

在dao包中创建MyDbExecute抽象类,代码如下

package sky.book.dao;import sky.book.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;public abstract class MyDbExecut<T> {/*** 执行Insert、Update、Delete语句* @param sql* @param args* @return*/public int executeUpdate(String sql,Object[] args){int n=0;Connection conn=null;PreparedStatement pstat=null;conn=DBUtil.getConnection();try {pstat=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){pstat.setObject((i+1),args[i]);}n=pstat.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.close(conn,pstat,null);}return n;}/*** 执行select语句* @param sql* @param args* @return 对象的List集合*/public abstract List<T> executeQuery(String sql,Object[] args);
}

四、编写BookDbExecute类,继承自MyDbExecute类

package sky.book.dao;import sky.book.bean.Book;
import sky.book.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class BookDbExecute extends MyDbExecut<Book> {/*** 执行select语句** @param sql* @param args* @return 对象的List集合*/@Overridepublic List<Book> executeQuery(String sql, Object[] args) {List<Book> books=new ArrayList<>();Connection conn=null;PreparedStatement pstat=null;ResultSet rs=null;conn=DBUtil.getConnection();try {pstat=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){pstat.setObject((i+1),args[i]);}rs=pstat.executeQuery();while(rs.next()){Book book=new Book();book.setId(rs.getInt(1));book.setBookname(rs.getString(2));book.setBookauthor(rs.getString(3));book.setCount(rs.getInt(4));books.add(book);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.close(conn,pstat,rs);}return books;}
}

五、编写DbBookRepository类实现IBookRepository类

该类主要实现数据访问层的功能

package sky.book.dao;import sky.book.bean.Book;
import sky.book.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;public class DbBookRepository implements IBookRepository {private Connection conn=null;private PreparedStatement pstat=null;private ResultSet rs=null;private BookDbExecute bookDbExecute=new BookDbExecute();/*** 保存数据** @return*/@Overridepublic boolean saveDate() {return false;}/*** 取得所有书籍信息** @return 所有书籍信息的集合*/@Overridepublic List<Book> selectAllBook() {String sql="select * from t_book";Object[] args={};return bookDbExecute.executeQuery(sql,args);}/*** 根据书籍的id取得书籍信息** @param id 用户的id* @return*/@Overridepublic Book selectBookById(int id) {String sql="select * from t_book where id=?";Object[] args={id};List<Book> books=bookDbExecute.executeQuery(sql,args);if(books.size()>0){return books.get(0);}else{return null;}}/*** 添加书籍** @param book 欲添加的书籍* @return 返回受影响的记录数*/@Overridepublic int insertBook(Book book) {String sql="insert into t_book(bookname,bookauthor,count) values(?,?,?)";Object[] args={book.getBookname(),book.getBookauthor(),book.getCount()};return bookDbExecute.executeUpdate(sql,args);}/*** 根据书名查找书籍** @param name 用户名* @return 如果有该书籍返回书籍对象,否则返回null*/@Overridepublic Book selectBookByName(String name) {String sql="select * from t_book where bookname=?";Object[] args={name};List<Book> books=bookDbExecute.executeQuery(sql,args);if(books.size()>0){return books.get(0);}else{return null;}}/*** 更新书籍信息** @param book 欲更新的书籍信息* @return 返回受影响的记录数*/@Overridepublic int updateBook(Book book) {String sql="update t_book set bookname=?,bookauthor=?,count=? where id=?";Object[] args={book.getBookauthor(),book.getBookauthor(),book.getBookauthor(),book.getId()};return bookDbExecute.executeUpdate(sql,args);}/*** 删除书籍** @param id 书籍id* @return 返回受影响的记录数*/@Overridepublic int deleteBookById(int id) {String sql="delete from t_book where id=?";Object[] args={id};return bookDbExecute.executeUpdate(sql,args);}
}

六、编写UserDbExecute类继承自MyDbExecute

package sky.book.dao;import sky.book.bean.User;
import sky.book.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class UserDbExecute extends MyDbExecut<User> {/*** 执行select语句** @param sql* @param args* @return 对象的List集合*/@Overridepublic List<User> executeQuery(String sql, Object[] args) {List<User> users=new ArrayList<>();Connection conn=null;PreparedStatement pstat=null;ResultSet rs=null;conn=DBUtil.getConnection();try {pstat=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){pstat.setObject((i+1),args[i]);}rs=pstat.executeQuery();while(rs.next()){User u=new User();u.setId(rs.getInt(1));u.setName(rs.getString(2));u.setPassword(rs.getString(3));u.setEmail(rs.getString(4));users.add(u);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.close(conn,pstat,rs);}return users;}
}

七、编写DbUserRepository类实现IUserRepository

package sky.book.dao;import sky.book.bean.User;import java.util.List;public class DbUserRepository implements IUserRepository {private UserDbExecute uExecute=new UserDbExecute();/*** 保存数据** @return*/@Overridepublic boolean saveDate() {return false;}/*** 取得所有用户信息** @return 所有用户信息的集合*/@Overridepublic List<User> selectAllUser() {String sql="select * from t_user";Object[] args={};List<User> users=uExecute.executeQuery(sql,args);if(users.size()>0){return users;}return null;}/*** 根据用户的id取得用户信息** @param id 用户的id* @return*/@Overridepublic User selectUserById(int id) {String sql="select * from t_user where id=?";Object[] args={id};List<User> users=uExecute.executeQuery(sql,args);if(users.size()>0){return users.get(0);}return null;}/*** 添加用户** @param user 欲添加的用户* @return 返回受影响的记录数*/@Overridepublic int insertUser(User user) {String sql="insert into t_user(name,password,email) values(?,?,?)";Object[] args={user.getName(),user.getPassword(),user.getEmail()};return uExecute.executeUpdate(sql,args);}/*** 根据用户名查找用户** @param name 用户名* @return 如果有该用户返回用户对象,否则返回null*/@Overridepublic User selectUserByName(String name) {String sql="select * from t_user where name=?";Object[] args={name};List<User> users=uExecute.executeQuery(sql,args);if(users.size()>0){return users.get(0);}return null;}/*** 更新用户信息** @param user 欲更新的用户信息* @return 返回受影响的记录数*/@Overridepublic int updateUser(User user) {String sql="update t_user(name,password,email) values(?,?,?) where id=?";Object[] args={user.getName(),user.getPassword(),user.getEmail(),user.getId()};return uExecute.executeUpdate(sql,args);}
}

八、创建DaoFactory类

1.在dao下创建DalFactory类

package sky.book.dao;public class DaoFactory {public static IBookRepository getBookRepository(){return new DbBookRepository();}public static IUserRepository getUserRepository(){return new DbUserRepository();}
}

2.修改BookService和UserService类

private IBookRepository bookRepository=new BookRepository();//创建数据访问层对象

更改为

private IBookRepository bookRepository=DaoFactory.getBookRepository();//创建数据访问层对象
private IUserRepository userRepository=new UserRepository();

更改为

private IUserRepository userRepository=DaoFactory.getUserRepository();

转载于:https://my.oschina.net/u/3537796/blog/2907009

Java图书管理系统练习程序(六)相关推荐

  1. Java图书管理系统练习程序(四)

    2019独角兽企业重金招聘Python工程师标准>>> Java图书管理系统练习程序(四) 本部分主要介绍List的基本操作与Java中泛型的使用. 一.Java中泛型的使用 泛型, ...

  2. java图书管理系统技术难度_Java图书管理系统练习程序(一)

    Java图书管理系统练习程序 第一部分 该部分主要实现命令行方式的界面与无数据库访问的练习,通过本练习.主要掌握Java的基础知识与面向对象程序设计思想.面向接口编程技术的知识与运用. 一.练习程序功 ...

  3. 计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档)

    计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档) 计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 ...

  4. 视频教程-手把手实现Java图书管理系统(附源码)-Java

    手把手实现Java图书管理系统(附源码) 南京大学软件工程硕士,曾就职于擎天科技.中软国际.华为等上市公司,擅长Java开发.Web前端.Python爬虫.大数据等领域技术. 全栈工程师,从事软件开发 ...

  5. 计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档)

    计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档) 计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档) 本源码技术栈: 项目 ...

  6. 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...

  7. [附源码]计算机毕业设计JAVA图书管理系统

    [附源码]计算机毕业设计JAVA图书管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intell ...

  8. java图书管理系统源码

    java图书管理系统源码 系统主要功能 读者:登录注册,借阅还书,查询书籍,查看当前借阅信息以及历史借阅信息,查看.查询读者借阅榜以及借阅书籍借阅榜,问题反馈以及查询反馈结果等功能. 管理员:对图书. ...

  9. 我的第一个项目----Java图书管理系统

    项目参考自:http://www.java1234.com/a/yuanchuang/swing2/ 项目视频及代码下载地址:链接:http://pan.baidu.com/s/1pLpQw2J 密码 ...

  10. 基于JSP(java)图书管理系统的设计和实现(含源文件)

    获取项目源文件,联系Q:1225467431,可指导毕设,课设 摘 要 伴随着互联网的蓬勃发展,人们已经不再满足于信息的浏览和发布,而是渴望着能够充分享受网络所带来的更加多的便利.掌握计算机知识和应用 ...

最新文章

  1. STL 简介,标准模板库
  2. 清华孵化、张钹加盟的这家公司,现在把“第三代人工智能”落地了
  3. PHP5 加速模块OPcache
  4. 一些我们码代码过程中有用的小技巧
  5. discuz模板解析注释
  6. 学用 ASP.Net 之 System.Char 结构
  7. 每日程序C语言47-找到年龄最大的人并输出
  8. 最优化方法系列:Adam+SGD-AMSGrad
  9. Knowladge_网站学习_jQuery插件
  10. linux系统管理Linux系统实验,实验三 linux系统管理
  11. char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
  12. matlab电力系统建模与仿真实验,基于MATLAB的小型电力系统的建模与仿真.doc
  13. 【GPU精粹与Shader编程】(一) 开篇 全系列11本书核心知识点总览
  14. ssm员工考勤签到请假管理系统 idea maven
  15. openlayers6踩坑系列(七)坐标经纬度转换公式
  16. 新项目六之集成新版友盟统计
  17. 计算机网络的发展过程大致可以分为几个,计算机网络发展过程分几个阶段
  18. 去除IDEA中代码的波浪线(黄色警示线)
  19. 怎么给电脑安装window7系统呢
  20. php开发discuz插件,discuz x3插件开发傻瓜图文教程,用demo说话

热门文章

  1. Leetcode705.Design HashSet设置哈希集合
  2. 一个简单的c# 贪吃蛇程序
  3. jquery_Ajax
  4. 人人都能成为安全防范的高手 ——《黑客新型攻击防范:深入剖析犯罪软件》...
  5. can't init script for
  6. PHP错误处理注册机制
  7. 【BZOJ2959】长跑 LCT+并查集
  8. 《构建之法》阅读笔记(三)
  9. 高程三(1):简介、使用、严格模式
  10. Java设计模式-Builder生成器模式