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. How to proof MD5

    F(X, Y, Z) = (X&Y) | ((~X) & Z) G(X, Y, Z) = (X&Z) | (Y & (~Z)) H(X, Y, Z) = X^Y^Z I ...

  2. 清北学堂part2

    今天的内容分为两部分,能听懂的和听不懂的... 整一整当前阶段(oi)非常重要的知识点,扩展欧几里得, 其他的不是不重要,只是代码实现效果不很好 代码: #include<bits/stdc++ ...

  3. 【深入Java虚拟机】之三:内存溢出

    为了更直接的了解各区域,下面我们来看几个示例. 1.Java 堆溢出 下面的程中我们限制Java 堆的大小为20MB,不可扩展(将堆的最小值-Xms 参 数与最大值-Xmx 参数设置为一样即可避免堆自 ...

  4. BBS 502 BadGateway 原因分析

    说明: LNMP架构. crontab里有每隔20分钟重启php的任务:然后我用python写了个每1分钟检测php-cgi进程是否存在的脚本,如果不存在则调用重启php的脚本,并邮件通知管理员.cr ...

  5. Markdown初入门(使用Typora编辑)

    标题 使用#来实现标题的大小控制 # h1 标题1 ## h2 标题2 ### h3 标题3 #### h4 标题4 ##### h5 标题5 ###### h6 标题6 标题一 标题二 标题三 标题 ...

  6. intellij 操作

    默认快捷键 ctrl+alt+l 格式化代码 alt+insert代码自动生成 代码生成 编辑框右键>generator>选择

  7. jvm学习笔记二(减少GC开销的建议)

    一:触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大.更值得关注的是主GC的触发条件,因为它对系统影响很明显.总 ...

  8. OS + CentOS / http_proxy / https_proxy / dalishangwang / repo

    s OS + Linux RedHat / redhat7 / redhat 7 / redhat 6 / redhat 5 https://lindows.iteye.com/blog/456637 ...

  9. 金融量化分析【day112】:量化平台的使用-初始化函数

    一.set_benchmark - 设置基准 1.实现代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_bench ...

  10. 第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法

    一. 简介 该章节,可以说是一个简单轻松的章节,只要你对Expression表达式树.EF的基本使用.泛型有所了解,那么本章节实质上就是一个非常简单的封装章节,便于我们快捷开发. PS:在该章节对于E ...