简单的CRUD(二)
一、重构简单的CRUD
1.JDBC工具类
1.因为在crud中都包含一些相同的代码所以可以提取出来,抽取代码重构为工具类。
2.将工具类设置为static静态类,方便调用,不需要new对象。
public class JDBCUtil {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/station";
private static String username = "root";
private static String password = "admin";
public static Connection getConnection(){
/**
* 1.对加载和创建连接的重构
* 2.把参数提取出来
* 3.返回connection
*/
Connection connection=null;
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
} /**
* 对关闭资源的异常代码的重构
* @param connection
* @param preparedStatement
*/
public static void close(PreparedStatement preparedStatement,Connection connection){
try {
if (preparedStatement!=null){
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try{
if (connection!=null){
connection.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
} /**
* 重构close
* @param preparedStatement
* @param connection
*/
public static void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection){
try {
if (resultSet!=null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(preparedStatement, connection);
}
}
}
二、使用预编译sql语句
1.预编译sql语句的好处
1.效率高,预编译对象把一些格式固定的SQL编译后,存放在内存池中即数据库缓冲池,当我们再次执行相同的SQL语句时就不需要预编译的过程了,只需DBMS运行SQL语句。所以当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,特别是的大型的数据库中,它可以有效的也加快了访问数据库的速度。(反复使用一个sql语句时)
2.提高了代码的可读性和维护性,将参数与SQL语句分离出来,这样就可以方便对程序的更改和延续,同样,也可以减少不必要的错误。
3.开源防止SQL注入。
2.用户实体类
public class LoginUser {
// 创建注册用户属性
private Integer id;
private String username;
private String password; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}
3、用户dao接口
public interface ILoginUserDao {
/**
* 保存用户
* @param loginUser
*/
void save(LoginUser loginUser); /**
* 通过用户名id查询用户信息
* @param id
* @return
*/
LoginUser getLoginUserById(Integer id);
}
4、用户dao实现
public class LoginUserDao implements ILoginUserDao {
@Override
public void save(LoginUser loginUser) {
/**
* 0.导入驱动包
* 1.加载 2.连接 提取到了JDBCUtil工具类
* 3.创建预编译语句
* 4.执行sql语句
* 5.释放资源 提取到了JDBCUtil工具类
*/
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
//调用工具类中的getConnection,返回连接
connection = JDBCUtil.getConnection();
String sql = "INSERT INTO loginuser (username, password) VALUES (?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, loginUser.getUsername());
preparedStatement.setString(2, loginUser.getPassword());
//执行sql语句
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
//释放资源
JDBCUtil.close(preparedStatement, connection);
}
} @Override
public LoginUser getLoginUserById(Integer id) {
LoginUser loginUser = new LoginUser();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//调用工具类中的getConnection,返回连接
connection = JDBCUtil.getConnection();
String sql = "SELECT id, username, password FROM loginuser where id = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, id);
//执行sql语句
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
int id1 = resultSet.getInt("id");
String userName = resultSet.getString("username");
String password = resultSet.getString("password");
//封装对象
loginUser.setId(id1);
loginUser.setUsername(userName);
loginUser.setPassword(password);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//释放资源
JDBCUtil.close(resultSet, preparedStatement, connection);
}
return loginUser;
}
简单的CRUD(二)的更多相关文章
- 简单的CRUD(一)
一.JDBC的概述--(来源于百度) JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问, ...
- ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
- 8天掌握EF的Code First开发系列之2 简单的CRUD操作
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
- spring集成mongodb封装的简单的CRUD
1.什么是mongodb MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB是一个介 ...
- Mongodb系列- java客户端简单使用(CRUD)
Mongodb提供了很多的客户端: shell,python, java, node.js...等等. 以 java 为例实现简单的增删改查 pom文件: <dependencies> & ...
- springboot + mybatis 的项目,实现简单的CRUD
以前都是用Springboot+jdbcTemplate实现CRUD 但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD 上图是项目的 ...
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
- Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化 [函数名称] 简单统计法图像二值化 WriteableBitmap StatisticalThSegment(Wr ...
随机推荐
- 最后一个 last-of-type
last-of-type这个比较好点,有时候:last-child 不起作用
- struts2官方 中文教程 系列二:Hello World项目
先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World 即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...
- 恢复 MSSQL bak 文件扩展名数据(下)
恢复 MSSQL bak 文件扩展名数据 一.概念: RESTORE Statements (Transact-SQL) Restores backups taken using the BACKUP ...
- windows系统作为客户端时,linux中本地yum源挂载时,如何同时挂载DVD1和DVD2?
这里以CentOS6.5为例.他的镜像有两个DVD1和DVD2.DVD1中是系统和主要的安装包,DVD2中是剩下的安装包 当挂载时如果要同时挂载DVD1和DVD2.需要这样做: 1)在虚拟机的设置中选 ...
- [开源] angularjs + Asp.net 前后端分离解决方案
本文版权归 博客园 萧秦 所有,此处为技术收藏,如有再转,请于篇头明显位置标明原创作者及出处,以示尊重! 作者:萧秦 原文:http://www.cnblogs.com/xqin/p/4862849. ...
- uC/OS-II 函数之消息队列相关函数
上文主要介绍了信号量相关的函数,本文介绍消息队列相关的函数:OSQCreate()建立消息队列函数,OSQPend()任务等待消息函数,其他的消息函数. 消息队列介绍 消息队列是µC/OS-II中另一 ...
- Spring AOP 杂谈
其实AOP的思想现在讲的已经很多了,本身没有什么难点,难的是AOP有自己的一套术语,而我们经常被这套术语搞晕.术语没招,只能理解背诵了,尽管背诵很讨厌,可大家都这么说,不知道,就会被说晕. AOP思想 ...
- 条目二十二《切勿修改set或multiset的键》
条目二十二<切勿修改set或multiset的键> 所有的标准关联容器一样,set和multiset按照一定的顺序来存放自己的元素,而这些容器的正确行为也是建立在其元素保持有序的基础之上的 ...
- 安装mysqlclient, 链接mysql失败,提示“Library not loaded: @rpath/libmysqlclient.21.dylib”
问题: >>> import MySQLdb Traceback (most recent call last): File "<stdin>", l ...
- java中引用
java中引用分为,强,弱,虚,软 (1)强引用 使用最普遍的引用.如果一个对象具有强引用,它绝对不会被gc回收.如果内存空间不足了,gc宁愿抛出OutOfMemoryError,也不是会回收具有强引 ...