1、JDBC 的工具包(utils):包含获取数据库连接, 关闭数据库资源等方法

JDBCTools_pro.java
package com.app.utils;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /**
* JDBC 的工具类
*
* 其中包含: 获取数据库连接, 关闭数据库资源等方法.
*/
public class JDBCTools_pro { private static JDBCTools_pro instance; public ComboPooledDataSource ds; private static String c3p0Properties = "jdbc.properties"; //处理数据库事务的
//提交事务
public static void commit(Connection connection){
if(connection != null){
try {
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
} //回滚事务
public static void rollback(Connection connection){
if(connection != null){
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
} //开始事务
public static void beginTx(Connection connection){
if(connection != null){
try {
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
} //private static DataSource dataSource = null; //数据库连接池应只被初始化一次.
/*static{
dataSource = new ComboPooledDataSource("helloc3p0");
} public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}*/
public JDBCTools_pro() throws Exception { Properties p = new Properties();
/*
* 同一包下
*
*/
// p.load(this.getClass().getClassLoader().getResourceAsStream(c3p0Properties));
/*
* 根目录下
*/
p.load(this.getClass().getClassLoader().getResourceAsStream(c3p0Properties)); ds = new ComboPooledDataSource(); ds.setUser(p.getProperty("jdbc.username"));
ds.setPassword(p.getProperty("jdbc.password"));
ds.setJdbcUrl(p.getProperty("jdbc.url"));
ds.setDriverClass(p.getProperty("jdbc.driverClassName")); ds.setMinPoolSize(Integer.parseInt(p.getProperty("C3P0.minPoolSize")));
ds.setMaxPoolSize(Integer.parseInt(p.getProperty("C3P0.maxPoolSize")));
ds.setMaxIdleTime(Integer.parseInt(p.getProperty("C3P0.maxIdleTime")));
ds.setAcquireIncrement(Integer.parseInt(p.getProperty("C3P0.acquireIncrement")));
ds.setMaxStatements(Integer.parseInt(p.getProperty("C3P0.maxStatements")));
ds.setMaxStatementsPerConnection(Integer.parseInt(p.getProperty("C3P0.maxStatementsPerConnection")));
ds.setIdleConnectionTestPeriod(Integer.parseInt(p.getProperty("C3P0.idleConnectionTestPeriod")));
ds.setAcquireRetryAttempts(Integer.parseInt(p.getProperty("C3P0.acquireRetryAttempts"))); }
public static final JDBCTools_pro getInstance() {
if (instance == null) {
try {
instance = new JDBCTools_pro();
} catch (Exception e) {
e.printStackTrace();
}
}
return instance;
} public synchronized final Connection getConnection() {
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} public static void releaseDB(ResultSet resultSet, Statement statement,
Connection connection) { if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
//数据库连接池的 Connection 对象进行 close 时
//并不是真的进行关闭, 而是把该数据库连接会归还到数据库连接池中.
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

2、JDBC数据库底层实现(dao)

 2.1.1.底层实现

BaseDaoImpl.java
package com.app.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import com.app.dao.BaseDao;
import com.app.utils.ReflectionUtils; /**
* 使用 QueryRunner 提供其具体的实现
* @param <T>: 子类需传入的泛型类型.
*/
public class BaseDaoImpl<T> implements BaseDao<T> { private QueryRunner queryRunner = null;
private Class<T> type; public BaseDaoImpl() {
queryRunner = new QueryRunner();
type = ReflectionUtils.getSuperGenericType(getClass());
} @Override
public void batch(Connection connection, String sql, Object[]... args) throws SQLException {
queryRunner.batch(connection, sql, args);
} @SuppressWarnings("unchecked")
@Override
public <E> E getForValue(Connection connection, String sql, Object... args) throws SQLException {
return (E) queryRunner.query(connection, sql, new ScalarHandler(), args);
} @Override
public List<T> getForList(Connection connection, String sql, Object... args)
throws SQLException {
return queryRunner.query(connection, sql,
new BeanListHandler<>(type), args);
} @Override
public T get(Connection connection, String sql, Object... args) throws SQLException {
return queryRunner.query(connection, sql,
new BeanHandler<>(type), args);
} @Override
public void update(Connection connection, String sql, Object... args) throws SQLException {
queryRunner.update(connection, sql, args);
} }

  2.1.2.实物类继承 

UserDaoImpl.java
package com.app.dao.impl;

import java.sql.Connection;

import com.app.dao.UserDao;
import com.app.entity.User;
import com.app.utils.JDBCTools_xml; public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{ @Override
public boolean isUserExisted(String id) {
Connection conn = null;
boolean flage = false;
try {
conn = JDBCTools_xml.getConnection();
String sql = "SELECT id from users where userId = ?";
String p = getForValue(conn, sql, id);
if(null!=p){
flage = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
}
return flage;
} @Override
public boolean isUserpass(String id, String password) {
Connection conn = null;
boolean flage = false;
try {
conn = JDBCTools_xml.getConnection();
String sql = "SELECT id from users where id = ? and password = ?";
String p = getForValue(conn, sql, id);
if(null!=p){
flage = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
}
return flage;
} @Override
public long getNumber() { long num = 0;
Connection conn = null;
try {
conn = JDBCTools_xml.getConnection();
String sql = "SELECT count(*) from users";
num = getForValue(conn, sql, null);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
}
return num;
} @Override
public User getUserById(String id) {
Connection conn = null;
User user = null;
try {
conn = JDBCTools_xml.getConnection();
String sql = "SELECT userId,userName,password "+
"from users where userId = ?";
user = get(conn,sql,id);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCTools_xml.releaseDB(null, null, conn);
} return user;
} @Override
public void insertUser(String userId, String userName, String password) { Connection conn = null;
try {
conn = JDBCTools_xml.getConnection();
String sql = "INSERT INTO users VALUES(?,?,?)";
update(conn, sql, userId,userName,password);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
}
} @Override
public void deleteUser(String id) { Connection conn = null;
try {
conn = JDBCTools_xml.getConnection();
String sql = "DELETE from users where userId = ?";
update(conn, sql, id);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
} } @Override
public void updateUser(String userId, String userName, String password) {
Connection conn = null;
try {
conn = JDBCTools_xml.getConnection();
String sql = "UPDATE users set userName = ?,password = ? where userId = ?";
update(conn, sql, userName,password,userId);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCTools_xml.releaseDB(null, null, conn);
} } }

  2.2.1

BaseDao.java
package com.app.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; /**
* 访问数据的 DAO 接口.
* 里边定义好访问数据表的各种方法
* @param T: DAO 处理的实体类的类型.
*/
public interface BaseDao<T> { void batch(Connection connection,
String sql, Object [] ... args) throws SQLException; <E> E getForValue(Connection connection,
String sql, Object ... args) throws SQLException; List<T> getForList(Connection connection,
String sql, Object ... args) throws SQLException; T get(Connection connection, String sql,
Object ... args) throws SQLException; void update(Connection connection, String sql,
Object ... args) throws SQLException; }

  2.2.2

UserDao.java
package com.app.dao;

import com.app.entity.User;

public interface UserDao extends BaseDao<User>{

	boolean isUserExisted(String id);

	boolean isUserpass(String id,String password);

	long getNumber();

	User getUserById(String id);

	void updateUser(String Userid, String Username, String password);

	void deleteUser(String id);

	void insertUser(String Userid, String Username, String password);

}

  

3、JDBC实物类(entity)

User.java
package com.app.entity;

public class User {

	private String userId;
private String userName;
private String password; public User() {
// TODO Auto-generated constructor stub
} public User(String userId, String userName, String password) {
super();
this.userId = userId;
this.userName = userName;
this.password = password;
} public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
} 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;
} @Override
public String toString() {
return "user [userId=" + userId + ", userName=" + userName + ", password=" + password + "]";
} }

  

最新文章

  1. sql 操作常用操作语句 新增、修改字段等
  2. Python 学习笔记二
  3. Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值
  4. hadoop2.2.0 + hbase 0.94 + hive 0.12 配置记录
  5. 《编写高质量代码:改善C#程序的157个建议》源码下载
  6. Apache网页有时能访问,有时超时打不开
  7. 将a、b的值进行交换,并且不使用任何中间变量
  8. [Qt]No relevant classes found.
  9. c博客作业--函数
  10. 解决Base64报错
  11. OpenCV模板匹配函数matchTemplate详解
  12. CCF WC2017 &amp; THU WC2017 旅游记
  13. K8S学习笔记之Kubernetes 部署策略详解
  14. HDU4162(最小循环表示)
  15. 浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)
  16. 多边形面积问题(hdoj2036)
  17. Docker创建数据卷
  18. C语言文件实现学生成绩管理
  19. 【Vue.js】高仿饿了么外卖App(一)
  20. 记一次redis key丢失的问题排查

热门文章

  1. SQL 中使用 WITH AS 提高性能
  2. 建立ftp服务器的网址
  3. mpvue——动态渲染echarts图表
  4. Insert Into select 与 Select Into 哪个更快?
  5. Linux saltstack常用模块
  6. Codeforces 1082C Multi-Subject Competition(前缀+思维)
  7. maven在windows及linux环境下安装
  8. 剑指Offer_编程题_24
  9. GO 基础
  10. react-router v4中 HashRouter 和 BrowserRouter的使用