Java图书管理系统练习程序(六)
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图书管理系统练习程序(六)相关推荐
- Java图书管理系统练习程序(四)
2019独角兽企业重金招聘Python工程师标准>>> Java图书管理系统练习程序(四) 本部分主要介绍List的基本操作与Java中泛型的使用. 一.Java中泛型的使用 泛型, ...
- java图书管理系统技术难度_Java图书管理系统练习程序(一)
Java图书管理系统练习程序 第一部分 该部分主要实现命令行方式的界面与无数据库访问的练习,通过本练习.主要掌握Java的基础知识与面向对象程序设计思想.面向接口编程技术的知识与运用. 一.练习程序功 ...
- 计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档)
计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档) 计算机毕业设计Java银行贷款管理系统(系统+程序+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 ...
- 视频教程-手把手实现Java图书管理系统(附源码)-Java
手把手实现Java图书管理系统(附源码) 南京大学软件工程硕士,曾就职于擎天科技.中软国际.华为等上市公司,擅长Java开发.Web前端.Python爬虫.大数据等领域技术. 全栈工程师,从事软件开发 ...
- 计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档)
计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档) 计算机毕业设计Java课堂管理系统小程序用户端(源码+mysql数据库+系统+lw文档) 本源码技术栈: 项目 ...
- 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw
计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...
- [附源码]计算机毕业设计JAVA图书管理系统
[附源码]计算机毕业设计JAVA图书管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intell ...
- java图书管理系统源码
java图书管理系统源码 系统主要功能 读者:登录注册,借阅还书,查询书籍,查看当前借阅信息以及历史借阅信息,查看.查询读者借阅榜以及借阅书籍借阅榜,问题反馈以及查询反馈结果等功能. 管理员:对图书. ...
- 我的第一个项目----Java图书管理系统
项目参考自:http://www.java1234.com/a/yuanchuang/swing2/ 项目视频及代码下载地址:链接:http://pan.baidu.com/s/1pLpQw2J 密码 ...
- 基于JSP(java)图书管理系统的设计和实现(含源文件)
获取项目源文件,联系Q:1225467431,可指导毕设,课设 摘 要 伴随着互联网的蓬勃发展,人们已经不再满足于信息的浏览和发布,而是渴望着能够充分享受网络所带来的更加多的便利.掌握计算机知识和应用 ...
最新文章
- STL 简介,标准模板库
- 清华孵化、张钹加盟的这家公司,现在把“第三代人工智能”落地了
- PHP5 加速模块OPcache
- 一些我们码代码过程中有用的小技巧
- discuz模板解析注释
- 学用 ASP.Net 之 System.Char 结构
- 每日程序C语言47-找到年龄最大的人并输出
- 最优化方法系列:Adam+SGD-AMSGrad
- Knowladge_网站学习_jQuery插件
- linux系统管理Linux系统实验,实验三 linux系统管理
- char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
- matlab电力系统建模与仿真实验,基于MATLAB的小型电力系统的建模与仿真.doc
- 【GPU精粹与Shader编程】(一) 开篇 全系列11本书核心知识点总览
- ssm员工考勤签到请假管理系统 idea maven
- openlayers6踩坑系列(七)坐标经纬度转换公式
- 新项目六之集成新版友盟统计
- 计算机网络的发展过程大致可以分为几个,计算机网络发展过程分几个阶段
- 去除IDEA中代码的波浪线(黄色警示线)
- 怎么给电脑安装window7系统呢
- php开发discuz插件,discuz x3插件开发傻瓜图文教程,用demo说话