直接连接数据库进行操作
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