对 JDBC 做一个轻量封装,待完善。。。
对 JDBC 做一个轻量地封装,顺便复习,熟悉sql,io,util,lang.Reflect等包的使用,泛型的使用,待完善。。。
package com.webproj.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Properties;
//用来获取数据库连接,PreparedStatement处理器对象,ResultSet结果集对象以及ResultSetMeataData对象等。
public class DBTools {
//因为是工具类,所以变量及方法全部静态
private static Connection conn=null;//数据库连接
private static PreparedStatement pStmt=null;//预处理器
private static ResultSet rs=null;//数据集
private static ResultSetMetaData metadata=null;//数据集中的元数据,包含列名,列的数据类型等等
private static String driver=null,url=null,user=null,password=null;//驱动名,数据库url,数据库登陆用户名,密码
private static String propertyFile="jdbc.properties";//存放driver,url,user,password的配置文件。
//类一加载,则开始读取Property配置文件并加载驱动。
static{
InputStream in=DBTools.class.getClassLoader().getResourceAsStream(propertyFile);
Properties pro=new Properties();
try {
pro.load(in);
driver=pro.getProperty("driver");
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取数据库连接
public static Connection getConn(){
try {
conn=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//因为经常要获取 PreparedStatement对象,所以把获取该对象的方法抽取出来方便复用。
public static PreparedStatement getPStmt(String sql){
try {
pStmt=getConn().prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pStmt;
}
//将 PreparedStatement参数赋值抽离出来,因为经常用到
public static void setObjParameters(PreparedStatement pStmt,Object[] parameters){
for(int i=0;i<parameters.length;i++){
try {
pStmt.setObject(i+1, parameters[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static int execUpdate(PreparedStatement pStmt){
int rowCount=0;
try {
rowCount=pStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return rowCount;
}
//封装 DML 操作包括 INSERT,UPDATE 返回影响数据表行数
public static int execDML(String sql,Object[] parameters){
int rowCount=0;
pStmt=getPStmt(sql);
setObjParameters(pStmt,parameters);
rowCount=execUpdate(pStmt);
return rowCount;
//发现将方法封装起来,复用性可以提高。
}
//把获取 ResultSet 方法抽离出来,便于复用
public static ResultSet getResultSet(PreparedStatement pStmt){
try {
rs=pStmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//获取 查询的 count 数
public static int getRowCount(String sql,Object[] parameters){
int rowCount=0;
setObjParameters(pStmt,parameters);
rs=getResultSet(pStmt);
try {
while(rs.next()){
rowCount=rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return rowCount;
}
public static void main(String[] args){
Connection conn=getConn();
if(conn!=null){
System.out.println("获取数据库连接成功!");
}
}
}
对 JDBC 做一个轻量封装,待完善。。。的更多相关文章
- vue-concise-slider 一个轻量的vue幻灯片组件
vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...
- Day.js 是一个轻量的处理时间和日期的 JavaScript 库
Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...
- Nancy总结(一)Nancy一个轻量的MVC框架
Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ...
- 自己写一个轻量的JqueryGrid组件
接触mvc不久,突然没有了viewstate和服务端控件处处都觉得不顺手,很多在webform时不必要考虑的问题都出现在眼前,这其中分页时查询条件保持的问题又是最让我头疼的事情,权衡再三,决定用aja ...
- 在项目管理中如何保持专注,分享一个轻量的时间管理工具【Flow Mac版 - 追踪你在Mac上的时间消耗】
在项目管理和团队作业中,经常面临的问题就是时间管理和优先级管理发生问题,项目被delay,团队工作延后,无法达到预期目标. 这个仿佛是每个人都会遇到的问题,特别是现在这么多的内容软件来分散我们的注意力 ...
- 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器
一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...
- 使用Hexo建立一个轻量、简易、高逼格的博客
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_93 在之前的一篇文章中,介绍了如何使用Hugo在三分钟之内建立一个简单的个人博客系统,它是基于go lang的,其实,市面上还有一 ...
- BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)
开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有 ...
- Cardinal:一个用于移动项目开发的轻量 CSS 框架
Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...
随机推荐
- 清理ms sql server 大日志文件数据
1.手动分离数据库: 2.手动删除日志文件: 3.重新生成日志文件: CREATE DATABASE FMIS0 ON (FILENAME = 'E:\FMIS0_DATA\FMIS0-Date') ...
- JavaScript几种类工厂实现原理剖析
PS:本文参考了司徒正美的<JavaScript框架设计>,以及许多其它的书籍和网络文章,感谢作者们分享了这么好的学习资源!关于JS的类和继承的原理,见:JavaScript里的类和继承文 ...
- HDU-2711 Lost Cows
Lost Cows Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Web---创建Servlet的3种方式、简单的用户注册功能
说明: 创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式. 上篇博客地址:http://blog.csdn.net/qq_26525215 ...
- hdoj 5443 The Water Problem【线段树求区间最大值】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5443 刷道水题助助兴 #include<stdio.h> #include<stri ...
- Linux下多任务间通信和同步-信号
Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...
- 【LeetCode】Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- 第一次JAVA基础考试后的反思
今天进行了第一次JAVA基础考试,考查了课本上前面三章和方法的知识,基本没有涉及到数组.通过这次的考试,暴露了自己在学习中的很多问题. 机试题是编写一个学员状态转换器,主要运用的是选择语句和方法,而没 ...
- QinQ封装及终结详解
以下内容摘自正在当当网.京东网.卓越网.互动出版网预售,即将正式发售的<华为交换机学习指南>一书(全书近千页).本书是由华为官方授权,国内第一本,也是唯一一本华为交换机权威学习指南,是华为 ...
- 导出Unity场景为配置文件
在处理很多人参与的项目时,很多时候在操作场景时,可能会牵扯到场景修改的冲突问题,这种时候,我们可以将场景以配置文件的形式存储下来(cocos的场景.android的view保存思想),可以采用json ...