jdbc basedao mysql_做个JDBC访问MySQL的通用BaseDao

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ParameterMetaData;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

/**

* JDBC通用的DAO基类

* 1. 得到连接

* 2. 释放资源

* 3. 通用的增删改查的方法

* @author NewBoy

*/

public class BaseDao {

//MySQL连接参数

private static final String URL = "jdbc:mysql://localhost:3306/db1";

private static final String USER = "root";

private static final String PASSWORD = "root";

private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";

//注册驱动

static {

try {

Class.forName(DRIVER_CLASS);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

/**

* 得到连接对象

* @return

*/

public Connection getConnection() {

Connection conn = null;

try {

conn = DriverManager.getConnection(URL, USER, PASSWORD);

} catch (SQLException ex) {

ex.printStackTrace();

}

return conn;

}

/**

* 关闭连接对象

*/

public void closeAll(Connection conn, Statement stmt, ResultSet rs) {

try {

if (rs != null) {

rs.close();

rs = null;

}

if (stmt != null) {

stmt.close();

stmt = null;

}

if (conn != null) {

conn.close();

conn = null;

}

} catch (SQLException se) {

se.printStackTrace();

}

}

/**

* 关闭连接对象

*/

public void closeAll(Connection conn, Statement stmt) {

this.closeAll(conn, stmt, null);

}

/**

* 通用的增删改的方法

* @return 返回影响的行数

*/

public int executeUpdate(String sql, Object[] params) {

//得到连接对象

Connection conn = null;

PreparedStatement stmt = null;

//影响的行数

int rows = 0;

try {

conn = getConnection();

stmt = conn.prepareStatement(sql);

//得到参数个数

ParameterMetaData pmd = stmt.getParameterMetaData();

//设置参数

for (int i = 0; i < pmd.getParameterCount(); i++) {

stmt.setObject(i+1, params[i]);

}

rows = stmt.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

} finally {

closeAll(conn, stmt);

}

return rows;

}

/**

* 通用的查询方法,封装成List

* 使用了泛型方法

* 使用这个方法的前提:数据库表的字段名称和JavaBean的属性名称保持一致

* 在这个方法调用了

* BeanUtils.setProperty(obj, columnName, value)

* 来实现,不然就要使用反射来完成类似的操作了

*/

public List find(String sql, Object[] params, Class clazz) {

//得到连接对象

Connection conn = null;

PreparedStatement stmt = null;

ResultSet rs = null;

//创建集合

List list = new ArrayList();

try {

conn = getConnection();

stmt = conn.prepareStatement(sql);

//得到参数的个数

ParameterMetaData pmd = stmt.getParameterMetaData();

for (int i = 0; i < pmd.getParameterCount(); i++) {

//给参数赋值

stmt.setObject(i+1, params[i]);

}

//运行得到结果集

rs = stmt.executeQuery();

ResultSetMetaData rsmd = rs.getMetaData();

//遍历结果集

while (rs.next()) {

T obj = clazz.newInstance(); //实例化对象

//得到结果集的列数

for (int i = 0; i < rsmd.getColumnCount(); i++) {

//得到列名

String colName = rsmd.getColumnName(i+1);

//列号从1开始,得到每1列的值

Object value = rs.getObject(colName);

//把名字和值赋值到对象中

BeanUtils.setProperty(obj, colName, value);

}

//添加到列表中

list.add(obj);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

closeAll(conn, stmt, rs);

}

return list;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值