一:第三方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 a ResultSet into a List of Maps. 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的更多相关文章

  1. java线程阻塞问题排查方法

    我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题.今天终于了了这个心结.把解决过程总结下和大家分享. 首先用jstack命令打出这个进程的全部线程堆栈.拿到线程dump文件之后,搜索 ...

  2. 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 ...

  3. SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: InlineParameterMap

    <select id="getResByName" resultClass="Resources" parameterClass="java.l ...

  4. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  5. JDBC API Description

    package java.sql description What the JDBCTM 4.2 API Includes Versions What the java.sql Package Con ...

  6. 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 ...

  7. JDBC数据库连接池技术

    在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管 ...

  8. Weblogic常见故障常:JDBC Connection Pools(转)

    WebLogic Server中数据库连接池是一个经常出问题的地方,总结一下出问题的原因和解决办法. 一.数据库连接泄漏 此类问题一般都是由于开发人员没有正确关闭数据库连接造成的.比如使用完Conne ...

  9. Java数据库——JDBC 2.0操作

    可滚动的结果集 让结果集滚动起来 //================================================= // File Name : JDBC20_demo //-- ...

  10. 怎么安装MYSQL5.0的JDBC驱动

    1.下载mysql for jdbc driver.   http://dev.mysql.com/downloads/connector/j/3.1.htmlMySQL Connector/J is ...

随机推荐

  1. git常用命令和场景

    总结: git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase orig ...

  2. AGC009:Eternal Average

    传送门 好神啊 直接考虑一棵 \(n+m\) 个叶子的 \(k\) 叉树,根结点权值为 \(\sum_{i\in m}(\frac{1}{k})^{deep_i}\) 对于一个 \(deep\) 的序 ...

  3. Eclips 快捷键设置

  4. webapp开发绝对定位引发的问题

    最近做了一个webapp 需求是要滑动页面翻页,我使用了大量绝对定位 当遇到输入框时,在部分手机上发现了问题.虚拟键盘收回时,整个body全部下移了,经过多次测试, 发现是fixed布局的音乐按钮造成 ...

  5. maven问题总结

    1.maven下载jar包速度慢 1.maven下载jar包速度慢(解决办法) 现在maven项目非常流行,因为它对jar实行了一个非常方便的管理,我们可以通过在pom.xml文件中做对应的配置即可将 ...

  6. Sql Server中的谓词和运算符

    谓词和运算符配合使用是我们得到理想数据的最佳途径. 一.浅谈谓词 谓词的概念:一个运算结果为True.False或Unknown的逻辑表达式.它的运用范围有:where子句.Having子句.Chec ...

  7. asp.net 對象圖解

  8. 如何利用RMAN Debug和10046 Trace来诊断RMAN问题?

         在做Support的这些年,我很大的收获是掌握了许多troubleshooting问题的方法和工具,对于每一类问题,都可以大体归类出一些诊断方法.无论问题多么复杂,像扒洋葱一样,一层层去掉无 ...

  9. 定制controller转场动画

    定制controller转场动画 从iOS7开始就可以自由定制控制器间的转场动画了,以下实例描述最简单的定制方式,达到的效果如下所示: 为了实现这个效果需要这么多的文件-_-!!!! RootView ...

  10. 微信小程序 取随机数

    第一思路 如:现在要从50<  . =<100内取一个随机数: ran.Next(1,50)生成的是1-50的随机数+50 结束 第二思路 Math.random()的取值范围是: 0&l ...