JavaSE基础之JDBC

JavaSE基础之JDBC

1、JDBC 的步骤:

  ①加载数据库驱动;

    a.MySQL:com.mysql.jdbc.Driver;

    b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver;

    c.Oracle:oracle.jdbc.driver.OracleDriver;

  ②获取数据库链接;

      a.MySQL:jdbc:mysql://localhost:3306/DataBaseName;

    b.SQLServer:jdbc:sqlserver://localhost:1433; DatabaseName=DataBaseName

    c.Oracle:jdbc:oracle:thin:@localhost:1521:orcl;

  ③创建SQL语句对象;

  ④执行SQL语句对象;  

    a.如果是insert、delete、update,则返回 int;

    b.如果是query,则返回ResultSet,需要封装结果集。

  ⑤关闭数据库资源。

2、JDBC 的工具类(以链接MySQL为例):DBUtil.java

  1 package cn.com.zfc.util;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.ResultSetMetaData;
  8 import java.sql.SQLException;
  9 import java.util.ArrayList;
 10 import java.util.HashMap;
 11 import java.util.List;
 12 import java.util.Map;
 13 
 14 /**
 15 * 
 16 * @title DbUtil
 17 * @describe 连接数据库的帮助类:链接 MySQL 数据库
 18 * @author 张富昌
 19 * @date 2016年8月23日上午9:52:44
 20 */
 21 public class DbUtil {
 22   /* 数据库链接的 URL,数据库名称可随意更改 */
 23   private final static String URL = "jdbc:mysql://localhost:3306/library";
 24   /* 数据库用户名 */
 25   private final static String USERNAME = "root";
 26   /* 数据库密码 */
 27   private final static String PASSWORD = "root";
 28   /* 数据库链接对象 */
 29   private Connection connection = null;
 30   /* 预处理语句对象,相同的 sql 语句只编译一次 */
 31   private PreparedStatement preparedStatement = null;
 32   /* 结果集对象,用于存储查询的数据 */
 33   private ResultSet resultSet = null;
 34   /* 结果集结构化对象,用于对结果集的处理,方便获取数据 */
 35   private ResultSetMetaData resultSetMetaData = null;
 36 
 37   /**
 38   * 
 39   * 功能:1、加载数据库驱动包
 40   *
 41   */
 42   static {
 43     try {
 44       // 需要加载数据库的驱动
 45       Class.forName("com.mysql.jdbc.Driver");
 46     } catch (ClassNotFoundException e) {
 47       System.out.println("加载数据库驱动包出现了异常...");
 48       e.printStackTrace();
 49     }
 50   }
 51 
 52   /**
 53   * 
 54   * 功能:2、获取数据库链接
 55   *
 56   * 参数:
 57   *
 58   * 返回类型:Connection
 59   */
 60   private Connection getConnection() {
 61     try {
 62       connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 63       return connection;
 64     } catch (SQLException e) {
 65       System.out.println("获取链接出现了异常");
 66       e.printStackTrace();
 67     }
 68     return null;
 69   }
 70 
 71   /**
 72   * 
 73   * 功能:3、提供更新的方法,包括(添加、修改、删除)
 74   *
 75   * 参数: String sql, Object... objects
 76   *
 77   * 返回类型:int
 78   */
 79   public int update(String sql, Object... objects) {
 80     // 1、创建数据库链接对象
 81     connection = getConnection();
 82 
 83     // 2、创建预处理语句对象
 84     try {
 85       preparedStatement = connection.prepareStatement(sql);
 86 
 87       // 3、遍历参数 Object,代替 SQL 语句中的占位符(如果有)
 88       for (int i = 0; i < objects.length; i++) {
 89         preparedStatement.setObject(i + 1, objects[i]);
 90       }
 91 
 92       // 4、执行 sql 语句
 93       return preparedStatement.executeUpdate();
 94     } catch (SQLException e) {
 95       System.out.println("创建预处理语句对象出现了异常...");
 96       e.printStackTrace();
 97     } finally {
 98       // 5、关闭数据库资源
 99       release();
100     }
101     return -1;
102 
103   }
104 
105   /**
106   * 
107   * 功能:4、查询数据库中的信息
108   *
109   * 参数:String sql, Object... objects
110   *
111   * 返回类型:List<Map<String,Object>>
112   */
113   public List<Map<String, Object>> query(String sql, Object... objects) {
114     List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
115     // 1、创建数据库链接对象
116     connection = getConnection();
117 
118     // 2、创建预处理语句对象
119     try {
120       preparedStatement = connection.prepareStatement(sql);
121 
122       // 3、遍历参数 Object
123       for (int i = 0; i < objects.length; i++) {
124         preparedStatement.setObject(i + 1, objects[i]);
125        }
126       // 4、执行 SQL 语句,创建结果集对象
127       resultSet = preparedStatement.executeQuery();
128 
129       // 5、创建结果集结构化对象
130       resultSetMetaData = resultSet.getMetaData();
131 
132       // 6、遍历结果集,把存储数据类型转化为 List<Map<String, Object>>
133       while (resultSet.next()) {
134         Map<String, Object> map = new HashMap<String, Object>();
135         for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
136           String key = resultSetMetaData.getColumnName(i);
137           Object value = resultSet.getObject(key);
138           // 封装结果集
139           map.put(key, value);
140         }
141         list.add(map);
142       }
143       return list;
144     } catch (SQLException e) {
145       System.out.println("创建预处理语句对象出现了异常...");
146       e.printStackTrace();
147     } finally {
148       // 7、关闭数据库资源
149       release();
150     }
151 
152     return null;
153   }
154 
155   /**
156   * 
157   * 功能:5、关闭数据库资源,很重要
158   *
159   * 参数:
160   *
161   * 返回类型:void
162   */
163   private void release() {
164     // 1、关闭数据库链接对象
165     if (connection != null) {
166       try {
167         connection.close();
168       } catch (SQLException e) {
169         System.out.println("关闭数据库链接对象出现了异常...");
170         e.printStackTrace();
171       }
172     }
173     // 2、关闭预处理语句对象
174     if (preparedStatement != null) {
175       try {
176         preparedStatement.close();
177       } catch (SQLException e) {
178         System.out.println("关闭预处理语句对象出现了异常...");
179         e.printStackTrace();
180       }
181     }
182 
183     // 3、关闭结果集对象
184     if (resultSet != null) {
185       try {
186         resultSet.close();
187       } catch (SQLException e) {
188         e.printStackTrace();
189       }
190     }
191   }
192 
193 }
原文地址:https://www.cnblogs.com/zfc-java/p/6670941.html