万能的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 ...
随机推荐
- (转)架构师之DNS实战CentOS7VSCentOS6
原文:https://www.abcdocker.com/abcdocker/1298 CentOS7上使用bind9搭建DNS主从服务器-----http://blog.51cto.com/yich ...
- 如何阅读复杂的C类型声明
阅读复杂的C类型声明,通常采用右左法则,也就是Clockwise/Spiral Rule (顺时针/螺旋法则). 本文将首先介绍工具(cdecl)(个人比较偏好使用工具提高学习和工作效率),然后中英文 ...
- JQuery Div scrollTop ScrollHeight
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop.scrollLeft.scrollHeight.其中 scrollHeight 属性,互联网上几乎搜 ...
- [转]MAC:删除终端默认前缀的计算机名
MAC:删除终端默认前缀的计算机名 1.打开终端 输入 sudo vi /etc/bashrc,提示输入密码就是计算机的密码. 2.点击i将编辑模式改成insert修改文档,使用#注释PS1=’\h: ...
- R语言数据重塑cbind+rbind+merge+ melt+cast
R语言中的数据重塑是关于变化的数据分为行和列的方式.大多数R地数据处理的时候是通过将输入的数据作为一个数据帧进行.这是很容易提取一个数据帧的行和列数据,但在某些情况,当我们需要的数据帧的格式是不同的来 ...
- 203_Removed-Linked-List-Elements
目录 203_Removed-Linked-List-Elements Description Solution Java solution 1 Java solution 2 Python solu ...
- Spring注解_详解
@Autowired 注释 将 @Autowired 注释标注在成员变量上 import org.springframework.beans.factory.annotation.Autowire ...
- SQL Serever学习16——索引,触发器,数据库维护
sqlserver2014数据库应用技术 <清华大学出版社> 索引 这是一个很重要的概念,我们知道数据在计算机中其实是分页存储的,就像是单词存在字典中一样 数据库索引可以帮助我们快速定位数 ...
- jquery里判断数组内是否包含了指定的值或元素的方法
本文讲的是在jquery里,如何判断一个数组里是否包含了指定的值,变量,或其它对象元素的方法. 在jquery里,我们可以用$.inArray来判断一个数组里是否包含了指定的值或其它对象元素,来看一个 ...
- MySQL---2、安装与部署
1.MySQL下载 MySQL版本的选择MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.MySQL Enterprise Edition 企业版本,需付费,可以 ...