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","[email protected]",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&¶m.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)
如有错误请大神们指正,如可精进,请大神们不吝赐教,谢!