首页 > 其他 > 详细

增删改查工具类

时间:2021-05-21 17:44:27      阅读:20      评论:0      收藏:0      [点我收藏+]

直接连接数据库进行操作

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * XiaXiaozheng
 * 增删改查工具类
 */
public class DBTools {
	private static final String url = "jdbc:oracle:thin:@xx.xx:xx/pdbbasedb";
	private static final String user = "user";
	private static final String password = "password";

	/**
	 * 获取连接对象的方法
	 * @return java.sql.Connection对象
	 */
	public static Connection getConn() {
		Connection connection = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			connection = DriverManager.getConnection(url, user, password);
			System.out.println("连接成功" + connection);
		} catch (SQLException | ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("连接失败" );
		}
		return connection;
	}

	/**
	 * 通用查询方法,返回值为list;
	 * @param sql    查询的sql语句
	 * @param cls    Class类型的对象
	 * @param params 占位符的参数列表
	 * @return Object ->List<Object>
	 */
	public static Object exQuery(String sql, Class cls, Object... params) {
		List<Object> list = new ArrayList<Object>();
		Connection conn = getConn();
		PreparedStatement pstmt = null;
		int n = 0;
		ResultSet rs = null;
		try {
			pstmt = conn.prepareStatement(sql);
			if (params != null) {//占位符?的数量不确定
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			rs = pstmt.executeQuery();// 执行sql,executeQuery()
			// 判断
			if ("java.lang.Object".equals(cls.getName())) {
				if (rs.next()) {
					return rs.getInt(1);
				}
			}
			// 得到的是结果集Result 返回值"可能是" List集合  ResultSet-->List
			ResultSetMetaData rsmd = rs.getMetaData();
			int count = rsmd.getColumnCount();// getColumnCount 得到查询的列有几个
			while (rs.next()) {// 遍历得到rs数据要使用rs.next
				// 根据cls来创建指定类型的对象cls.newInstance(),实际的类型?
				Object bean = cls.newInstance();
				for (int i = 1; i <= count; i++) {// 达到的目的是将列名和查询的结果依次取出来
					String name = rsmd.getColumnLabel(i).toLowerCase();//列名  数据库默认大写,转小写,与对象成员变量可以匹配
					Object value = rs.getObject(i);//列的值
					BeanUtils.copyProperty(bean, name, value);
				}
				list.add(bean);// 构造一个对象出来,并添加到集合
			}
		} catch (SQLException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeAll(null, pstmt, conn);
		}
		return list;
	}

	/**
	 * 完成增加删除和修改的方法
	 * @param sql    insert update delete语句
	 * @param params 可变数组
	 * @return 受影响的行
	 */
	public static int exUpdate(String sql, Object... params) {
		Connection conn = getConn();
		PreparedStatement pstmt = null;
		int n = 0;
		try {
			pstmt = conn.prepareStatement(sql);
			if (params != null) {//占位符?的数量不确定
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			//System.out.println("pstmt:" + pstmt);
			n = pstmt.executeUpdate(); //执行sql,executeUpdate()返回的是受影响的行
			System.out.println("受影响的行n:" + n);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("出异常了");
		} finally {
			closeAll(null, pstmt, conn);
		}
		return n;
	}

	/**
	 * 释放资源
	 * @param rs    结果集对象
	 * @param pstmt 预处理对象
	 * @param conn  连接对象
	 */
	public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

增删改查工具类

原文:https://www.cnblogs.com/97xxl521/p/14794144.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!