自定义数据库小框架使用元数据

6 篇文章 0 订阅
1 篇文章 0 订阅

javabean类

package com.zbv.javabean;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @author lx
 * 用户javabean类
 * 用户名 密码 邮箱 生日
 */
public class User implements Serializable{
    String username;
    String password;
    String email;
    Date birthday;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password
                + ", email=" + email + ", birthday=" + new SimpleDateFormat("yyyy-MM-dd")
        .format(birthday) + "]";
    }
}

测试类—使用的就是eclipse中的junit测试框架

package com.zbv.test;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import com.zbv.dao.impl.DBmeta;
import com.zbv.javabean.User;
import com.zbv.service.UserService;
import com.zbv.service.impl.UserServiceImpl;
public class MySimpleTest {
    @Test
    public void test() {
//      UserService userServiceImpl=new UserServiceImpl();
//      User user=userServiceImpl.login("zbv", "52588");
//      if(user==null){
//          System.out.println("抱歉,您没有注册...");
//      }
//      System.out.println(user);
        DBmeta meta=new DBmeta();
//      String sql="insert into user(username,password,email,birthday) values(?,?,?,?)";
//      meta.changeDB(sql, "xiao qi zi","zb52588","156@kiu.cn",new Date());
        String sql="select * from user";
        Class clazz=User.class;
        List<Object> list=meta.queryAll(sql, clazz, null);
        for (Object object : list) {
            User user=(User)object;
            System.out.println(user);
        }
    }
}

DBUtil工具类

package com.zbv.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
 * 连接数据库----DBCP
 * */
public class DBUtils {
//    private static DataSource ds;
    private static BasicDataSource bds;
    /**
     *静态代码块初始化连接数据库的数据源
     * */
    static{
//      try {
//          Context initContext=new InitialContext();
//          ds=(DataSource) initContext.lookup("java:/com/env/jdbc/my_user");
//      } catch (NamingException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
        Properties p=new Properties();
        InputStream is=DBUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
        try {
            p.load(is);
            bds=(BasicDataSource) BasicDataSourceFactory.createDataSource(p);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 数据源连接数据库
     * */
    public static Connection getConnection(){
        try {
            System.out.println("连接数据库.....");
            return bds.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 释放数据库资源
     * */
    public static void releaseDB(Connection conn,PreparedStatement ps,ResultSet rs){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

自定义框架元数据封装

package com.zbv.dao.impl;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.ParameterMetaData;
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 com.zbv.utils.DBUtils;
/**
 * 自定义数据库元数据框架
 * */
public class DBmeta {

    public DBmeta(){
        list=new ArrayList<Object>();
    }

    /**
     * 数据库的添改删
     * */
    public void changeDB(String sql,Object... param){
        Connection conn=DBUtils.getConnection();
        PreparedStatement ps=null;
        try {
            ps=conn.prepareStatement(sql);
            ParameterMetaData pm=ps.getParameterMetaData();
            int paramCount=pm.getParameterCount();
            if(paramCount>0){
                if(param==null&&!(param.length==paramCount)){
                    throw new RuntimeException("参数个数不匹配");
                }
                //依次给每个参数赋值
                for(int i=0;i<paramCount;i++){
                    ps.setObject(i+1, param[i]);
                }
            }
            ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtils.releaseDB(conn,ps,null);
        }
    }

    /**
     * 数据库的查询
     * 注意的是必须和数据库的JavaBean一致
     * */
    List<Object> list;
    public List<Object> queryAll(String sql,Class clazz,Object...param){
        Connection conn=DBUtils.getConnection();
        PreparedStatement ps = null;
        ResultSet rs=null;
        try {
            ps=conn.prepareStatement(sql);
            ParameterMetaData pm=ps.getParameterMetaData();
            int paramCount=pm.getParameterCount();
            if(paramCount>0){
                if(param!=null&&param.length!=paramCount){
                    throw new RuntimeException("参数个数不匹配");
                }

                for(int i=0;i<paramCount;i++){
                    ps.setObject(i+1, param[i]);
                }
            }
            rs=ps.executeQuery();
            ResultSetMetaData rsm=rs.getMetaData();
            int resultCount=rsm.getColumnCount();
            while(rs.next()){
                Object obj=clazz.newInstance();
                for(int i=0;i<resultCount;i++){
                    String name=rsm.getColumnName(i+1);
                    Field field=clazz.getDeclaredField(name);
                    field.setAccessible(true);
                    Object value=rs.getObject(i+1);
                    field.set(obj, value);
                }
                list.add(obj);
            }
            return list;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtils.releaseDB(conn,ps,rs);
        }
        return null;
    }
}

最后解释一下:
这只是我联系javaweb用户登录注册的数据库封装部分,使用的是tomcat服务器,当然了,这一部分不需要javaweb,直接mysql测试框架一起测试就可以了,重点是如何简单的做个自己需要的数据库小框架,把添加、修改和删除定义一个元数据方法,查询再单独写个方法,减少了不必要的很多代码,方便简洁。继续努力^–^
如有小伙伴对于我的javaweb测试项目感兴趣,[点击下载](https://code.csdn.net/dashboard/index)
如有错误请大神们指正,如可精进,请大神们不吝赐教,谢!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值