02_JDBC实战理论

标签: JDBC 步骤准备
4人阅读 评论(0) 收藏 举报
分类:

原文地址:
https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

实战环境

  • JDK1.8
  • Mysql5.6
  • mysql-connector-java-6.0.6.jar

用JDBC处理SQL语句的步骤

通常,用JDBC处理SQL语句,你需要遵循以下几个步骤:

  1. 建立一个链接
  2. 创建sql语句
  3. 执行sql语句
  4. 处理返回的结果集
  5. 关闭连接

包含一个完整步骤的代码可能看起来像下面这样

/**
     * 
     * @param con 连接
     * @param dbName
     * @throws SQLException
     */
    public static void viewTable(Connection con, String dbName) throws SQLException {
        // 1:连接通过参数传过来的
        Statement stmt = null;
        try {
            // 2:创建SQL语句
            String query = "select COF_NAME, SUP_ID, PRICE, " + "SALES, TOTAL " + "from " + dbName + ".COFFEES";
            stmt = con.createStatement();
            // 3:执行SQL语句
            ResultSet rs = stmt.executeQuery(query);
            // 4:处理返回的结果集
            while (rs.next()) {
                String coffeeName = rs.getString("COF_NAME");
                int supplierID = rs.getInt("SUP_ID");
                float price = rs.getFloat("PRICE");
                int sales = rs.getInt("SALES");
                int total = rs.getInt("TOTAL");
                System.out.println(coffeeName + "\t" + supplierID + "\t" + price + "\t" + sales + "\t" + total);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 5:关闭连接
            if (stmt != null) {
                stmt.close();
            }
        }
    }

建立连接

首先,用你想用的数据源建立一个连接。这个数据源可以是DBMS,一个传统的文件系统或者是其他的使用了相应的JDBC驱动程序的数据源。这个连接被一个Connection对象所表示出来。详情请见:03_创建数据源

创建sql语句

一个Satement接口代表了一个SQL语句。你通过对Statement对象的执行,他们将会返回SQL对应查询的ResultSet结果集。这种结果集代表了数据库的结果。你需要通过Connection连接对象来创建一个Statement对象。如上述代码中的示例语句:

stmt = con.createStatement();

在JDBC中,有三种不同类型的Statement对象

  • Statement

    是简单的无参数的SQL语句的一种实现。

  • PreparedStatement

    继承自Statement,是包括了输入参数(可能没有)预编译的SQL语句的实现对象。

  • CallableStatement:

    继承自PrepatedStatement,是用来执行可能包含了输入和输出参数的存储过程一种实现。

执行sql语句

为了执行一条SQL语句,就利用Statement对象调用execute方法吧。有以下几种:

  • execute

    如果查询返回的第一个对象是结果集对象,则返回true。如果查询能够返回一个或不止一个的结果集对象,则可以利用这个方法。可以通过重复的调用Statement.getResultSet来检索结果集对象。

  • executeQuery

    返回一个结果集对象

  • executeUpdate

    通过返回一个整数来代表执行一个查询在数据库中所影响的行数(即对几行数据产生了操作)。如果你执行的是插入、删除、或者更新的SQL语句,可以利用这个方法来查看影响的记录数。

处理返回的结果集

在一个返回的结果集中访问数据是通过游标的方式。注意这个游标不是数据库中的游标,这个游标是一个指针,是一个指向一行数据在结果集中位置的指针。最初,游标位于结果集中的第一行,你能调用结果集对象中定义的各种方法来移动游标。

例如,在前面的viewTable函数中,通过重复调用ResultSet.next方法来向前移动游标一步。每一次都调用next,这个方法输出游标在结果集中具体指向的行数。在前文中的代码就是这个:

try {
    stmt = con.createStatement();
    // 3:执行SQL语句
    ResultSet rs = stmt.executeQuery(query);
    // 4:处理返回的结果集
    while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + "\t" + supplierID + "\t" + price + "\t" + sales + "\t" + total);
            }
}
// ...

关闭连接

当你通过Statement执行完一个查询时,调用Statement.close方法来立即释放使用的资源。当你调用这个方法时,他的结果集对象就会被关闭。

例如:viewTable中为了确保Statement对象是被关闭的,在方法的最后做了处理。无论抛出什么sqlexception对象,都将其封装在finally块中:

} finally {
    // 5:关闭连接
    if (stmt != null) {
        stmt.close();
    }
}

