Java下MySQL易用处理工具(支持XML/JavaBean)
本文作者:合肥工业大学 电子商务研究所 钱洋 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)相关推荐
- Java+Swing+mysql仿QQ聊天工具
Java+Swing+mysql仿QQ聊天工具 一.系统介绍 二.功能展示 1.用户登陆 2.好友列表 3.好友聊天 4.服务器日志 三.系统实现 四.其它 1.其他系统实现 2.获取源码 一.系统介 ...
- JAVA——Java操作MySQL数据库的简单工具类[CLASS:DatabaseUtil]
预备知识 Java连接MySQL数据库 源代码 package club.zstuca.util;import java.sql.Connection; import java.sql.DriverM ...
- java下mysql连接配置文件_Java读取.properties配置文件并连接数据库
1.读取配置文件 //Properties集合 流对象读取键值对 public static void getNum() throws Exception { Properties p=new Pro ...
- 20120520 Linux下mysql的自动备份工具
文章摘自:http://hi.baidu.com/vb98/blog/item/2ed90cea835fa4cfd439c97f.html linux下的MySQL自动备份工具-第二版2011-10- ...
- Java+Swing+mysql学生信息管理系统
Java+Swing+mysql学生信息管理系统 一.系统介绍 二.功能展示 1.管理员登陆 2.学生信息查询 3.学生信息添加 4.学生信息修改 5.删除 三.系统实现 1.StudentFrame ...
- 基于Java+Swing+mysql餐厅点餐管理系统
基于Java+Swing+mysql餐厅点餐管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.用户注册(顾客) 3.顾客可以点餐 4.顾客可以查看订单信息 5.顾客可以修改个人信息 6.新增套餐 ...
- 基于Java+Swing+Mysql实现旅游管理信息系统
基于Java+Swing+Mysql实现旅游管理信息系统 一.系统介绍 二.功能展示 1.登陆 2.注册 3.旅游信息查询 4.查看游行团信息 5.报名 6.报名信息管理 三.数据库 四.其它 1.其 ...
- 基于java+swing+mysql员工工资管理系统
基于java+swing+mysql员工工资管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.员工主要功能 3.管理员主要功能 三.系统实现 1.StudentFrame .java 四.其它 ...
- Java+Swing+mysql员工工资管理系统
Java+Swing+mysql员工工资管理系统 一.系统介绍 二.功能展示 1.主页 2.员工工资查询 3.员工工资添加 4.员工工资修改 5.员工工资删除 三.系统实现 1.salary.java ...
最新文章
- Ajax(5)UpdatePanel的使用方法
- 边工作边刷题:70天一遍leetcode: day 73
- 用ExtJs+Linq+Wcf打造简单grid
- 用 CSS实现Bubble提示框的两种方法
- C++ STL pair方法详解
- 声网 java app视频录制_java 声音的播放与录制
- 合并果子(贪心+优先队列)
- Java中如何使某个类的对象唯一性,只能创建一个对象
- android 竖屏优先,android 强制设置横屏 判断是横屏还是竖屏
- 矩阵的内积和外积,三向量混合积
- 商务云PHP网络验证系统,易如意PHP网络验证系统1.3【开源】+调用模块源码
- 天南星科系统发育及全基因组复制事件的研究取得新进展
- Linux系统入门学习
- 磨刀不误砍柴工—ElasticSearch的schema详解
- 同厂玩伴---鸭子兄传
- 深度学习平台demo(一)- C#如何调用python文件
- 计算机专业中agp是什么意思,计算机的主板,cpu,内存,显卡,硬盘的主要用途是什么?它们的单位都是什么意思?...
- vue mounted遇到的问题
- TWI-I2C学习详解
- audio设备--ASOC框架--PCM等接口分析