zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    固定表头/锁定前几列的代码参考[JS篇]
    盘点mysql中容易被我们误会的地方
    cookie&session的Q&A故事[原理篇]
    网络第一道防线:验证码的故事[安全篇]
    2016,把一年的牛皮先吹了吧[生涯规划篇]
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-SW Engineer II for Cloud Servi
    微软职位内部推荐-SW Engineer II for Cloud Servi
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6670941.html
Copyright © 2011-2022 走看看