`
xzj127
  • 浏览: 16008 次
  • 性别: Icon_minigender_1
  • 来自: 帝都火星村
社区版块
存档分类
最新评论

瞎改的东西

阅读更多

用Hibernate 的感觉 搞来搞去的东西太多了。

用Ibatis 的感觉 和Hibernate 差不多。

 

他们两个用的文件甚多...弄来弄去。太麻烦了,无聊时间写了个

支持多种形式操作的 JDBC 操作数据库的持久方法 

 

mport java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.xzj.common.DataBaseUtil;

/**
 * Support Map  String[] Object
 * 
 * 参数必须是#name#形式
 * 
 * 删除不支持多个相同的 ID 删除 如果要用只能用 String[] 形式传参
 * 
 * @author Administrator
 *
 */
public class JdbcAction implements Jdbc {
	private Connection con;
	private PreparedStatement ptmst;
	private ResultSet rs;
	
	public JdbcAction(){
		con=DBConnection.getConnection();
	}
	
	/**
	 * 直接执行 add,update,delete Method
	 * 
	 * @param sql
	 * @return Integer
	 */
	public int executeSQL(String sql){
		int rows=0;
		try {
			ptmst=con.prepareStatement(sql);
			rows=ptmst.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DataBaseUtil.close(con, ptmst);
		}
		return rows;
	}
	
	/**
	 * 带参数的处理的 add,update,delete Method
	 * @param sql
	 * @param obj
	 * @return Integer
	 */
	public int executeSQL(String sql,Object obj){
		int rows=0;
		try {
			con.setAutoCommit(false);
			rows=executeSql(sql,obj).executeUpdate();
			con.commit();
		} catch (SQLException e) {
			try {
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally{
			DataBaseUtil.close(con, ptmst);
		}
		return rows;
	}
	
	public Object selectObjResult(String sql,Object param,Object obj){
		List<Object> list=selectResult(sql,param,obj);
		return  list.size()==0?null:list.get(0);
	}
	
	public List<Object> selectResult(String sql,Object param,Object obj){
		List<Object> list=new ArrayList<Object>();
		try {
			rs=executeSql(sql,obj).executeQuery();
			/**
			 * explain:
			 * get select result column name
			 */
			ResultSetMetaData rsmd=rs.getMetaData();
			int columnCount=rsmd.getColumnCount();
			String [] column=new String[columnCount];
			for(int k=1;k<=columnCount;k++){
				column[k-1]=rsmd.getColumnName(k);
			}
			/**
			 * get select data 
			 * 
			 */
			Object objSelect=null;
			while(rs.next()){
				try {
					objSelect=obj.getClass().newInstance();
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				}
				list.add(instantiationObjectData(objSelect,rs,column));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DataBaseUtil.close(con, ptmst, rs);
		}
		
		return list;
	}
	
		
	private Object getObjectValue(String columName,Object obj){
		String methodName="";
		Object rs=null;
		try {
			for(int k=0;k<obj.getClass().getDeclaredMethods().length;k++){
				methodName=obj.getClass().getDeclaredMethods()[k].getName();
				if(methodName.substring(0, 3).equals("get")&&methodName.substring(3, methodName.length()).toLowerCase().equals(columName.toLowerCase())){
					rs=(Object) obj.getClass().getDeclaredMethods()[k].invoke(obj,new Object[]{});
					break;
				}
			}
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch(Exception e){
			e.printStackTrace();
		}
		methodName=null;
		return rs;
	}
	
	private static Object instantiationObjectData(Object obj,ResultSet rs,String [] column){
		String methodName="";
		for(int k=0;k<obj.getClass().getDeclaredMethods().length;k++){
			methodName=obj.getClass().getDeclaredMethods()[k].getName();
			try {
				if(methodName.substring(0, 3).equals("set")){
					for(int n=0;n<column.length;n++){
						if(column[n].toLowerCase().equals(methodName.substring(3, methodName.length()).toLowerCase())){
							obj.getClass().getDeclaredMethods()[k].invoke(obj,rs.getObject(column[n]));
							break;
						}
					}
				}
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch(Exception e){
				e.printStackTrace();
			}
		}
		methodName=null;
		return obj;
	}
	
	private PreparedStatement executeSql(String sql,Object obj){
		//获得参数
		String [] setParam=param(sql);
		for(int k=0;k<setParam.length;k++){
			sql=sql.replace("#"+setParam[k]+"#", "?");
		}
		try{
			ptmst=con.prepareStatement(sql);
			if(null!=obj){
				if(obj instanceof String[]){
					String [] paramArray=(String []) obj;
					for(int k=0;k<setParam.length;k++){
						ptmst.setObject(k+1,paramArray[k]);
					}
				}else if(obj instanceof int []){
					int [] paramArray=(int []) obj;
					for(int k=0;k<paramArray.length;k++){
						ptmst.setObject(k+1,paramArray[k]);
					}
				}else if(obj instanceof Map){
					Map map=(Map)obj;
					for(int k=0;k<setParam.length;k++){
						ptmst.setObject(k+1, map.get(setParam[k]));
					}
				}else {
					for(int k=0;k<setParam.length;k++){
						ptmst.setObject(k+1, getObjectValue(setParam[k],obj));
					}
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} 
		return ptmst;
	}
	
	private String [] param(String sql){
		String [] sqlSet=sql.trim().split("#");
		String [] setParam=new String[sqlSet.length/2];
		for(int k=0;k<setParam.length;k++){
			setParam[k]=sqlSet[(k+1)*2-1];
		}
		return setParam;
	}
}

  

那个数据库连接没写上去。。

 不知道效率怎么样。没测试过。。里面还有好多需要优化。代码有些还不是很规范。。

 

 

下面是我用到的一些基本测试。

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.xzj.domain.Student;

public class JdbcTest {
	
	public static void testSave(){
		Jdbc jdbc=JdbcUtil.JdbcAction();
		Map map=new HashMap();
		map.put("name", "周星驰");
		map.put("sex", "女");
		map.put("age", new Date());
		Student stu=new Student();
		stu.setName("冰山");
		stu.setSex("女");
		stu.setAge(new Date());
		String sql="insert into Student(name,sex,age) values(#name#,#sex#,#age#)";
		jdbc.executeSQL(sql, map);
	}
	
	public static void testUpdate(){
		Jdbc jdbc=JdbcUtil.JdbcAction();
		Map map=new HashMap();
		map.put("id", 2);
		map.put("name", "周星驰");
		map.put("sex", "男");
		map.put("age", new Date());
		String sql="update student set name=#name#,sex=#sex#,age=#age# where id=#id#";
		jdbc.executeSQL(sql, map);
	}
	
	public static void testDelete(){
		Jdbc jdbc=JdbcUtil.JdbcAction();
		String [] sql={
					"delete from Student where id=#id#",
					"delete from Student where id=#id# or id=#id#",
					"delete from Student where id=#id# or id=#id#  or id=#id#"};
		int []p={21,22,23};
		jdbc.executeSQL(sql[2], p);
	}
	
	public static void testSelect(){
		Jdbc jdbc=JdbcUtil.JdbcAction();
		Student stu=new Student();
		stu.setId(1001);
		stu.setName("测试");
		stu.setSex("女");
		stu.setAge(new Date());
		List<Object> list=jdbc.selectResult("select id,name,sex,age from Student",null,stu);
		System.out.println("编号\t姓名\t性别\t年龄");
		System.out.println("---------------------------------");
		for(int k=0;k<list.size();k++){
			stu=(Student) list.get(k);
			System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getSex()+"\t"+stu.getAge());
		}
	}
		
	public static void main(String [] args){
		//testSave();
		//testUpdate();
		//testDelete();
		testSelect();
		
	}
}

 

  

import java.util.Date;

public class Student {
	private Integer id;
	private String  name;
	private String  sex;
	private Date    age;
	private String  born;
	
	public String getBorn() {
		return born;
	}
	public void setBorn(String born) {
		this.born = born;
	}
	public Date getAge() {
		return age;
	}
	public void setAge(Date age) {
		this.age = age;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

 

 

 

希望各位能给出指点。。修改一些不必之处。。

分享到:
评论

相关推荐

    TestYourVPS:余晖脉脉的瞎改版,改自https

    TestYourVPS余晖脉脉的瞎改版,改自 的VPS一键测试脚本和 的Superbench,看看就好,诸位大佬们不要介意哈

    谷歌警告三星:不要瞎改 Linux 内核代码

    Google 警告三星:不要瞎改 Linux 内核代码,会影响 Android 安全。 这到底是怎么一回事呢? 据 ZDNet 报道,根据 Google Project Zero (GPZ)的说法,三星试图通过修改内核代码来阻止对 Galaxy 智能手机的攻击,结果...

    闪瞎眼睛的一个程序.cpp

    先打开再关闭把眼睛闪瞎

    最新版瞎玩AI中控插件08-16版本新增快手无人直播

    支持抖音(娱乐&电商&团购)无人直播、淘宝无人直播、快手(娱乐&电商&团购)无人直播、小红书无人直播、Tiktok无人直播、京东无人直播等多达12个平台的无人直播。全网支持平台最多的AI智能中控平台,全网率先开放Gpt...!

    win10修改后的字体文件

    原始分辨率下文字太小,眼睛估计得看瞎 放大dpi后,这问题,那问题,好多 百度知道,淘宝,这网页文字颜色也非常的浅,看着眼睛很累人 看了半天是字体若的祸 暂时发现Arial与Tahoma字体,在dpi放大后,会出现这...

    行业制造-电动装置-LED模组瞎灯侦测电路、LED模组及其瞎灯侦测方法.zip

    "行业制造-电动装置-LED模组瞎灯侦测电路、LED模组及其瞎灯侦测方法.zip"这个压缩包文件包含了一个关于LED模组瞎灯侦测的重要主题,这涉及到如何检测并处理LED模组中的故障灯珠,以确保整体照明效果的稳定性和可靠性...

    瞎写.c

    瞎写.c

    自己瞎编的迷之元胞自动机代码

    这个是我参加2017数模,自己瞎编的一个具有空间连续性的仿元胞自动机的鬼东西。。。。。为了实现了交通流模拟中的安全距离和啥的,里面有交通流换道等。。。因为我自己改得也很混乱,大家有什么问题可以问我哦~ 欢迎...

    简单的Unity字体批量替换

    直接扔项目Assets下随便文件夹里,在Tools窗口下找到Text变化工具就是了 选择Canvas组件或者要改的字体父物体,拖拽上去获取所有子物体...改项目字体时闲麻烦瞎写的,轻喷,免费送了,注释详细编写简单,可以自己再改改

    闪瞎你的眼 bat代码 炫酷代码

    瞎做的,文字内容可以自己改。对了打开这个千万不能盯着屏幕看很长时间。我是个编程小白,还请各位大佬多多关照。

    JAVA固定资产管理系统 不要下啊,瞎传的

    网上书店销售系统,有用户注册、登陆、购买、查询等;还有管理员的添加、删除、修改、书籍等等 不要下啊,瞎传的

    七只瞎老鼠PPT模板.pptx

    七只瞎老鼠PPT模板.pptx

    瞎写着玩的MyRequest.rar

    瞎写着玩的MyRequest.rar

    cocos2dx 聊天框,带换行光标

    由于支持换行,而且需要带光标,找了好久也没有现成的代码可用,也只能自己瞎改。 光标的位置计算,采用了3个CCTextfiled作为计算参考,而且在输入每个字符的时候都会创建,效率自己不会很高。 代码是改的,很垃圾。 ...

    2023新版视频通话照妖镜多模板.zip

    2023新版视频通话照妖镜多模板 ... ...否则生成的链接是不能进行拍照的 新增邮箱通知功能(方便第一时间查看照片) live/images/FM 文件内图片为随机背景封面 ...可自行ps增加背景封面图片 ...请勿瞎改

    2023新版视频通话照妖镜多模板开源源码.zip

    2023新版视频通话照妖镜 多模板需开启https (ssl证书协议,百度ssl,宝塔自带免费)注意:请开启强制https://(ssl协议)否则生成的链接是不能进行拍照的新增邮箱通知功能(方便第一时间查看照片)live/...请勿瞎改

    瞎爬爬 网易云的评论_最基础.py

    瞎爬爬 网易云音乐评论

    自己瞎写的仿QQ程序

    【标题】:“自己瞎写的仿QQ程序” 这个标题暗示了一个个人项目,可能是一个初学者或者爱好者尝试模仿腾讯QQ的功能而创建的一个简易通讯软件。QQ是中国非常流行的一款即时通讯工具,它提供了聊天、文件传输、群组...

    doapkdoapk反编译工具

    也有程序直接把文字写在java程序了,所以在smali目录下也可能会有一些,smali目录的.smali文件是对java文件的解析,不能瞎改,汉化的话要注意,搜索整个目录,找到你要汉化的文字,替换成就行,注意,里面的参数别瞎改,不然...

Global site tag (gtag.js) - Google Analytics