JavaSE基础之JDBC

Posted 勇闯天涯zfc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

package cn.com.zfc.util;

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;

/**
*
* @title DbUtil
* @describe 连接数据库的帮助类:链接 MySQL 数据库
* @author 张富昌
* @date 2016年8月23日上午9:52:44
*/
public class DbUtil {
  /* 数据库链接的 URL,数据库名称可随意更改 */
  private final static String URL = "jdbc:mysql://localhost:3306/library";
  /* 数据库用户名 */
  private final static String USERNAME = "root";
  /* 数据库密码 */
  private final static String PASSWORD = "root";
  /* 数据库链接对象 */
  private Connection connection = null;
  /* 预处理语句对象,相同的 sql 语句只编译一次 */
  private PreparedStatement preparedStatement = null;
  /* 结果集对象,用于存储查询的数据 */
  private ResultSet resultSet = null;
  /* 结果集结构化对象,用于对结果集的处理,方便获取数据 */
  private ResultSetMetaData resultSetMetaData = null;

  /**
  *
  * 功能:1、加载数据库驱动包
  *
  */
  static {
    try {
      // 需要加载数据库的驱动
      Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
      System.out.println("加载数据库驱动包出现了异常...");
      e.printStackTrace();
    }
  }

  /**
  *
  * 功能:2、获取数据库链接
  *
  * 参数:
  *
  * 返回类型:Connection
  */
  private Connection getConnection() {
    try {
      connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
      return connection;
    } catch (SQLException e) {
      System.out.println("获取链接出现了异常");
      e.printStackTrace();
    }
    return null;
  }

  /**
  *
  * 功能:3、提供更新的方法,包括(添加、修改、删除)
  *
  * 参数: String sql, Object... objects
  *
  * 返回类型:int
  */
  public int update(String sql, Object... objects) {
    // 1、创建数据库链接对象
    connection = getConnection();

    // 2、创建预处理语句对象
    try {
      preparedStatement = connection.prepareStatement(sql);

      // 3、遍历参数 Object,代替 SQL 语句中的占位符(如果有)
      for (int i = 0; i < objects.length; i++) {
        preparedStatement.setObject(i + 1, objects[i]);
      }

      // 4、执行 sql 语句
      return preparedStatement.executeUpdate();
    } catch (SQLException e) {
      System.out.println("创建预处理语句对象出现了异常...");
      e.printStackTrace();
    } finally {
      // 5、关闭数据库资源
      release();
    }
    return -1;

  }

  /**
  *
  * 功能:4、查询数据库中的信息
  *
  * 参数:String sql, Object... objects
  *
  * 返回类型:List<Map<String,Object>>
  */
  public List<Map<String, Object>> query(String sql, Object... objects) {
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    // 1、创建数据库链接对象
    connection = getConnection();

    // 2、创建预处理语句对象
    try {
      preparedStatement = connection.prepareStatement(sql);

      // 3、遍历参数 Object
      for (int i = 0; i < objects.length; i++) {
        preparedStatement.setObject(i + 1, objects[i]);
       }
      // 4、执行 SQL 语句,创建结果集对象
      resultSet = preparedStatement.executeQuery();

      // 5、创建结果集结构化对象
      resultSetMetaData = resultSet.getMetaData();

      // 6、遍历结果集,把存储数据类型转化为 List<Map<String, Object>>
      while (resultSet.next()) {
        Map<String, Object> map = new HashMap<String, Object>();
        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
          String key = resultSetMetaData.getColumnName(i);
          Object value = resultSet.getObject(key);
          // 封装结果集
          map.put(key, value);
        }
        list.add(map);
      }
      return list;
    } catch (SQLException e) {
      System.out.println("创建预处理语句对象出现了异常...");
      e.printStackTrace();
    } finally {
      // 7、关闭数据库资源
      release();
    }

    return null;
  }

  /**
  *
  * 功能:5、关闭数据库资源,很重要
  *
  * 参数:
  *
  * 返回类型:void
  */
  private void release() {
    // 1、关闭数据库链接对象
    if (connection != null) {
      try {
        connection.close();
      } catch (SQLException e) {
        System.out.println("关闭数据库链接对象出现了异常...");
        e.printStackTrace();
      }
    }
    // 2、关闭预处理语句对象
    if (preparedStatement != null) {
      try {
        preparedStatement.close();
      } catch (SQLException e) {
        System.out.println("关闭预处理语句对象出现了异常...");
        e.printStackTrace();
      }
    }

    // 3、关闭结果集对象
    if (resultSet != null) {
      try {
        resultSet.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

}





























































































































































以上是关于JavaSE基础之JDBC的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE入门学习7:Java基础语法之语句(下)

Java程序员面试题之JavaSE之基础篇

JavaSE基础之封装

java学习之路之javaSE基础1

JavaSE基础---集合之Set

JavaSE入门学习45:文件传输基础之I/O流