Java---一个简单的JdbcUtil

一个简单的JdbcUtil,仅包含insertOrUpdate,selectSqlToList,selectSqlToMap方法,可实现简单的增删改查。查询可以根据字段顺序包装成List或者根据字段名称作为键包装成Map。仅是方便快捷使用,直接写个main方法就可以使用。不建议用于生产,因为没有考虑事务,没有做连接池,效率也不大高。

一、JdbcUtil

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author LAN
 * @date 2020年3月19日
 */
public final class JdbcUtil {

	static final String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/my_test?useUnicode=true"
			+ "&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false";
	static final String userName = "root";
	static final String password = "root";
	
	private static Connection getConn(){
		return getConn0();
	}
	
	private static void releaseConn(Connection conn){
		try {conn.close();} catch (SQLException e) {e.printStackTrace();}
	}
	
	private static Connection getConn0(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection(jdbcUrl, userName, password);
			return conn;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("未找到JDBC驱动",e);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("获取数据库连接失败",e);
		}
	}
	
	/**
	 * 执行sql,根据字段顺序返回表记录,每条记录包装成List<Object>,不包含字段名称
	 * @author LAN
	 * @date 2020年3月25日
	 * @param sql
	 * @param param
	 * @return
	 */
	public static List<List<Object>> selectSqlToList(String sql, Object... param){
		sql = sql.trim();
		if(!"select".equals(sql.substring(0, 6).toLowerCase())){
			throw new RuntimeException("查询必须以select开始");
		}
		Connection conn = getConn();
		try {
			PreparedStatement pstm = conn.prepareStatement(sql);
			if(param!=null){
				for (int i = 0; i < param.length; i++) {
					pstm.setObject(i + 1, param[i]);
	            }
			}
			ResultSet rs = pstm.executeQuery();
			ResultSetMetaData metaData = rs.getMetaData();
			int columnCount = metaData.getColumnCount();
			List<List<Object>> list = new ArrayList();
			while (rs.next()) {
				List<Object> row = new ArrayList();
				for(int i=1; i<=columnCount; i++){
					Object cell = rs.getObject(i);
					row.add(cell);
				}
				list.add(row);
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询数据库失败", e);
		} finally {
			releaseConn(conn);
		}
	}
	
	/**
	 * 执行sql,根据字段名称包装成Map<String,Object>,键是字段名称
	 * @author LAN
	 * @date 2020年3月25日
	 * @param sql
	 * @param param
	 * @return
	 */
	public static List<Map<String,Object>> selectSqlToMap(String sql, Object... param){
		sql = sql.trim();
		if(!"select".equals(sql.substring(0, 6).toLowerCase())){
			throw new RuntimeException("查询必须以select开始");
		}
		Connection conn = getConn();
		try {
			PreparedStatement pstm = conn.prepareStatement(sql);
			if(param!=null){
				for (int i = 0; i < param.length; i++) {
					pstm.setObject(i + 1, param[i]);
	            }
			}
			ResultSet rs = pstm.executeQuery();
			ResultSetMetaData metaData = rs.getMetaData();
			int columnCount = metaData.getColumnCount();
			List<Map<String,Object>> list = new ArrayList();
			while (rs.next()) {
				Map<String, Object> row = new HashMap();
				for(int i=1; i<=columnCount; i++){
					String columnName = metaData.getColumnName(i);
					Object cell = rs.getObject(i);
					row.put(columnName, cell);
				}
				list.add(row);
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询数据库失败", e);
		} finally {
			releaseConn(conn);
		}
	}
	
	/**
	 * 增删改操作
	 * @author LAN
	 * @date 2020年3月25日
	 * @param sql
	 * @param param
	 * @return
	 */
	public static int insertOrUpdate(String sql, Object... param){
		Connection conn = getConn();
		try {
			PreparedStatement pstm = conn.prepareStatement(sql);
			if(param!=null){
				for (int i = 0; i < param.length; i++) {
					pstm.setObject(i + 1, param[i]);
	            }
			}
			boolean execute = pstm.execute();
			int updateCount = pstm.getUpdateCount();
			return updateCount;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("操作数据库失败", e);
		} finally {
			releaseConn(conn);
		}
	}
	
}

二、测试代码

import java.util.List;
import java.util.Map;

public class Main {
	public static void main(String[] args) {
		//单条插入数据
		String sql = "insert into t_customer (mobile,name,age,remark,status) values (?, ?, ?, ?, ?)";
		JdbcUtil.insertOrUpdate(sql, "17777077707", "黄一芝", 23, "聪明人", "01");
		JdbcUtil.insertOrUpdate(sql, "17777077708", "黄一芝", 24, "漂亮", "01");
		int c = JdbcUtil.insertOrUpdate(sql, "81570413", "林平之", 21, "辟邪剑谱", "02");
		System.out.println(c);
		//更新数据
		sql = "update t_customer set remark=? where name=?";
		c = JdbcUtil.insertOrUpdate(sql, "老实人", "黄一芝");
		System.out.println(c);
		//删除数据
		sql = "delete from t_customer where name=? and age=?";
		c = JdbcUtil.insertOrUpdate(sql, "黄一芝", 24);
		//查询数据每条包装成List<Object>
		sql = "select * from t_customer limit ? ";
		List<List<Object>> list1 = JdbcUtil.selectSqlToList(sql, 10);
		for(List<Object> row : list1){
			StringBuilder sbr = new StringBuilder();
			for(Object cell:row){
				sbr.append(cell+",");
			}
			System.out.println(sbr);
		}
		//查询每条包装成Map<String, Object>
		List<Map<String, Object>> list2 = JdbcUtil.selectSqlToMap(sql, 10);
		for(Map<String, Object> row : list2){
			System.out.println(row);
		}
	}
}

三、结果

 

 

author:蓝何忠

email:lanhezhong@163.com

JDBCUtils是一个用于简化Java代码的工具类,它提供了一些方法来帮助我们连接数据库、执行SQL语句和关闭数据库连接。下面是一个简单JDBCUtils工具类的代码示例[^1]: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static final String URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USERNAME = "username"; private static final String PASSWORD = "password"; public static Connection getConnection() { Connection connection = null; try { connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return connection; } public static void close(Connection connection, Statement statement, ResultSet resultSet) { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 这个JDBCUtils工具类包含了两个方法: 1. `getConnection()`方法用于获取数据库连接。在这个方法中,我们使用`DriverManager.getConnection()`方法来建立与数据库的连接,并返回一个`Connection`对象。 2. `close()`方法用于关闭数据库连接、`Statement`对象和`ResultSet`对象。在这个方法中,我们依次关闭这些对象,确保资源得到正确释放。 使用JDBCUtils工具类,我们可以在Java代码中更加方便地连接数据库、执行SQL语句和关闭数据库连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值