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 + "]";
} }

  

通用JDBC-demo的更多相关文章

  1. Spring MVC系列之JDBC Demo(SpringBoot)(七)

    前言 前面我们了解了Spring MVC的基本使用,其实和.NET或.NET Core MVC无异,只是语法不同而已罢了,本节我们将和和数据库打交道,从最基础的JDBC讲解起,文中若有错误之处,还望指 ...

  2. 简单通用JDBC辅助类封装

    哎,最近很好久没在博客园写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernate 里面的SimpleJdbcTemplate,这里 ...

  3. JDBC demo

    package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  4. Oracle Jdbc demo

    两种方式: thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动的jar包就行.thin就是纯粹用Java写的ORACLE数据库 ...

  5. Spring与Jdbc Demo

    方法一:继承JdbcTemplate来实现 1.配置applicationContext <!-- 获取数据源连接 dbcp --> <bean id="dataSourc ...

  6. 数据库通用Jdbc操作

    public class JdbcUtil { /** * 关闭一个数据库链接 * @param conn */ public static void closeConnection(Connecti ...

  7. 从零自学Hadoop(18):Hive的CLI和JDBC

    阅读目录 序 Hive CLI(old CLI) Beeline CLI(new CLI) JDBC Demo下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出 ...

  8. JDBC批处理---(java 对数据库的回滚) .

    1先看一下程序: package com.redking.jdbc.demo;    import java.sql.Connection;    import java.sql.DriverMana ...

  9. JDBC学习总结(五)

    取得数据库连接是件耗时间及资源的动作,尽量利用已打开的连接,也就是重复利用取得的Connection实例,是改善数据库连接性能的一个方式,而采用连接池是基本做法.由于取得Connection的方式根据 ...

  10. Oracle、DB2、MySql、SQLServer JDBC驱动

    四种数据库JDBC驱动,还列出了连接的Class驱动名和Url Pattern,DB2包括Type 2.Type 3和Type 4三种模式.注意驱动包名称的大小写. Oralce连接驱动包名和URL ...

随机推荐

  1. Djangon的坑

    <a href="/del_student/?pk={{ students.pk }}"></a> 在django中当你写入这样的语句是,pk={{ stu ...

  2. 【数学建模】MatLab 数据读写方法汇总

    1.读入 txt 文件数据. load xxx.txt A=load(‘xxx.txt’) A=dlmread(‘xxx.txt’) A=importdata(‘xxx.txt’) 例:将身高体重的 ...

  3. 关于rem布局

    实际UI设计稿给过来为了在手机屏幕上显示清晰,设计稿通常为实际标准手机页面的2倍,一般为640px(以ip5的屏幕尺寸320px设计)或者750px(以ip6的屏幕尺寸为375px设计),这是前提. ...

  4. python xpath学习

    一.选取节点: 二.谓词: 注意:在scrapy中用xpath进行搜索时,如果使用相对路径,要加上.,如,不然搜索的是整个文档.

  5. TypeScript体系调研报告

    作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...

  6. spring-boot-devtools在Idea中热部署方法

    1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...

  7. 友盟冲突解决com.umeng.weixin.handler.UmengWXHandler cannot be cast to com.umeng.socialize.handler.UMWXHandler

    删掉一个试试

  8. Luogu P1654 OSU!

    写法和CF235B Let's Play Osu!非常相似.但是这个题厉害就厉害在统计的贡献里面有一个平方的期望,而这个平方的期望和期望的平方是完全不一样的,需要另外统计,逻辑上仔细想一想就会明白. ...

  9. docker系列(1)- 配置

    参考自:https://www.jianshu.com/p/81bf5efff8e0

  10. maven 构建参数和命令

    mvn常用参数 mvn -e 显示详细错误 mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖) mvn -o 运行offline模式,不联网 ...