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的更多相关文章

  1. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

  2. javaSE基础07

    javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...

  3. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  4. javaSE基础05

    javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...

  5. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  6. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  7. javaSE基础02

    javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

  8. JavaSE基础01

    JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...

  9. javase基础复习攻略《十》

    按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...

随机推荐

  1. Eureka简介

    Eureka是Spring Cloud Netfix 的一个子模块,也是核心模块之一,用于云端服务发现.一个基于RestFul的服务,用于定位服务,以实现云端中间层服务发现和中间层转移. 服务注册与发 ...

  2. msfpayload反弹shell

    1.前期-- 情景就是当我们获得webshell时,我们想留下我们的后门,这个时候我们可以用到msfpayload与msfconsole结合使用 启动PostgreSQL服务:service post ...

  3. 利用SSLStrip截获https协议--抓取邮箱等密码

    1.SSL解析 SSL 是 Secure Socket Layer 的简称, 中文意思是安全套接字层,由 NetScape公司所开发,用以保障在 Internet 上数据传输的安全,确保数据在网络的传 ...

  4. 富文本存储型XSS的模糊测试之道

    富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大 ...

  5. popular short sentences

    backward compatibility 向后兼容 archive 文档

  6. v8-su-root

    1.下载userdebug版本 2.设置模块打开develop options 3.勾选usb debugging 4.adb remount 5.解压SuperSU_N.7z(联系我索取)并push ...

  7. linux下的usb抓包方法【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-4508834.html 1.配置内核使能usb monitor: make menuconfig       ...

  8. python 元组分组并排序

    # -*- coding: utf-8 -*- # @Time : 2018/8/31 14:32 # @Author : cxa # @File : glomtest.py # @Software: ...

  9. JQuery中DOM事件合成用法

    jQuery有两个合成事件——hover()方法和toggle()方法 类似前面讲过的ready()方法,hover()方法和toggle()方法都属于jQuery自定义的方法. hover()方法: ...

  10. node项目中用到的一些模块

    1.http模块,用来搭建服务器 代码,简单服务器实现 var http = require('http'); http.createServer(function (request, respons ...