本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com 。
内容可能有不到之处,欢迎交流。

未经本人允许禁止转载。

文章目录

  • 项目代码地址
  • 项目简介
  • 依赖jar包下载
  • 项目包含的内容
  • 使用案例
    • 执行SQL语句(创建数据表)
    • 查询一列数据
    • 更新数据表
    • 查询多列
    • 向数据表插入集合数据
    • XML配置多节点数据库和表

项目代码地址

https://github.com/soberqian/MySQLUtils

项目简介

本项目是基于package DbUtils编写的,DbUtils的地址为:
https://commons.apache.org/proper/commons-dbutils/

该项目提供了简单易用的数据库操作方法,其支持数据库的查询,更新和插入操作。支持XML配置多节点数据库,支持JavaBean操作Java对象。

依赖jar包下载

工程依赖的jar有:

     <dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.7</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.5.0</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><!-- https://mvnrepository.com/artifact/dom4j/dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><!-- https://mvnrepository.com/artifact/jaxen/jaxen --><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.6</version></dependency>

其中,dom4j和jaxen用于操作XML文件。

项目包含的内容


其中,MYSQLControl类提供了数据库配置,数据库的各种方法。db.xml为配置数据库XML文件。model包下面存放的是JavaBean,test包存放的使用案例。

如下,为MYSQLControl类的内容:

package com.db;import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;/*** We develop this tool based on the java package DbUtils.* https://commons.apache.org/proper/commons-dbutils/* * * It provides an easy-to-use interface for users to operating mysql database.* This tool supports XML database configuration and Java Bean.* * Function:  query, update and insert data* * @author: Yang Qian* emiail:qy20115549@126.com*/
public class MYSQLControl {static final Log logger = LogFactory.getLog(MYSQLControl.class);public DataSource ds;public QueryRunner qr;/*** the constructor* * @param connectURI* @param databaseName* @param userName* @param password* */public MYSQLControl(String connectURI, String databaseName, String userName, String password){ds = getDataSource("jdbc:mysql://" + connectURI +"/" + databaseName, userName, password);qr = new QueryRunner(ds);}/*** the constructor for xml* * @param connectURI* @param databaseName* @param userName* @param password* */public MYSQLControl(String node){SAXReader reader=new SAXReader();Document doc = null;try {doc = reader.read(new File("db.xml"));} catch (DocumentException e) {e.printStackTrace();}Element urlEle = (Element) doc.selectObject("/config/connectionInfo/" + node + "/url");Element usenameEle  = (Element)doc.selectObject("/config/connectionInfo/" + node + "/username");Element passwordEle  = (Element) doc.selectObject("/config/connectionInfo/" + node + "/password");String dbURL = urlEle.getStringValue(); String userName = usenameEle.getStringValue();  String password = passwordEle.getStringValue();  ds = getDataSource(dbURL, userName, password);qr = new QueryRunner(ds);}public static DataSource getDataSource(String connectURI,String userName, String password){BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUsername(userName);              ds.setPassword(password);             ds.setUrl(connectURI);return ds;}/*** update the table based on the sql* * @param sql* */public void executeUpdate(String sql){try {qr.update(sql);} catch (SQLException e) {logger.error(e);}}/*** get the result based on sql and JavaBean* * @param sql* @param type* */public  <T> List<T> getListInfoBySQL (String sql, Class<T> type ){List<T> list = null;try {list = qr.query(sql,new BeanListHandler<T>(type));} catch (SQLException e) {e.printStackTrace();}return list;}/*** get the one column result based on sql and id* * @param sql* @param id* */@SuppressWarnings({ "unchecked", "rawtypes" })public List<Object> getListOneBySQL (String sql,String id){List<Object> list = null;try {list = (List<Object>) qr.query(sql, new ColumnListHandler(id));} catch (SQLException e) {e.printStackTrace();}return list;}/*** insert list data to database* * @param sql* @param id* @throws SecurityException * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException * */public  <T> void insertListData(List<T> listData, String tableName) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {Object[][] params = new Object[listData.size()][listData.get(0).getClass().getDeclaredFields().length];for ( int i = 0; i < listData.size(); i++ ){T t = listData.get(i);java.lang.reflect.Field[] fields = t.getClass().getDeclaredFields();for (int j = 0; j < t.getClass().getDeclaredFields().length; j++) {Method m = t.getClass().getMethod("get" + fields[j].getName().substring(0, 1).toUpperCase() + fields[j].getName().substring(1));params[i][j] = (String) m.invoke(t);}}System.out.println(params.length);String value = "";for (int i = 0; i < listData.get(0).getClass().getDeclaredFields().length; i++) {value += "?,";}try {qr.batch("INSERT INTO " + tableName + " VALUES ("  + value.substring(0, value.length() - 1) + ")", params);System.out.println("insert finish!");} catch (SQLException e) {          }   }
}

