连接数据库的步骤:
1.加载JDBC驱动
2.提供连接参数
3.建立数据库连接
4.创建一个statement
5.执行SQL语句
6.处理结果
7.关闭JDBC对象
新建一个JDBCUtil类
package com.jdbc.utils; 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; public class JDBCUtil { private final String USERNAME = "root"; //用户名 private final String PASSWORD = "a123"; //密码 private final String DRIVER = "com.mysql.jdbc.Driver"; //需要加载的驱动 private final String URL = "jdbc:mysql://localhost:3306/test"; //访问数据库的url private Connection connection; //数据库连接 private PreparedStatement preparedStatement;//定义sql语句的执行对象 private ResultSet resultSet; //查询返回的结果集合 }
在构造函数中注册驱动:
public JDBCUtil() { try { Class.forName(DRIVER); //注册驱动 System.out.println("注册成功"); } catch (Exception e) { e.printStackTrace(); } }
获取连接:
public Connection getConnection() { try { //获取连接 connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (Exception e) { // TODO: handle exception } return connection; }
执行更新语句:
//执行更新语句 public boolean updateByPreparedStatement(String sql, List<Object> params) throws SQLException { //获取sql执行对象 preparedStatement = connection.prepareStatement(sql); //填充sql中的占位符 if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); ++i) { preparedStatement.setObject(i + 1, params.get(i)); } } //执行update int result = preparedStatement.executeUpdate(); return result > 0; }
查询单条结果:
//查询单条结果 public Map<String, Object> findSimpleResult(String sql, List<Object> params) throws SQLException { //map对应一条结果 Map<String, Object> map = new HashMap<String, Object>(); //填充占位符 preparedStatement = connection.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); ++i) { preparedStatement.setObject(i + 1, params.get(i)); } } //执行sql语句 resultSet = preparedStatement.executeQuery(); //获取列的信息 ResultSetMetaData metaData = resultSet.getMetaData(); //获取列的个数 int colLen = metaData.getColumnCount(); while (resultSet.next()) { //依次取出每列,放入map中 for (int i = 0; i < colLen; ++i) { //获取列名 String colsName = metaData.getColumnName(i + 1); //获取该列的value Object colsValue = resultSet.getObject(colsName); if (colsValue == null) { colsValue = ""; } //将该列放入map map.put(colsName, colsValue); } } return map; }
查询多条结果:
public List<Map<String, Object>> findMoreResult(String sql, List<Object> params) throws SQLException { //每个map对应一行数据 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); preparedStatement = connection.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); ++i) { preparedStatement.setObject(i + 1, params.get(i)); } } resultSet = preparedStatement.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData(); int colLen = metaData.getColumnCount(); //逐行进行遍历 while (resultSet.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < colLen; ++i) { String colsName = metaData.getColumnName(i + 1); Object colsValue = resultSet.getObject(colsName); if (colsValue == null) { colsValue = ""; } map.put(colsName, colsValue); } list.add(map); } return list; }
释放连接:
//释放连接 public void releaseConn() { if (resultSet != null) { try { resultSet.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
测试代码如下:
public static void main(String[] args) { JDBCUtil jdbcUtil = new JDBCUtil(); jdbcUtil.getConnection(); String sql = "insert into person(name, age) values(?, ?)"; List<Object> params = new ArrayList<Object>(); params.add("rose"); params.add(123); try { boolean flag = jdbcUtil.updateByPreparedStatement(sql, params); System.out.println(flag); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } sql = "select * from person where id = 1"; try { Map<String, Object> map = jdbcUtil.findSimpleResult(sql, null); System.out.println(map); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } System.out.println("--------------------------"); sql = "select * from person"; try { List<Map<String, Object>> list = jdbcUtil.findMoreResult(sql, null); System.out.println(list); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
后面改动Java的反射特性改写查找函数.