万能的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 ...
随机推荐
- typescript 入门
为什么要使用typescript? 出现拼写错误,可以立即指出错误. 出现模块引入错误,立即指出错误. 出现函数.变量类型错误,立即指出错误. 在react组件中制定好了基本的props和state之 ...
- security和oauth2.0的整合
security和oauth2.0的整合 之前已经介绍过security的相关的介绍,现在所需要做的就是security和oauth2.0的整合,在原有的基础上我们加上一些相关的代码;代码实现如下: ...
- Windows里安装wireshark或者ethereal工具(包括汉化破解)(图文详解)
不多说,直接上干货! https://www.wireshark.org/download.html 我这里,读取的是,来自于https://www.ll.mit.edu/ideval/data/19 ...
- 查看和修改mysql数据库的最大链接数据
通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...
- FocusBI:租房分析&星型模型
微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末 ...
- Nginx教程(7) 正向代理与反向代理【总结】
1.前言 最近工作中用到反向代理,发现网络代理的玩法还真不少,网络背后有很多需要去学习.而在此之前仅仅使用了过代理软件,曾经为了访问google,使用了代理软件,需要在浏览器中配置代理的地址.我只知道 ...
- [转]asp.net权限认证:摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...
- Mysql与InnoDB优化
Mysql可以从以下几个方面进行数据库优化: SQL及索引优化: sql优化: 优化count select count(*) ,count(id) from t; #count(*) 会包含null ...
- c#参数修饰符-ref
ref 关键字通过引用传递参数. 方法定义和调用方法必须显式使用ref关键字: 调用方法时参数必须初始化: 参数中可以声明多个ref修饰的参数. 例: public void UseRef( ref ...
- Spring MVC 实现Excel的导入导出功能(1:Excel的导入)
简介 这篇文章主要记录自己学习上传和导出Excel时的一些心得,企业办公系统的开发中,经常会收到这样的需求:批量录入数据.数据报表使用 Excel 打开,或者职能部门同事要打印 Excel 文件,而他 ...