使用案例

本人的数据库相关配置如下:


如下为数据表carsales的内容:

执行SQL语句(创建数据表)

如下程序为创新数据表的使用方式:

package com.test;import com.db.MYSQLControl;public class CreateTable {public static void main(String[] args) {MYSQLControl control = new MYSQLControl("127.0.0.1:3306", "crawler", "root", "112233");String sql = "CREATE TABLE newcarsales " +"(month varchar(50), " +"sales varchar(255), " + " PRIMARY KEY ( month ))"; control.executeUpdate(sql);}
}

执行该程序,可以看到成功创建了newcarsales表:

查询一列数据

package com.test;import java.util.List;import com.db.MYSQLControl;public class QueryOneColumn {public static void main(String[] args)  {MYSQLControl control = new MYSQLControl("127.0.0.1:3306", "crawler", "root", "112233");List<Object> list = control.getListOneBySQL("select month from carsales", "month");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).toString());}}
}

执行程序,可以输出如下结果:

更新数据表

package com.test;import com.db.MYSQLControl;public class CreateTable {public static void main(String[] args) {MYSQLControl control = new MYSQLControl("127.0.0.1:3306", "crawler", "root", "112233");String sql = "CREATE TABLE newcarsales " +"(month varchar(50), " +"sales varchar(255), " + " PRIMARY KEY ( month ))"; control.executeUpdate(sql);}
}

执行该程序,可以看到更新的结果。

查询多列

如果要查询多列,如month和sales,需要先创建JavaBean,如下的CarSaleModel类:

package com.model;public class CarSaleModel {private String month;private String sales;public String getMonth() {return month;}public void setMonth(String month) {this.month = month;}public String getSales() {return sales;}public void setSales(String sales) {this.sales = sales;}
}

如下为查询多列的程序:

package com.test;import java.util.List;import com.db.MYSQLControl;
import com.model.CarSaleModel;public class QueryMultColumn {public static void main(String[] args) {MYSQLControl control = new MYSQLControl("127.0.0.1:3306", "crawler", "root", "112233");List<CarSaleModel> listData = control.getListInfoBySQL("select month, sales from carsales", CarSaleModel.class);for (CarSaleModel model : listData) {System.out.println(model.getMonth() + "\t" + model.getSales());}}
}

执行程序,会在控制台输出如下结果:

向数据表插入集合数据

