通用JDBC-demo

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

}

  

时间: 2024-10-16 05:51:10

通用JDBC-demo的相关文章

Spring与Jdbc Demo

方法一:继承JdbcTemplate来实现 1.配置applicationContext 1 <!-- 获取数据源连接 dbcp --> 2 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 3 <property name="driverClassName" value="com.mysql.jdbc.Driver

Oracle Jdbc demo

两种方式: thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动的jar包就行.thin就是纯粹用Java写的ORACLE数据库访问接口. oci 是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端.oci是Oracle Call Interface的首字母缩写,是ORACLE公司提供了访问接口,就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度 快,但是需要安装和配置数据库.

JDBC demo

package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCDemo1 { public static void main(String[] args) { Connection conn

jdbc调用存储过程

JDBC调用存储过程 通用JDBC连接类(简版) package com.qy.dbUtil; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; imp

很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天做个demo(续集)

有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用.(浏览器自带的扫描就够了,QQ扫码和微信扫码部分手机不能直接连接wifi) 在看之前你可以扫一扫下面几个二维码先看看效果: 上篇网站介绍了一下常用格式(http://www.cnblogs.com/dunitian/p/4998714.html),其实扫二维码的本质就是解析出一段字符串,为什么有一些神奇的功能呢?那是字符串的格式满足一些系统内置的协议或者格式,所以系统就帮你干了类似于发短信,打电话,添加联系人,连接wifi

一颗简单的JDBC栗子

前言:安装好数据库之后,我们编写的java程序是不能直接使用数据库的,而JDBC(Java Database Connectivity,即java数据库连接)是java语言里用来规范客户端程序访问数据库的API,有了它,我们就可以向各种关系型数据库发送SQL语句,从而实现对数据库的增删改查等操作. 准备工作: 1.数据库:这里以MySQL为例,创建一个Person表,四个字段分别为:自增主键id.姓名name.性别gender.年龄age 1 DROP TABLE IF EXISTS `pers

SpringBoot的jdbc进行数据库的l连接

这里的数据库连接的是虚拟机里面docker环境下的mysql数据库(docker环境的装配在前面也有讲到https://www.cnblogs.com/zhaochunhui/p/11359544.html) 使用的是mysql的数据库,使用jdbc的链接驱动,在创建项目的时候,就要选择好我们的依赖;(jdbc.mysql.web) <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo

垂直居中的6种方法

利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可. Line-Height Method 试用:单行文本垂直居中,demo 代码: html 1 2 3 <div id="parent"> <div id="child&quo

CSS垂直居中6种方法

转自http://blog.csdn.net/wolinxuebin/article/details/7615098 利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可. Line-Height Method 试用:单行文本垂直居中,demo 代码: html 1

PIGOSS监控模块客户使用率调研(随机抽查12家)

文章转自pigoss bsm 官网 :http://www.netistate.com/news/xinwendongtai/2016-05-06/557.html 如需转载,请注明出处! 随着IT技术的发展,IT建设的不断深入和完善,同时由于各大行业.各个公司的IT建设发展程度以及重视业务的角度的不同,造就了需要IT运维的千 差万别,需要考虑或实施业务集中方案的组织越来越多,然而业务系统集中后,不仅加大了运行维护的工作强度,而且会增加集中系统的繁杂性,这就需要一个高效 的IT运维监控系统来实现