JDBC 使用common-dbutiles
一:第三方jar mysql-connector-java-5.1.45-bin.jar,需要关注的核心类:
1、DbUtils----操作数据库的连接注册和释放。
2:、QueryRunner---对数据库进行操作的类,比如增删改查等。
3、ResultSetHandler--- 对查询结果集的处理的核心类。
代码:
package mysql_comm_demo; import Jdbc_Test.jdbcutils;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner; import java.sql.Connection;
import java.sql.SQLException; public class comm_test { public static void main(String ...args)throws SQLException{
db_Test.con_mysql();
}
}
class db_Test{
private static final Connection con= jdbcutils.getCon();
static void con_mysql() throws SQLException{
/*
用QueryRunner来进行操作数据库。sql用字符串占位符,在使用调用queryrunner的update(Connection con,String sql,Object ...para)
根据动态传入的para 替换sql中占位符,其中para可以是数组进行操作。
*/
QueryRunner op_my=new QueryRunner();
String sql="insert into system_user (nid,username,password) values(?,?,?)";
Object[] info={,"oop",""};
int row=op_my.update(con,sql,info);
DbUtils.closeQuietly(con);
/*
通过判断row的大小,来判断执行是否成功。
*/
if(row>){
System.out.print(String.format("执行信息如下:%s","执行成功!" ));
}
} }
二:结果集处理:
ResultSetHandler:
四种方法:1、ArrayHandler:获取查询的结果第一个结果。
2、ArrayListHandler:获取查询结果所有结果的数组的list集合。
3、BeanHandler:获取查询结果的中的第一个javabean的对象。
4、BeanListHandler:获取查询结果的所有的javabean的集合。
5、MapHandler:获取查询第一个结果,并是Map类型,Map<String,Object>因为列名称的类型是String而列的具体类型未知。
6、MapListHandler:获取查询的结果集,是一个List集合,集合的类型为:Map<String,Object>
其中方法2和4是比较重要。
javabean:
是一个java特有的数据类型,把数据封装成对象,需要有以下特点:
1、要有空参数的构造方法。
2、要有getXxx和setXxxx方法。
package mysql_comm_demo; public class Sys_User {
/*
javabean:
1、需要有空参数的构造器。
2、有getxxx和setxx方法。
*/
public Sys_User(){};
private int nid;
private String username;
private String password;
/*
需要注意的时候get或者set 后面的字段首字母大写。
*/
public int getNid(){
return this.nid;
}
public int setNid(int nid){
this.nid=nid;
return this.nid;
}
public String getUsername(){
return this.username;
}
public void setUsername(String user){
this.username=user;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
} @Override
public String toString() {
return this.nid+" "+this.username+" "+this.password;
}
}
package mysql_comm_demo; import Jdbc_Test.*;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*; import java.sql.Array;
import java.sql.Connection; import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.Map; public class comm_Res {
public static void main(String ... args)throws SQLException{
//select_My.ex_Han();
//select_My.ex_Arlist();
//select_My.ex_Beahan();
//select_My.ex_Bean_List();
//select_My.co_List();
//select_My.sca_H();
select_My.m_H();
//select_My.m_Lh();
}
} class select_My{
private static final Connection con=jdbcutils.getCon();
private static final String sql="SELECT * FROM system_user ";
static void ex_Han()throws SQLException{
QueryRunner qr=new QueryRunner();
/*
通过queryrunner调用query方法,对数据库进行查询。
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
该方法返回是泛型。类型不确定由处理结果集ResultSetHandler<T>来确定该方法返回的类型。
ResultSetHandler<T>是接口,改参数传递是实现该接口的实现类。ArrayHandler或者ArrayHandelerList等。
String sql:查询的sql语句用? 占位。
Object... params:sql语句的替代参数。
ArrayHandler:单个数组集。
ArrayHandelerList:是数组级套数组集。 第一种方法:
ArrayHandler 方法返回查询结果的第一个列的数组对象。无论你查询多少个结果,只返回第一个结果。
ResultSetHandler implementation that converts a ResultSet into an Object[]. This class is thread safe.
数据格式:['root',123]
*/
ArrayHandler ah=new ArrayHandler();
Object[] obj=qr.query(con,sql,ah);
for(Object i:obj){
System.out.print(i);
}
}
static void ex_Arlist()throws SQLException{
/*
第二种: ArrayListHandler
返回查询结果的数组集的List集合
数据形式:[Objects[]]
*/
QueryRunner qr=new QueryRunner();//执行数据平台。
ArrayListHandler arl =new ArrayListHandler();
List<Object[]> res=qr.query(con,sql,arl);
if(res.size()!=){
for(Object[] obj:res){
for (Object i:obj){
System.out.print(i+"\t");
}
System.out.print("\n");
}
} }
static void ex_Beahan()throws SQLException{
/*
第三种方法是:JAVABEAN
返回查询结果的第一行的数据的javabean对象。
构造方法:
BeanHandler(Class<? extends T> type)
参数:传入具有JAVABEAN的特点的class文件。
参数格式:classname.class
返回类型为:classname
*/
QueryRunner qr=new QueryRunner();
BeanHandler<Sys_User> beh=new BeanHandler<>(Sys_User.class);//注意beanhandler是泛型类Class BeanHandler<T>
Sys_User sys=qr.query(con,sql,beh);
System.out.print(sys);
}
static void ex_Bean_List() throws SQLException{
/*
第三种方法:Class BeanListHandler<T>
ResultSetHandler implementation that converts a ResultSet into a List of beans. This class is thread safe.
参数和上面一致。
返回值:List集合的classname object集合。
*/
QueryRunner qr=new QueryRunner();
BeanListHandler<Sys_User> bl=new BeanListHandler<>(Sys_User.class);
List<Sys_User> sys=qr.query(con,sql,bl);
for(Sys_User s:sys){
System.out.println(s);
}
}
static void co_List() throws SQLException{
/*
方法:ColumnListHandler 指定返回指定列的值。
构造器:分无参数和有参数
无参数:默认返回的是第一列的值。
有参数:可以指定传入列的名字(字符串),指定返回列的值,由于不确定类型,所以在返回结果的时候,
使用List<Object>形式。
*/
ColumnListHandler<Object[]> col=new ColumnListHandler<>("username");
QueryRunner qr=new QueryRunner();
List<Object[]> qr_obj=qr.query(con,sql,col);
System.out.print(qr_obj);
}
static void sca_H()throws SQLException{
/*
方法:ScalarHandler
该方法返回单一数据。所以在查询单一数据的时候可以用这个。比如说查执行语句的条数。
空参构造方法。
如果清楚返回类型可以进行指定。
参数构造方法也可以指定列的名字,需要字符串。返回只是一个数据而不是一个集合。
ResultSetHandler implementation that converts one ResultSet column into an Object. This class is thread safe.
*/
String sql="select count(*) from system_user";
ScalarHandler<Object> sc=new ScalarHandler<>();
QueryRunner qr=new QueryRunner();
Object obj=qr.query(con,sql,sc);
System.out.print(obj);
}
static void m_H()throws SQLException{
/*
方法:MapHandler 返回的是单个map类型,只返回当前结果的第一个。
ResultSetHandler
implementation that converts aResultSet
into aList
ofMap
s. This class is thread safe.
注意返回的类型是:Map<String,Object> 因为key是列的名字。
而列的类型不确定所以是Object
*/
MapHandler mh=new MapHandler();
QueryRunner qr=new QueryRunner();
Map<String,Object> ma=qr.query(con,sql,mh);
System.out.print(ma.values());
System.out.print(ma.keySet());
}
static void m_Lh()throws SQLException{
/*
方法:MapHandler 返回的是单个map类型,返回的是所有的列(map)的List集合。
ResultSetHandler implementation that converts a ResultSet into a List of Maps. This class is thread safe.
注意返回的类型是:Map<String,Object> 因为key是列的名字。
而列的类型不确定所以是Object
*/
MapListHandler ml=new MapListHandler();
QueryRunner qr=new QueryRunner();
List<Map<String,Object>> rest=qr.query(con,sql,ml);
for(Map<String,Object> obj:rest){
Collection<Object> val=obj.values();
for(Object a: val){
System.out.print(a+"\t");
}
System.out.print("\n");
}
}
}
Jdbcutils工具类:
package Jdbc_Test; import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties; public class jdbcutils {
private jdbcutils(){};
private static Connection con;
public static void main(String[] args)throws IOException{ }
public static Connection getCon(){
/*
通过读取properites配置文件来获取数据库连接信息。
通过类加载器,读取当前父目录的配置文件。通过class.getClassLoader方法getResourceAstream获取配置文件的
内容,然后通过IO流处理properites文件获取对应的key值。
配置文件便于灵活配置数据库信息。
*/
InputStream inp=jdbcutils.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro=new Properties();
try {
pro.load(inp);
}catch (Exception ex){
throw new RuntimeException(ex+"读取配置文件失败!");
}
try {
String Drverclass = pro.getProperty("Driver.class");
String url = pro.getProperty("Url");
String username = pro.getProperty("username");
String password = pro.getProperty("password");
Class.forName(Drverclass);
con = DriverManager.getConnection(url, username, password);
}catch (Exception ex){
throw new RuntimeException(ex+"数据库连接失败!");
}
return con;
}
public static void cls_re(Connection con, Statement sta, ResultSet re){
if(con!=null){
try{
con.close();
}catch (Exception ex){}
}
if(sta!=null){
try{
sta.close();
}catch (Exception ex){}
}
if(re!=null){
try{
re.close();
}catch (Exception ex){}
} }
public static void cls_re(Connection con, Statement sta){
if(con!=null){
try{
con.close();
}catch (Exception ex){}
}
if(sta!=null){
try{
sta.close();
}catch (Exception ex){}
} }
}
JDBC 使用common-dbutiles的更多相关文章
- java线程阻塞问题排查方法
我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题.今天终于了了这个心结.把解决过程总结下和大家分享. 首先用jstack命令打出这个进程的全部线程堆栈.拿到线程dump文件之后,搜索 ...
- Cause: net.sf.cglib.beans.BulkBeanException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
2017-03-13 15:40:15,003 ERROR [com.hisense.hitv.service.dotexc.impl.DotExcPolicyServiceImpl.updateD ...
- SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: InlineParameterMap
<select id="getResByName" resultClass="Resources" parameterClass="java.l ...
- JDBC的批处理操作三种方式 pstmt.addBatch()
package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...
- JDBC API Description
package java.sql description What the JDBCTM 4.2 API Includes Versions What the java.sql Package Con ...
- Sqoop:Could not load db driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver
Sqoop version:1.4.6-cdh Hadoop version:2.6.0-cdh5.8.2 场景:使用Sqoop从MSSqlserver导数据 虽然1.4.6的官网说 Even if ...
- JDBC数据库连接池技术
在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管 ...
- Weblogic常见故障常:JDBC Connection Pools(转)
WebLogic Server中数据库连接池是一个经常出问题的地方,总结一下出问题的原因和解决办法. 一.数据库连接泄漏 此类问题一般都是由于开发人员没有正确关闭数据库连接造成的.比如使用完Conne ...
- Java数据库——JDBC 2.0操作
可滚动的结果集 让结果集滚动起来 //================================================= // File Name : JDBC20_demo //-- ...
- 怎么安装MYSQL5.0的JDBC驱动
1.下载mysql for jdbc driver. http://dev.mysql.com/downloads/connector/j/3.1.htmlMySQL Connector/J is ...
随机推荐
- Python rest-framework 中类的继承关系(as_view)
一. 背景 最近几天一直在学习restful framework的源代码,用户请求的流程,在路由系统这块遇到一个疑问,关于类的继承关系,当请求进来到路由这块,执行as_view()方法的时候,为什么会 ...
- js-权威指南学习笔记16
1.元素的style属性可以用来设置样式,但是不适合用来查询样式(只能查询到内联样式). 2.CSS里的层叠指示了应用于文档中任何给定元素的样式规则是各个来源的层叠效果:Web浏览器的默认样式表.文档 ...
- 微信获取openId
router.beforeEach(function(to, from, next){ //中间页等待跳转 if(to.meta.requireCheck=="WaitLogin" ...
- 转 mysqli 事务常用方法
原文:mysqli 事务常用方法 1. //打开(true)或关闭(false)本次数据库连接的自动命令提交事务模式 //参数如果设置为 FALSE,则表示关闭 auto-commit.如果设置为 T ...
- Modify Dokuwiki Email Template 修改 Dokuwiki 邮件模板
Email Notification Templates There are two places to modify 1) log in as Admin -> configuration ...
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- ARCGIS知乎上的好文章
http://zhihu.esrichina.com.cn/?/feature/ArcGISAndroidDevNote ArcGIS知乎上有哪些干货可以推荐? http://zhihu.esrich ...
- chrome 浏览器调用 ocx 插件(二)
原文:http://blog.csdn.net/wangchao1988ok/article/details/46561537 chrome 版本:43.0.2357.124 之前写过关于 chrom ...
- android中的ellipsize
textview中有个内容过长加省略号的属性,即ellipsize 用法如下: 在xml中 android:ellipsize = "end" 省略号在结尾 android:ell ...
- Error:Execution failed for task ':app:preDebugAndroidTestBuild'.错误解决
在新建布局文件的时候,页面显示: design editor is unavailable until a successful build(设计编辑器不可用,直到成功创建.) 细看下面还有一行错误: ...