一:第三方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. java网络编程(UDP详解)

    UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...

  2. sql中 设置区分大小写

    CI 指定不区分大小写,CS 指定区分大小写alter table 表名 alter column 字段 nvarchar(100) collate chinese_prc_cs_as --区分大小写 ...

  3. Keras vs. PyTorch

    We strongly recommend that you pick either Keras or PyTorch. These are powerful tools that are enjoy ...

  4. Reducing and Profiling GPU Memory Usage in Keras with TensorFlow Backend

    keras 自适应分配显存 & 清理不用的变量释放 GPU 显存 Intro Are you running out of GPU memory when using keras or ten ...

  5. Office - Excel 2013

    1. 在使用TODAY()时需要注意格式,比如,如果系统区域是中国,那么格式为2015/7/28,如果在单元格中设置了其它格式(比如美国格式 3/24/2015),则可能无法比较: 2. $表示cel ...

  6. Android 后台线程,timertask实现定期更新时间

    简述:这是一类定时功能的原型,用来在后台线程中运行一些定时的服务,比如定时修改时间 知识点: 1. Android多线程的消息通信(handler) 2. Java中时间的获取,以及String的格式 ...

  7. Android Studio 使用Intent实现页面的跳转(带参数)

    不管是在APP,还是在网站中,页面之间的跳转都是很常见的,本文主要讲一下在APP中,如何通过Intent实现页面的跳转. 不带参数: 写在MainActivity页面的代码: Intent inten ...

  8. vmware centos 安装

    一.分区 一块硬盘主分区+扩展分区最多只能有4个,其中扩展分区最多只能有1个.扩展分区不能写入数据,只能包含逻辑分区.这些都不是linux的限制,而是硬盘结构的限制. 分区号 第一种分区法: |--- ...

  9. Linux 环境下为VirtualBox安装增强功能

    VirtualBox安装CentOS后,再安装增强功能就可以共享文件夹.粘贴板以及鼠标无缝移动,主要步骤如下: 1.yum -y update 2.yum -y install g++ gcc gcc ...

  10. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络. 本教程中的示例假设 VM 将要托管包含数据库后端的 Web ...