万能的JDBC工具类。通过反射机制直接简单处理数据库操作
package com.YY.util; 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.SQLException;
import java.sql.Statement;
import java.util.Properties; public class BaseConnection {
private static String conURL = "";
private static String cname = ""; private static String dbA = "";
private static String dbpassword = ""; static
{
try {
//获取外部配置的数据库链接信息
InputStream ips =BaseConnection.class.getClassLoader().getResourceAsStream("MyJDBC.properties");
Properties props = new Properties();
try {
props.load(ips);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ips.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conURL = props.getProperty("conURL");
cname = props.getProperty("cname");
dbA = props.getProperty("dbA");
dbpassword = props.getProperty("dbpassword");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(cname);
conn = DriverManager.getConnection(conURL, dbA, dbpassword);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void closeRes(Connection conn, PreparedStatement ps){
try {
if ( conn != null ) {
conn.close();
} if ( ps != null ) {
ps.close();
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
public static void closeRes(Connection conn, PreparedStatement ps,ResultSet rs){
try {
if ( conn != null ) {
conn.close();
} if ( ps != null ) {
ps.close();
} if ( rs != null ) {
rs.close();
}
} catch ( Exception e ) {
e.printStackTrace();
}
} } package com.YY.util; import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList; public class BaseDAO { //万能的获取全部内容
public static ArrayList getList(Class c1){
ArrayList ar = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "Select * from "+ c1.getSimpleName();
Field[] fi = c1.getDeclaredFields();
try{
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object ob = c1.newInstance();//实例化类对象
for(Field ff :fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}
ar.add(ob);
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
}
return ar;
} //万能的获取ID主键的一条数据。
public static Object getObById(Class c1,int id){
Object ob = null;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
Field[] fi = c1.getDeclaredFields();
String sql = "Select * from "+ c1.getSimpleName()+" where "+ fi[0].getName()+" = "+id;
try{
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
ob = c1.newInstance();//实例化类对象
for(Field ff :fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
}
return ob;
} //万能的获取Where 条件后 的数据。
public static ArrayList getList(Class c1,String whereSql){
ArrayList ar = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "Select * from "+ c1.getSimpleName() +" "+ whereSql;
Field[] fi = c1.getDeclaredFields();
try{
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object ob = c1.newInstance();//实例化类对象
for(Field ff :fi){
ff.setAccessible(true);
ff.set(ob, rs.getObject(ff.getName()));
}
ar.add(ob);
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps, rs);
}
return ar;
} //插入的万能方法。
public static boolean Insert(Object ob){
boolean f = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class c1 = ob.getClass();
Field[] fi = c1.getDeclaredFields();
StringBuffer Sql = new StringBuffer();
StringBuffer Sql1 = new StringBuffer();
Sql.append("insert into ").append(c1.getSimpleName()).append(" (");
for(int i =1 ;i<fi.length;i++){
fi[i].setAccessible(true);
Sql.append(fi[i].getName());
Sql1.append("?");
if(i!= fi.length -1){
Sql.append(",");
Sql1.append(",");
}
}
Sql.append(") ").append("values (").append(Sql1).append(");");
try{
System.out.println(Sql.toString());
ps = conn.prepareStatement(Sql.toString());
for(int i =1;i<fi.length;i++){
fi[i].setAccessible(true);
ps.setObject(i, fi[i].get(ob));
}
int a = ps.executeUpdate();
if(a>0){
f = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return f;
} //万能更新
public static boolean update(Object ob){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class c1 = ob.getClass();
Field[] fi = c1.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("update ").append(c1.getSimpleName()).append(" set ");
for(int i = 1; i<fi.length;i++){
sb.append(fi[i].getName());
sb.append(" = ? ");
if(i!= fi.length -1){
sb.append(" , ");
}
}
sb.append(" where ");
sb.append(fi[0].getName()).append(" =?");
try{
System.out.println(sb.toString());
ps = conn.prepareStatement(sb.toString());
for(int i=1;i<fi.length ; i++){
fi[i].setAccessible(true);
ps.setObject(i, fi[i].get(ob));
}
fi[0].setAccessible(true);
ps.setObject(fi.length, fi[0].get(ob));
int a = ps.executeUpdate();
if(a>0){
b=true;
}
}catch(Exception e){
e.printStackTrace();
}
return b;
} //万能删除
public static boolean delete(Class c1 ,int id){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = c1.getDeclaredFields();
String Sql = "Delete from "+c1.getSimpleName()+" Where "+fi[0].getName()+" = ?";
try{
ps = conn.prepareStatement(Sql);
ps.setObject(1, id);
int a = ps.executeUpdate();
if(a>0){
b=true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b;
} //万能删除
public static boolean delete(Class c1 ,String WhereSql){
boolean b = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = c1.getDeclaredFields();
String Sql = "Delete from "+c1.getSimpleName()+" "+WhereSql;
try{
ps = conn.prepareStatement(Sql);
int a = ps.executeUpdate();
if(a>0){
b=true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
BaseConnection.closeRes(conn, ps);
}
return b;
} }
万能的JDBC工具类。通过反射机制直接简单处理数据库操作的更多相关文章
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- JDBC第三篇--【事务、元数据、改造JDBC工具类】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- JDBC工具类完整版!
package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; impor ...
随机推荐
- [DPF] DPF 常见的问题
问题一: SQL6031N Error in the db2nodes.cfg file at line number "5". Reason code "12&qu ...
- 思维导图让 Spring MVC 不再难懂
spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器 ...
- 对Table_locks_immediate值的理解
Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,如果Table_locks_immediate / Table_locks_wa ...
- https证书pfx 生成 pem,crt,key
(1)将.pfx格式的证书转换为.pem文件格式: openssl pkcs12 -in xxx.pfx -nodes -out server.pem (2)从.pem文件中导出私钥server ...
- 多线程编程(一)-Semaphore(信号量)的使用
Semaphore的介绍 单词Semaphore的中文含义就是信号.信号系统的意思,此类的主要作用就是限制线程并发的数量. 举个例子,一个屋子里有10个人,但只有一个窄门可以出去,这个窄门一次最多只能 ...
- 图解ARP协议(五)免费ARP:地址冲突了肿么办?
一.免费ARP概述 网络世界纷繁复杂,除了各种黑客攻击行为对网络能造成实际破坏之外,还有一类安全问题或泛安全问题,看上去问题不大,但其实仍然可以造成极大的杀伤力.今天跟大家探讨的,也是技术原理比较简单 ...
- nodejs学习笔记二(get请求、post请求、 querystring模块,url模块)
请求数据 前台:form.ajax.jsonp 后台:接受请求并返回响应数据 前台<= http协议 =>后台 常用的请求的方式: 1.GET 数据在url ...
- ListView和BaseAdapter
参考资料:http://www.runoob.com/w3cnote/android-tutorial-listview.html <LinearLayout xmlns:android=&qu ...
- SQL Serever学习12——数据库的备份和还原
公司的服务器奔溃了,事先没相应的保护措施,使得公司遭到了较大损失,为了以后不再出现类似事件,在系统中引入备份机制,使得数据库被破坏后损失降到最低. 数据的导出和导入 数据转换服务 数据转换服务DTS( ...
- PHP学习1——快速入门
主要内容: 搭建PHP开发环境 第一个helloworld程序 PHP(Hypertext Preprocessor)PHP超文本预处理程序,是一种嵌入HTML的脚本语言,运行在服务器. 搭建PHP开 ...