Java -- DBUtils 框架 操作MySQL数据库
1. 增删改查 常用Handler处理器示例
的创建和关闭。
- public class Demo1 {
- /**
- create database dbutils;
- use dbutils;
- create table user(
- id int primary key auto_increment,
- name varchar(40),
- password varchar(40),
- email varchar(60),
- birthday date
- );
- insert into user(name,password,email,birthday) values('zs','123','xj@qq.com','1990-06-27');
- insert into user(name,password,email,birthday) values('ls','123','xj@qq.com','1990-06-27');
- insert into user(name,password,email,birthday) values('ww','123','xj@qq.com','1990-06-27');
- * @throws SQLException
- */
- @Test
- public void add() throws SQLException
- {
- //创建QueryRunner时带 连接池,获得的连接 用完后会自动归还到连接池
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
- Object[] params = {"kevin", "12345", "xj@163.com", new Date()};
- qr.update(sql, params);
- }
- @Test
- public void delete() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "delete from user where id=?";
- qr.update(sql, 1);
- }
- @Test
- public void update() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "update user set name=? where id=?";
- Object[] params = {"xiangjie", 2};
- qr.update(sql, params);
- }
- @Test
- public void find() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user where id=?";
- Object[] params = {2};
- User user = (User) qr.query(sql, new BeanHandler(User.class), params);
- System.out.println(user.getName());
- }
- @Test
- public void getAll() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- List list = (List) qr.query(sql, new BeanListHandler(User.class));
- System.out.println(list.size());
- }
- @Test
- public void testBatch() throws SQLException //SQL批处理
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
- Object[][] params = new Object[10][];
- for(int i=0; i<10; i++)
- {
- params[i] = new Object[]{"xx"+i, "123456", "xj@qq.com", new Date()};
- }
- qr.batch(sql, params);
- }
- // dbutils 存储大文本 (不建议使用,无缓存,文本被直接放到内存,很大文本直接用JDBC)
- /*
- create table testclob
- (
- id int primary key auto_increment,
- resume text
- );
- */
- @Test
- public void testclob() throws IOException, SerialException, SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String path = Demo1.class.getClassLoader().getResource("test.txt").getPath();
- String sql = "insert into testclob(resume) values(?)";
- FileReader in =new FileReader(path);
- char[] buffer = new char[(int) new File(path).length()];
- in.read(buffer);
- SerialClob clob = new SerialClob(buffer);
- Object[] params = {clob};
- qr.update(sql, params);
- }
- /*
- * dbutils 提供的 handler 处理器
- */
- @Test
- public void testArrayHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- Object[] result = (Object[]) qr.query(sql, new ArrayHandler());
- System.out.println(Arrays.asList(result));
- }
- @Test
- public void testArrayListHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- List<Object[]> list = (List<Object[]>) qr.query(sql, new ArrayListHandler());
- for(Object[] obj : list)
- System.out.println(Arrays.asList(obj));
- }
- @Test
- public void testKeyedHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- Map<Integer, Map> map = (Map<Integer, Map>) qr.query(sql, new KeyedHandler("id"));
- for(Map.Entry<Integer, Map> me : map.entrySet())
- {
- int id = me.getKey();
- Map<String, Object> innermap = me.getValue();
- for(Map.Entry<String , Object> innerme : innermap.entrySet() )
- {
- String columnName = innerme.getKey();
- Object value = innerme.getValue();
- System.out.println(columnName + "=" + value);
- }
- System.out.println("-----------------");
- }
- }
- @Test
- public void testMapHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- Map<String, Object> map = (Map<String, Object>) qr.query(sql, new MapHandler());
- for(Map.Entry<String , Object> entry : map.entrySet())
- {
- System.out.println(entry.getKey() + "=" + entry.getValue());
- }
- }
- @Test
- public void testMapListHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from user";
- List<Map<String, Object>> list = (List<Map<String, Object>>) qr.query(sql, new MapListHandler());
- for(Map<String, Object> map : list)
- {
- for(Map.Entry<String, Object> entry : map.entrySet())
- {
- System.out.println(entry.getKey() + "=" + entry.getValue());
- }
- System.out.println("------------------");
- }
- }
- @Test
- public void testScalarHandler() throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select count(*) from user";
- long L = (Long) qr.query(sql, new ScalarHandler(1));
- int count = (int) L;
- System.out.println("count: " + count);
- }
- }
2. 事务操作
方式一: 能实现功能,但不实用
dao层 提供增删改查,共用一个connect
- /*
- create table account(
- id int primary key auto_increment,
- name varchar(40),
- money float
- );
- insert into account(name,money) values('aaa',1000);
- insert into account(name,money) values('bbb',1000);
- insert into account(name,money) values('ccc',1000);
- insert into account(name,money) values('ddd',1000);
- */
- public class AccountDao {
- private Connection conn = null;
- public AccountDao(Connection conn)
- {
- this.conn = conn;
- }
- /*
- public void transfer() throws SQLException //不实用
- {
- Connection conn = null;
- try {
- conn = JdbcUtils_C3P0.getConnection();
- conn.setAutoCommit(false);
- QueryRunner qr = new QueryRunner();
- String sql1 = "update account set money=money-100 where id=1";
- String sql2 = "update account set money=money+100 where id=2";
- qr.update(conn, sql1);
- qr.update(conn, sql2);
- conn.commit();
- System.out.println("transfer success");
- } catch (SQLException e) {
- conn.rollback();
- e.printStackTrace();
- }finally{
- conn.close();
- }
- }
- */
- public void update(Account account) throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "update account set name=?,money=? where id=?";
- Object[] params = {account.getName(), account.getMoney(), account.getId()};
- qr.update(conn, sql, params);
- }
- public Account find(int id) throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from account where id=?";
- return (Account) qr.query(conn, sql, id, new BeanHandler(Account.class));
- }
- }
Service层 提供transfer方法, 操作事务
- public class AccountService {
- public void transfer(int sourceid, int targetid, float money) throws SQLException
- {
- Connection conn = null;
- try {
- conn = JdbcUtils_C3P0.getConnection();
- conn.setAutoCommit(false);
- AccountDao dao = new AccountDao(conn);
- Account source = dao.find(sourceid);
- Account target = dao.find(targetid);
- source.setMoney(source.getMoney()-money);
- target.setMoney(target.getMoney()+money);
- dao.update(source);
- dao.update(target);
- conn.commit();
- } catch (SQLException e) {
- if(conn!=null)
- conn.rollback();
- }finally{
- if(conn!=null)
- conn.close();
- }
- }
- }
方式二: 利用ThreadLocal容器存储Connection, 实用方案
service层
- public class AccountService {
- public void transfer(int sourceid, int targetid, float money) throws SQLException
- {
- try {
- JdbcUtils_C3P0.startTransaction(); //利用工具类, 开启事务
- AccountDao dao = new AccountDao();
- Account source = dao.find(sourceid);
- Account target = dao.find(targetid);
- source.setMoney(source.getMoney()-money);
- target.setMoney(target.getMoney()+money);
- dao.update(source);
- //int i=1/0; //制造异常中断
- dao.update(target);
- JdbcUtils_C3P0.commit();
- } catch (SQLException e) {
- e.printStackTrace();
- JdbcUtils_C3P0.rollback(); //回滚
- }finally{
- JdbcUtils_C3P0.release(); //释放连接
- }
- }
- }
Dao层
- public class AccountDao {
- private Connection conn = null;
- public AccountDao(Connection conn)
- {
- this.conn = conn;
- }
- public AccountDao(){}
- public void update(Account account) throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "update account set name=?,money=? where id=?";
- Object[] params = {account.getName(), account.getMoney(), account.getId()};
- qr.update(JdbcUtils_C3P0.getConnection(), sql, params); //利用工具类获得连接
- }
- public Account find(int id) throws SQLException
- {
- QueryRunner qr = new QueryRunner(JdbcUtils_C3P0.getDataSource());
- String sql = "select * from account where id=?";
- return (Account) qr.query(JdbcUtils_C3P0.getConnection(), sql, id, new BeanHandler(Account.class));
- }
- }
工具类:
- public class JdbcUtils_C3P0 {
- private static ComboPooledDataSource ds = null;
- private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); //Threadlocal容器
- static{
- ds = new ComboPooledDataSource("c3p0config");
- }
- public static Connection getConnection() throws SQLException{
- Connection conn = threadLocal.get();
- if(conn==null)
- {
- conn = getDataSource().getConnection();
- threadLocal.set(conn);
- }
- return conn;
- }
- public static DataSource getDataSource()
- {
- return ds;
- }
- public static void startTransaction()
- {
- Connection conn = threadLocal.get();
- try{
- if(conn == null)
- {
- conn = getDataSource().getConnection();
- threadLocal.set(conn);
- }
- conn.setAutoCommit(false);
- }
- catch(Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- public static void rollback()
- {
- try
- {
- Connection conn = threadLocal.get();
- if(conn!=null)
- conn.rollback();
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- public static void commit()
- {
- try
- {
- Connection conn = threadLocal.get();
- if(conn!=null)
- conn.commit();
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- public static void release()
- {
- try
- {
- Connection conn = threadLocal.get();
- if(conn!=null)
- {
- conn.close();
- threadLocal.remove();
- }
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- }
工具类C3P0配置文档
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- c3p0-config.xml
- private static ComboPooledDataSource ds;
- static{
- try {
- ds = new ComboPooledDataSource("c3p0config");
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
- -->
- <c3p0-config>
- <default-config>
- <property name="driverClass">com.mysql.jdbc.Driver</property>
- <property name="jdbcUrl">jdbc:mysql://localhost:3306/transaction</property>
- <property name="user">root</property>
- <property name="password">123456</property>
- <property name="acquireIncrement">5</property>
- <property name="initialPoolSize">10</property>
- <property name="minPoolSize">5</property>
- <property name="maxPoolSize">100</property>
- </default-config>
- <named-config name="c3p0config">
- <property name="driverClass">com.mysql.jdbc.Driver</property>
- <property name="jdbcUrl">jdbc:mysql://localhost:3306/dbutils</property>
- <property name="user">root</property>
- <property name="password">123456</property>
- <property name="acquireIncrement">5</property>
- <property name="initialPoolSize">10</property>
- <property name="minPoolSize">5</property>
- <property name="maxPoolSize">100</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
- </named-config>
- </c3p0-config>
Java -- DBUtils 框架 操作MySQL数据库的更多相关文章
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- Java 操作MySql数据库
Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...
- Java通过JDBC 进行MySQL数据库操作
转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
随机推荐
- 【BZOJ1941】[Sdoi2010]Hide and Seek KDtree
[BZOJ1941][Sdoi2010]Hide and Seek Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了 ...
- Java多线程的两种实现方式
Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...
- 关于JAVA中String类型的最大长度
前些天看到一道面试题,题目很容易理解:String的长度限制是多少? 针对这个题目,浏览了网友的回答,大概得到了3个层次的答案. 最浅的层次: 近似计算机内存大小的长度.这是作为一个程序员最浅显的回答 ...
- Linux下Solr的安装和配置
一.安装 1.需要的安装包:apache-tomcat-7.0.47.tar.gz.solr-4.10.3.tgz.tgz(jdk自行安装) 2.解压tomcat并创建solr文件夹 [root@lo ...
- IOS开发复习笔记(1)-OC基础知识
在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下: 1.命名约定 对象类型和名称一致,以免混淆 ...
- win7安装laravel
使用Packagist 镜像 建立一个composer.json文件,内容如下: { "name": "laravel/laravel", "desc ...
- Linux下简单的多线程编程--线程池的实现
/* 写在前面的话: 今天刚“开原”,选择了一篇关于线程池的文件与大家分享,希望能对您学习有所帮助,也希望能与大家共同学习! 选择在这个特殊的时候注册并发文章也是有一些我个人特殊的意义的,看我的id( ...
- python爬虫--爬取cctv连续剧
#encoding=utf-8 import requests from bs4 import BeautifulSoup import re import os from aria2rpc impo ...
- windows 和rhel,centos双系统安装
1:首先确保你先安装为windows系统,为indows7以上的把. 2:安装好为indows系统后,进入系统后把磁盘分区,分出足够的空间为安装linux. 3:再为windows下使用软碟通等工具制 ...
- C#对excel的操作
本文先描述如何用c#连接.操作excel文件. 项目中需要引入的DLL文件为Interop.Excel.Interop.Microsoft.Office.Core.Interop.Office等. 操 ...