简单工具类:

public class JDBCSimpleUtils {
/**
* 私有构造方法
*/
private JDBCSimpleUtils() {
} /**
* 驱动
*/
public static String driver = null;
/**
* 连接字符串
*/
public static String url = null;
/**
* 用户名
*/
public static String user = null;
/**
* 密码
*/
public static String password = null; /**
* 读取配置文件, 并将读取到的值赋值给变量.
*/
public static void readConfig() {
try {
//读取properties配置文件给变量赋值
Properties pp = new Properties();
pp.load(new FileReader("day04_classTest\\src\\config.properties"));
url = pp.getProperty("url");
user = pp.getProperty("username");
driver = pp.getProperty("driver");
password = pp.getProperty("password");
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 静态代码块
* 变量赋值
* 并注册驱动
*/
static {
try {
//变量赋值
readConfig();
//注册驱动
Class.forName(driver);
} catch (Exception e) {
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
e.printStackTrace();
}
} /**
* 获取Connection
*
* @return 数据库连接
*/
public static Connection getConnection() { try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException ex) {
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
ex.printStackTrace();
return null;
}
} public static Statement getStatement(Connection conn) {
if (conn == null) {
return null;
}
try {
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
// 设置数据集可以滚动,可以更新
} catch (SQLException ex) {
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
release(conn);
}
return null;
} /**
* 获取一个带参数的 PreparedStatement
* 该 PreparedStatement 已经设置数据集 可以滚动,可以更新
*
* @param conn 数据库连接
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return 如果获取失败将返回 null,调用时记得检查返回值
*/
public static PreparedStatement getPreparedStatement(Connection conn, String cmdText, Object... cmdParams) {
if (conn == null) {
return null;
}
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
int i = 1;
for (Object item : cmdParams) {
pstmt.setObject(i, item);
i++;
}
} catch (SQLException e) {
e.printStackTrace();
release(conn, pstmt);
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
}
return pstmt;
} /**
* 释放资源
*
* @param conn Connection
* @param stat Statement
* @param rs ResultSet
*/
public static void release(Connection conn, Statement stat, ResultSet rs) {
try {
if (rs != null) {
rs.close();
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
} finally {
try {
if (stat != null) {
stat.close();
stat = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
} finally {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
}
}
}
} /**
* 释放资源
*
* @param conn Connection
* @param stat Statement
*/
public static void release(Connection conn, Statement stat) {
try {
if (stat != null) {
stat.close();
stat = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
} finally {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
}
}
} /**
* 释放资源
*
* @param conn Connection
*/
public static void release(Connection conn) {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
//写入日志
//Logger.WriteLog(JDBCUtils.class.getName(),"");
}
}
}

简单工具类的应用:

    /**
* 增删改的方法
*
* @param sql
* @param obj
*/
private static void executeNoQuery(String sql, Object... obj) {
//获取Connection
Connection conn = JDBCSimpleUtils.getConnection();
//获取PreparedStatement
PreparedStatement ps = JDBCSimpleUtils.getPreparedStatement(conn, sql, obj);
try {
int i = ps.executeUpdate();
if (i > 0) {
System.out.println("ok");
} else {
System.out.println("error");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCSimpleUtils.release(conn, ps);
}
} /**
* 查询返回ResultSet
*
* @param sql
*/
private static void getResultSet(String sql) {
//获取Connection
Connection conn = JDBCSimpleUtils.getConnection();
//获取Statement
Statement stat = JDBCSimpleUtils.getStatement(conn);
ResultSet rs = null;
try {
rs = stat.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("uid");
String name = rs.getString("uname");
String psw = rs.getString("psw");
System.out.println(id + "--" + name + "--" + psw);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCSimpleUtils.release(conn, stat, rs);
}
}

java基础之JDBC三:简单工具类的提取及应用的更多相关文章

  1. 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

    ---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...

  2. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  3. 2015年11月26日 Java基础系列(三)ThreadLocal类初级学习

    序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronize ...

  4. DbUtils是Apache出品一款简化JDBC开发的工具类

    DbUtils     - DbUtils是Apache出品一款简化JDBC开发的工具类     - 使用DbUtils可以让我们JDBC的开发更加简单     - DbUtils的使用:       ...

  5. Java基础-IO流对象之字符类(FileWrite与FileReader)

    Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...

  6. java基础(29):JDBC、DBUtils

    1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...

  7. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  8. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  9. Java基础-IO流对象之File类

    Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...

随机推荐

  1. Android实现网易新闻客户端效果

    下面来简单实现一下网易新闻客户端左右切换的效果,当然实际项目上肯定不能这样写,还有很多需要优化的地方. activity_main.xml [html] view plaincopyprint? &l ...

  2. GeoWebCache的配置与使用

    最近在做一个开源GIS的demo的工作,工作中涉及到了地图瓦片,选取的开发环境是geoserver+openlayers,那么地图瓦片自然而然也就使用geowebcache,geowebcache就相 ...

  3. HAWQ取代传统数仓实践(七)——维度表技术之维度子集

    有些需求不需要最细节的数据.例如更想要某个月的销售汇总,而不是某天的数据.再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等.此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度 ...

  4. linux中的vim编辑器的使用

    vim的三种模式: 常规模式(命令模式)也是默认模式,从其它模式进行命令模式按esc i 在光标前插入文本 o 命令是指在当前行下方插入新行 dd 是删除光标所在的整个一行 yy 是在光标所在整个放入 ...

  5. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境

    Duplication Database 介绍 Duplicate database可以按照用途分为2种: duplicate database(复制出一个数据库) duplicate standby ...

  6. Python基本特殊方法之__new__

    __new__()和不可变对象 __new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性 例:为f ...

  7. LeetCode Subarray Product Less Than K

    原题链接在这里:https://leetcode.com/problems/subarray-product-less-than-k/description/ 题目: Your are given a ...

  8. php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决

    php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,Class.forName("com.mysql.jdbc.Driver&q ...

  9. mysql 执行批量的sql

    <?xml version="1.0" encoding="utf-8" ?> <dbconfig> <!-- 数据库驱动 --& ...

  10. Linux LED字符设备驱动

    // 申请IO资源 int gpio_request(unsigned gpio, const char *label); // 释放IO资源 void gpio_free(unsigned gpio ...