java基础之JDBC三:简单工具类的提取及应用
简单工具类:
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三:简单工具类的提取及应用的更多相关文章
- 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API
---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...
- Java基础---泛型、集合框架工具类:collections和Arrays
第一讲 泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...
- 2015年11月26日 Java基础系列(三)ThreadLocal类初级学习
序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronize ...
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- Java基础-IO流对象之File类
Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...
随机推荐
- ubuntu 上的ruby安装
安装 rbenv git clone git://github.com/sstephenson/rbenv.git ~/.rbenv # 用来编译安装 ruby git clone git://git ...
- ORM 关键
1. 老师的增删改查 1. teacher_obj.cid.add(*[1, 2, 3]) 添加(必须打散) 2. teacher_obj.cid.set([1, 2, 3]) 设置(不用打散) 2. ...
- c++ 基础知识 0001 const 知识1
1. C++ const用法 尽可能使用const 2. C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的.如果在编程中确实有某个值保持不变,就 ...
- 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)
//扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...
- Visual Studio 2013 帮助文档 安装以及如何直接打开
1.在线安装VS2013的MSDN帮助文档 在利用VS2013集成开发环境(IDE)开发程序代码时会经常用到帮助文档,但默认情况下在帮助文档是在线以网页的形式呈现的,当我们不方便上网时就不能够查看帮助 ...
- BZOJ5337 [TJOI2018]str
题意 小豆参加了生物实验室.在实验室里,他主要研究蛋臼质.他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的.每一个氨基酸都可能有a种碱基序 列si_j 构成.现在小豆有一个碱基串s,小豆想知道在这个碱 ...
- Shell编程(二)——shell的基础知识及常用命令
shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?匹配一个字符 5 输入输出重定向 ...
- The type org.springframework.context.ConfigurableApplicationContext cannot be resolved问题解决
在搭建maven项目的时候,有时候会报这样的问题. The type org.springframework.context.ConfigurableApplicationContext cannot ...
- myeclipse按.自动提示方法
第一步:菜单Window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打勾 ...
- Ambari client
在研究如何修改YARN的资源池的时候,发现了Hortwork在github上面开源了一个Ambari Client: https://github.com/apache/ambari/tree/tru ...