标签:
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 + "]";
}
}
标签:
原文地址:http://www.cnblogs.com/xiaofanke/p/5257519.html