写个自己用的jdbc 简单框架

1.通过xml配置查询条件

<select>
         <select_web value="select * from web t where t.id=? and t.name=?" >
             <param value="1">id</param>
             <param value="2">name</param>
         </select_web>
    </select>

加一点命名规则例如我数据库了里面的字段是 leave_msg

                                       bean的字段就是leaveMsg

复杂的类型还没弄,只搞了个字符串

2.通过反射就可以统统执行了update、delete、insert了

/**
	 * 普通的sql执行 判断sql的标准是是数字 默认最大参数个是小于10
	 * 
	 * @param sqlMsg
	 * @param obj
	 */
	public boolean execSql(Map<String, String> sqlMsg, Object obj) {
		if (null != sqlMsg) {
			String sql = "";
			// 获取sql  重新填充值
			for (String s : sqlMsg.keySet()) {
				if (!s.matches("\\d{1}")) {
					sql = s;
					sqlMsg.remove(s);// 移除这个key值
					//break;
				}else{
					if(null==obj)continue;
					String key=s;
					String value=sqlMsg.get(s);
					try {
						Field field=obj.getClass().getDeclaredField(s);//属性权威私有
						value=field.get(obj).toString();
						sqlMsg.put(key, value);
					} catch (Exception e) {
						logger.info("执行sql:"+sql+"参数装配的时候,异常了。"+e);
					} 
				}
			}
			
			if(null==sql||"".equals(sql)){
				logger.info("执行sql为空!");
				return false;
			}
			
            int count=-1;
            PreparedStatement psState=null;
			try {
			    psState = this.con.prepareStatement(sql);
				logger.info("执行的SQL为:"+sql);
                int countParam=sqlMsg.size();
                for(int i=1;i<=countParam;i++){
                	psState.setString(i, sqlMsg.get(String.valueOf(i)));
                }
                count=psState.executeUpdate();
                con.commit();//事务提交
                psState.close();
			} catch (SQLException e) {
				try {
					con.rollback(); //回滚
					if(null!=psState)
						psState.close();//执行关闭
				} catch (SQLException e1) {
					logger.info("事务回滚失败了" + e);
				}
				logger.info("在执行sql的时候异常了\n" + e);
			}
            return count==-1?false:true;
		}
		return false;
	}

3.通过发射装配下select

if(rs.next()){ //有数据
                	ResultSetMetaData msd=rs.getMetaData();
                	for(int i=0;i<msd.getColumnCount();i++){
                		String columnName=msd.getColumnName(i);
                		int type=msd.getColumnType(i);
                		switch(type){
                		            case Types.VARCHAR:
                		            	                break;
                		            case Types.DATE:
                		            	                break;
                		             
                		}
                	}
                }

 

可以获取查询列的属性,名称,类型-》去装配这个obj

单条查询;

多条根据查询的结果可以反复组装

简单的数据类型应该还是好组装的,复杂类型有点困难了这里也不考虑哈哈

4.做一个简单的池子

1.池子在一个list里面;放着数据库链接的对象,对象有上面的工具类

private String username;
	private String password;
	private String url;

	private String num;//编号
	private Connection con;
	private int status; // 0:free 其他 被使用

2.初始化的时候实例这个list;

3.获取 数据库链接对象 更具状态来

4.不够用就会涉及到添加进这个池子,并且操作完要摧毁的操作了(新添加是是从新实例化还是,克隆一个类的?)

5.够用直接通过状态获取(用完了该状态);

判断直接通过编号来

转载于:https://my.oschina.net/findurl/blog/305183

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值