package com.test;import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import com.db.MYSQLControl;
import com.model.CarSaleModel;public class InsertListData {public static void main(String[] args) {MYSQLControl control = new MYSQLControl("127.0.0.1:3306", "crawler", "root", "112233");List<CarSaleModel> saleList = new ArrayList<CarSaleModel>();CarSaleModel model1 = new CarSaleModel();model1.setMonth("2007-01-01");model1.setSales("14834");CarSaleModel model2 = new CarSaleModel();model2.setMonth("2007-02-01");model2.setSales("9687");//add datasaleList.add(model1);saleList.add(model2);try {control.insertListData(saleList, "newcarsales");} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}

执行该程序,可以看到数据表中成功插入了两条数据:

XML配置多节点数据库和表

如下,通过db.xml配置了两个节点:

<?xml version="1.0" encoding="UTF-8"?>
<config><connectionInfo><node1><nodeName>node1</nodeName><url>jdbc:mysql://127.0.0.1:3306/crawler</url><username>root</username><password>112233</password></node1><node2><nodeName>node2</nodeName><url>jdbc:mysql://114.213.252.26:3306/crawler</url><username>root</username><password>112233</password></node2></connectionInfo>
</config>

如下,为使用方式:

package com.test;import java.util.List;import com.db.MYSQLControl;
import com.model.CarSaleModel;public class XMLMySQLDo {public static void main(String[] args) {MYSQLControl control = new MYSQLControl("node1");List<CarSaleModel> listData = control.getListInfoBySQL("select month, sales from carsales", CarSaleModel.class);for (CarSaleModel model : listData) {System.out.println(model.getMonth() + "\t" + model.getSales());}}
}

执行程序输出结果为:

Java下MySQL易用处理工具(支持XML/JavaBean)相关推荐

  1. Java+Swing+mysql仿QQ聊天工具

    Java+Swing+mysql仿QQ聊天工具 一.系统介绍 二.功能展示 1.用户登陆 2.好友列表 3.好友聊天 4.服务器日志 三.系统实现 四.其它 1.其他系统实现 2.获取源码 一.系统介 ...

  2. JAVA——Java操作MySQL数据库的简单工具类[CLASS:DatabaseUtil]

    预备知识 Java连接MySQL数据库 源代码 package club.zstuca.util;import java.sql.Connection; import java.sql.DriverM ...

  3. java下mysql连接配置文件_Java读取.properties配置文件并连接数据库

    1.读取配置文件 //Properties集合 流对象读取键值对 public static void getNum() throws Exception { Properties p=new Pro ...

  4. 20120520 Linux下mysql的自动备份工具

    文章摘自:http://hi.baidu.com/vb98/blog/item/2ed90cea835fa4cfd439c97f.html linux下的MySQL自动备份工具-第二版2011-10- ...

  5. Java+Swing+mysql学生信息管理系统

    Java+Swing+mysql学生信息管理系统 一.系统介绍 二.功能展示 1.管理员登陆 2.学生信息查询 3.学生信息添加 4.学生信息修改 5.删除 三.系统实现 1.StudentFrame ...

  6. 基于Java+Swing+mysql餐厅点餐管理系统

    基于Java+Swing+mysql餐厅点餐管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.用户注册(顾客) 3.顾客可以点餐 4.顾客可以查看订单信息 5.顾客可以修改个人信息 6.新增套餐 ...

  7. 基于Java+Swing+Mysql实现旅游管理信息系统

    基于Java+Swing+Mysql实现旅游管理信息系统 一.系统介绍 二.功能展示 1.登陆 2.注册 3.旅游信息查询 4.查看游行团信息 5.报名 6.报名信息管理 三.数据库 四.其它 1.其 ...

  8. 基于java+swing+mysql员工工资管理系统

    基于java+swing+mysql员工工资管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.员工主要功能 3.管理员主要功能 三.系统实现 1.StudentFrame .java 四.其它 ...

  9. Java+Swing+mysql员工工资管理系统

    Java+Swing+mysql员工工资管理系统 一.系统介绍 二.功能展示 1.主页 2.员工工资查询 3.员工工资添加 4.员工工资修改 5.员工工资删除 三.系统实现 1.salary.java ...

最新文章

  1. Ajax(5)UpdatePanel的使用方法
  2. 边工作边刷题:70天一遍leetcode: day 73
  3. 用ExtJs+Linq+Wcf打造简单grid
  4. 用 CSS实现Bubble提示框的两种方法
  5. C++ STL pair方法详解
  6. 声网 java app视频录制_java 声音的播放与录制
  7. 合并果子(贪心+优先队列)
  8. Java中如何使某个类的对象唯一性,只能创建一个对象
  9. android 竖屏优先,android 强制设置横屏 判断是横屏还是竖屏
  10. 矩阵的内积和外积,三向量混合积
  11. 商务云PHP网络验证系统,易如意PHP网络验证系统1.3【开源】+调用模块源码
  12. 天南星科系统发育及全基因组复制事件的研究取得新进展
  13. Linux系统入门学习
  14. 磨刀不误砍柴工—ElasticSearch的schema详解
  15. 同厂玩伴---鸭子兄传
  16. 深度学习平台demo(一)- C#如何调用python文件
  17. 计算机专业中agp是什么意思,计算机的主板,cpu,内存,显卡,硬盘的主要用途是什么?它们的单位都是什么意思?...
  18. vue mounted遇到的问题
  19. TWI-I2C学习详解
  20. audio设备--ASOC框架--PCM等接口分析

热门文章

  1. 科普文:为什么不能在服务器上 npm install ? #30
  2. 使用“时间机器”备份您的 Mac
  3. Java数组在内存中的分配
  4. BGP——BGP优化技术(总结+配置)
  5. 【C语言】创建一个函数,判断某一正整数是否为素数,并调用这个函数找出1000以内所有素数...
  6. 什么是IDE(集成开发环境)?
  7. linux向用户发送消息
  8. Git Stash解释:如何在Git中临时存储本地更改
  9. ansj 自定义 停用词_构造自定义停用词列表的快速提示
  10. 如何使用Docker Swarm管理更多容器