jdbc在与数据源进行交互期间遇到错误时会抛出SQLException 。在JDBC4.1及之后,可以通过JDK1.7的新特性来关闭Connection、Statement、ResultSet对象,无论SQLException 是否被抛出,try-with-resource语句都可以自动关闭这些对象,将上面的代码进行改造就是这样的:

    /* 
     * @param con 连接
     * @param dbName
     * @throws SQLException
     */
    public static void viewTable(Connection con, String dbName) throws SQLException {
        // 1:连接通过参数传过来的
        Statement stmt = null;
        // 这里在程序执行完会自动管理资源
        try(Statement stmt = con.createStatement()){
            // 2:创建SQL语句
            String query = "select COF_NAME, SUP_ID, PRICE, " + "SALES, TOTAL " + "from " + dbName + ".COFFEES";
            // 3:执行SQL语句
            ResultSet rs = stmt.executeQuery(query);
            // 4:处理返回的结果集
            while (rs.next()) {
                String coffeeName = rs.getString("COF_NAME");
                int supplierID = rs.getInt("SUP_ID");
                float price = rs.getFloat("PRICE");
                int sales = rs.getInt("SALES");
                int total = rs.getInt("TOTAL");
                System.out.println(coffeeName + "\t" + supplierID + "\t" + price + "\t" + sales + "\t" + total);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } 
    }

以上就是JDBC实战的理论基础了。

查看评论

黑客基础——爬虫(从理论剖析到实战演练)

咨询讨论QQ群:633455803 咨询微信号:eConnection 本课程将全面覆盖爬虫基础知识为后期做项目打下扎实的基础。 数据获取这门课通过多个项目手把手实战系统讲解通过不同渠道(重点利用爬虫技术)获取数据。在我们高阶课程里还加 了大量反爬虫的对应技术,渗透测试工具。后期高阶课程纯属技术讨论,学习本门课程后要遵守国家相关法律法规,把相关技术用于违法活动,后果自负。
  • 2018年03月01日 12:12

如何阅读代码?理论+实践 非常棒

http://www.cocoachina.com/gamedev/misc/2013/0729/6688.html 1.尽力构建并运行代码。 这通常是一个简单的步骤,就像你在看可运行的...
  • openglnewbee
  • openglnewbee
  • 2013-08-08 19:25:41
  • 986

中文版-人工智能--理论与实践_部分4.pdf

  • 2014年08月18日 01:08
  • 3.7MB
  • 下载

Linux高薪入门实战精品 (上)

本课程兼顾Centos5.8/Centos6.4都适合,全实战生产环境工作标准从0开始讲解Linux运维技术,这是一个很难得的经过近7年实战培训锤炼的Linux业内领先的课程。 对Linux感兴趣但是又找不到方向的伙伴们注意了,我们将陆续发布Linux运维经典基础入门课程,循序渐进帮你走 进Linux的大门。
  • 2015年05月14日 16:13

2017年深度学习理论、算法和应用研讨会视频下载地址分享

研讨会旨在将机器学习,人工智能,数学,统计学和神经科学等深入学习和相关领域的领先科学家聚集在一起。邀请与会者介绍他们最近出版的作品以及进行中的工作,并分享他们对该领域的看法和看法。 目前,研讨会的视...
  • lqfarmer
  • lqfarmer
  • 2017-08-06 15:58:48
  • 701

数据仓库之ETL漫谈-实战总结理论

ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取、转换和加载。   大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)-->D...
  • xiaohai798
  • xiaohai798
  • 2014-12-15 20:47:26
  • 3830

angularJS理论与实战.ppt

  • 2014年08月30日 17:12
  • 4.49MB
  • 下载

机器学习 深度学习入门理论和实战入门指导

今天OOP的老师上课说了一个比喻,大致为:吃饭,就算再了解怎样夹食物的原理,就算再知道一次喂多少饭进嘴里比较合适,也远远不及自己每天都好好吃饭。 机器学习理论服从实战,对我一个想练好工程的人,学来的...
  • Ryan_Mu
  • Ryan_Mu
  • 2018-03-12 21:05:03
  • 88

人工智能理论与实践PDF

  • 2015年11月20日 11:50
  • 20.91MB
  • 下载

02_JDBC编程

2.1 JDBC简介 2.1.1 JDBC的概念及特点 JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关...
  • uikoo9
  • uikoo9
  • 2012-11-28 14:07:15
  • 608
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 694
    排名: 7万+
    博客专栏
    最新评论