简单工具类:

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. 抓https包

    一.charles抓https 1.打开charles,打开Help--SSL Proxy--Install Charles Root Certificate,charles安装证书,傻瓜式安装即可 ...

  2. linux多线程全面解析

      引入:     在传统的Unix模型中,当一个进程需要由另一个实体执行某件事时,该进程派生(fork)一个子进程,让子进程去进行处理.Unix下的大多数网络服务器程序都是这么编写的,即父进程接受连 ...

  3. 在linux中使用shell来分析统计日志中的信息

    在运维工作中,要经常分析后台系统的日志,通过抓取日志中的关键字信息,对抓取结果进行统计,从而为监控结果提供基础数据.下面的shell演示了如何从大量的日志中取得想要的统计结果.其中展示了各种有趣的命令 ...

  4. CTF学习资料总结

    网络攻防大作业学习方向思路 一直对CTF比赛有参与的兴趣,但由于课程比较多,一直没有足够的时间系统的去了解与训练.所以我想利用接下来的几周时间对CTF比赛经行练习.并找到自己所擅长或感兴趣的方向深入研 ...

  5. Consul做服务发现

    使用Consul做服务发现的若干姿势 https://www.cnblogs.com/bossma/p/9756809.html 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后 ...

  6. avalon 总线时序关系理解

    对于读,等待时间指的是从端口捕获数据的时间相对于read信号的延时 建立时间指的是read信号相对于chipselect和addr的延时时间 对于写,等待时间指的是相对于非等待情况下各个信号的延时时间 ...

  7. 洛谷 P1312 Mayan游戏

    题解:搜索+模拟 剪枝: 最优性剪枝:x从小到大,y从小到大,第一次搜到的就是字典序最小 的最优解. 最优性剪枝:把一个格子和左边格子交换,和左边格子和右边格 子交换是等价的,显然让左边格子和右边交换 ...

  8. bootstrap table 兼容ie8 -- refreshOptions

    今天项目使用 bootstrap table 在ie8下发现 方法 refreshOptions 报错. 经过调试监控发现错误如下: 153 行 代码 Object.getOwnPropertyNam ...

  9. shell中把大写字母转换成小写字母

    shell中把大写字母转换成小写字母 参考:http://www.jb51.net/article/40257.htm echo "AABBCC" | tr "[:upp ...

  10. 嵌入式媒体处理(EMP)中的编码和解码

    我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件.如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注FP ...