不依赖任何jar,原生实现mysql通用增删改查操作.
开门见山,上代码(注:以下代码中所有的Object参数均为对应数据表的javaBean实体类)
`//首先建立连接(重点在后面,这里简单写一下)
public Connection getConn() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
/**
* 查询操作,这个重点在对获取的到的结果集进行解析,转换成List
* */
public List select(Object obj,Connection conn) throws Exception{
List list = new ArrayList();
Class cla = obj.getClass();
//得到类名 作为表名查询
String claname = cla.getSimpleName();
//得到属性数组
Field[] fieldArr = cla.getDeclaredFields();
String sql = "SELECT * FROM "+claname+"";
Statement st = conn.prepareStatement(sql);
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
//调用无参构造方法。实例化对象obj
Object realObj= cla.newInstance();
for(int i = 0;i<fieldArr.length;i++){
//拿到每个属性,每个属性作为一个Field类的对象
Field field = fieldArr[i];
field.setAccessible(true);
Class fieldClass = field.getType();
//设置属性值
setValue(fieldClass, field, realObj, rs);
}
list.add(realObj);
}
return list;
}
/**
* 查询赋值,通过此方法解析ResultSet将字段值赋值到对象的属性中
* */
public void setValue(Class fieldClass,Field field,Object obj,ResultSet rs) throws Exception {
//如下为常用数据类型,如果不够用,手动添加即可
if(fieldClass.toString().equals("int")){
field.set(obj, rs.getInt(field.getName()));
}else if(fieldClass.toString().equals("long")) {
field.set(obj, rs.getLong(field.getName()));
}else if(fieldClass.toString().equals("float")) {
field.set(obj, rs.getFloat(field.getName()));
}else if(fieldClass.toString().equals("double")) {
field.set(obj, rs.getDouble(field.getName()));
}else if(fieldClass.toString().equals("boolean")) {
field.set(obj, rs.getBoolean(field.getName()));
}else if(fieldClass.toString().equals("class java.lang.String")){
field.set(obj,rs.getString(field.getName()));
}else if(fieldClass.toString().equals("class java.util.Date")){
field.set(obj,rs.getDate(field.getName()));
}
}
/**
* 插入操作,重点在于sql语句拼接
* */
public int add (Object obj,Connection conn) throws Exception{
Class cla = obj.getClass();
//得到类名
String claname = cla.getSimpleName();
//得到属性数组
Field[] fieldArr = cla.getDeclaredFields();
String attributeName = "";
String value = "";
for(int i =0;i<fieldArr.length;i++){
Field field = fieldArr[i];
field.setAccessible(true);
Class fieldClass = field.getType();
attributeName = attributeName+field.getName()+",";
value = getValueSql(fieldClass, field, value, obj);
}
//去掉末位逗号
attributeName = attributeName.substring(0,attributeName.length()-1);
value = value.substring(0, value.length()-1);
String sql = "INSERT INTO "+claname+"("+attributeName+" ) VALUES ("+value+")";
Statement st = conn.prepareStatement(sql);
return st.executeUpdate(sql);
}
/**
* 插入操作,获取对象属性值,转换拼接成sql语句
* */
public String getValueSql(Class fieldClass,Field field,String value,Object obj) throws Exception {
//如下为常用数据类型,如果不够用,手动添加即可
if(fieldClass.toString().equals("class java.lang.String")){
value = value+"'"+(String)field.get(obj)+"',";
}else if(fieldClass.toString().equals("int")){
value = value +(Integer)field.get(obj)+",";
}else if(fieldClass.toString().equals("long")){
value = value +(Long)field.get(obj)+",";
}else if(fieldClass.toString().equals("float")){
value = value +(Float)field.get(obj)+",";
}else if(fieldClass.toString().equals("double")){
value = value +(Double)field.get(obj)+",";
}else if(fieldClass.toString().equals("boolean")){
value = value +(Boolean)field.get(obj)+",";
}else if(fieldClass.toString().equals("class java.util.Date")){
value = value +"'"+formatTimeString(((Date)field.get(obj)).getTime() / 1000)+"',";
}
return value;
}
/**
* 时间类型转换
* */
public static String formatTimeString(long time) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
date.setTime(time * 1000);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int iDstOffset = cal.get(Calendar.DST_OFFSET);
if (iDstOffset > 0) {
date.setTime(time * 1000 - iDstOffset);
}
return fmt.format(date);
}
/**
* 更新操作,重点在sql语句的拼接
* */
public int update(Object obj,String where,Connection conn) throws Exception{
Class cla = obj.getClass();
Field[] fieldArr = cla.getDeclaredFields();
String valueSql = "";
for(int i =0;i<fieldArr.length;i++){
Field field = fieldArr[i];
field.setAccessible(true);
Class fieldClass = field.getType();
valueSql = getValueSql(valueSql, field, fieldClass, obj);
}
valueSql = valueSql.substring(0, valueSql.length() - 1);
String sql = "UPDATE "+cla.getSimpleName() +" SET "+valueSql+where;
Statement st = conn.prepareStatement(sql);
return st.executeUpdate(sql);
}
/**
* 更新操作,获取对象属性值,拼接sql
* */
public String getValueSql(String valueSql,Field field,Class fieldClass,Object obj) throws Exception {
valueSql = valueSql+field.getName()+"=";
if(fieldClass.toString().equals("class java.lang.String")){
valueSql = valueSql+"'"+(String)field.get(obj)+"',";
}else if(fieldClass.toString().equals("int")){
valueSql= valueSql +(Integer)field.get(obj)+",";
}else if(fieldClass.toString().equals("long")){
valueSql= valueSql +(Long)field.get(obj)+",";
}else if(fieldClass.toString().equals("float")){
valueSql= valueSql +(Float)field.get(obj)+",";
}else if(fieldClass.toString().equals("double")){
valueSql= valueSql +(Double)field.get(obj)+",";
}else if(fieldClass.toString().equals("boolean")){
valueSql= valueSql +(Boolean)field.get(obj)+",";
}else if(fieldClass.toString().equals("class java.util.Date")){
valueSql= valueSql +"'"+formatTimeString(((Date)field.get(obj)).getTime() / 1000)+"',";
}
return valueSql;
}
/**
* 删除操作, 这个就是简单封装了个方法
* */
public int delete(Connection conn,String tableName,String keyName,int keyValue) throws SQLException {
String sql = "DELETE from "+tableName+" where "+keyName+"="+keyValue;
PreparedStatement st = conn.prepareStatement(sql);
return st.executeUpdate();
}`
以上就是所有代码,本人是在维护一个很老的项目时用到过,所以顺便整理出来.需要的客官拿走即用.
第一次发帖,如有错误的地方请大家帮忙指出来,望大家多多包涵
转载于:https://my.oschina.net/u/3299589/blog/3049523