万能的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 ...
随机推荐
- 各种height/width总结
CSS盒模型是比较复杂的,尤其是当页面中有滚动条时,仅仅通过css来操作高度宽度是不够的,幸运的是Javascript提供了不少这样的接口.Javascript中clientHeight / clie ...
- Ubuntu14.04下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)(在线或离线)
第一步: Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一) 第二步: Cloudera Manager安装之时间服务器和时间客户端(Ub ...
- echart 时间轴、以及y轴值过大但是变化不大显示感觉不出变化的问题+弹出框拖动div事件
1.时间轴 echart 提供了一种图表,如果x轴是一个时间范围,并且是连续的,如果用传统的数据驱动会很慢,所以用时间轴的方式 function initCurve(_data){ var resul ...
- Zepto自定义模块打包构建
文章转自 http://www.chengxuyuans.com/web_technology/zeptojs-build.html zepto.js 是个好东西,遵循 jQuery API,但比 j ...
- 【LeetCode题解】144_二叉树的前序遍历
目录 [LeetCode题解]144_二叉树的前序遍历 描述 方法一:递归 Java 代码 Python 代码 方法二:非递归(使用栈) Java 代码 Python 代码 [LeetCode题解]1 ...
- Kernel的IIC驱动分析
涉及到的文件: drivers/i2c/i2c-core.c drivers/i2c/i2c-dev.c drivers/i2c/busses/i2c-imx.c 等等 在下面分析的代码中,不想关或者 ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
- [javaSE] IO流(管道流)
之前我们使用io流,都是需要一个中间数组,管道流可以直接输入流对接输出流,一般和多线程配合使用,当读取流中没数据时会阻塞当前的线程,对其他线程没有影响 定义一个类Read实现Runable接口,实现r ...
- 九、sparkStream的scala示例
简介 sparkStream官网:http://spark.apache.org/docs/latest/streaming-programming-guide.html#overview spark ...
- MySQL Community Server 5.5.56 ZIP Archive 绿色解压版 window安装步骤
MySQL Community Server 5.5.56 ZIP Archive 绿色解压版 window安装步骤 首先 准备好启动配置文件my.ini [mysqld] #设置字符集为utf8 ...