发表于: 2019-10-18 18:43:13

1 1088


一、今天完成的事情

  •         首先,Java应用需要创建并建立与特定数据库的连接。这可以通过Driven Manager完成,比如,接口java.sql.DriveManager的实例;或者直接通过JDBC数据源进行连接。接口javax.sq.DataSource可以用来建立JDBC数据源连接。后面的章节会详细介绍这些组件。
  •         一旦连接到数据库,我们就可以使用java.sql.Connection来执行CRUD (创建-create, 读取-read, 更新-update, 删除delete) SQL 语句或操作。后面的章节会详细介绍这些语句。
  • 数据库组件:
  •         为了执行这些操作,程序员可以使用基于java.sql.Statement and java.sql.PreparedStatement 的类。需要多次执行相同的语句,后者会更高效一些,另外它也提供了一些我们将会在本教程后面章节提到的优点。接口JDBC连接提供了很多机制来创建statement实例:
  • PreparedStatement countriesStatement = connection.prepareStatement("UPDATE COUNTRIES SET NAME = ? WHERE ID = ?");
    countriesStatement.setString(1, "Spain");
    countriesStatement.setInt(2, 123456789);
    • 插入、更新和删除操作会返回所改变的记录行数:
    • // countriesStatement belongs to the class Statement, returning number of updated rows
      int n = countriesStatement.executeUpdate();
      • 选择操作(查询)会通过java.sql.ResultSet返回很多数据行;遍历这些记录时可以通过列名或行号;查询结果的元数据也可以获取得到:
      1
      2
      3
      4
      // countriesStatement belongs to the class Statement
      ResultSet rs = countriesStatement.executeQuery("SELECT NAME, POPULATION FROM COUNTRIES");
      //rs contains the results in rows plus some metadata
      ...
      • 通常情况下,JDBC使用连接池来管理数据库连接。连接池有很多不同的实现方式,比如C3P0或DBCP。数据库连接池是一组JDBC连接,当应用程序请求连接时,它会分配一个空闲连接;当应用中有任务终结时,它会释放相应的连接。有很多文档介绍了如果使用和配置JDBC连接池,这个有个不错的教程http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/jdbc_connection_pools.html 
      •  JDBC还有一些其它功能:存储过程(Stored Procedure)、可调用声明(Callable Statements), 批处理(Batch Processing)… 本教程会一一讲解这些概念。
      • 数据库连接:

        我们通过java.sql.Connection 对象来连接到数据库,具体方法是调用java.sql.DriverManager类的getConnection()方法。这个方法的参数包括数据库主机名和登录信息。

        如下代码片段展示了如何创建本地MySQL数据库的连接。

        1
        2
        3
        4
        5
        //MySQL driver is loaded
        Class.forName( "com.mysql.jdbc.Driver" );
        //Connection object is created using the db host and credentials
        Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/countries?"
                    + "user=root&password=root" );

        数据库连接对象使得程序员可以做如下操作:

        • 创建JDBC Statement:使用已建立的连接,可以创建Statement, PreparedStatement 或CallableStatement 实例,然后通过这些实例提供的各种方法来执行不同的SQL语句。举个例子说明如何创建PreparedStatement:
        1
        2
        //the connection conn is used to create a prepared statement with the given sql operation
        PreparedStatement updateStmt = conn.prepareStatement( sql );

        这个Statement可以执行通过参数传入的更新SQL语句。

        • 可以提交或者回退指定的事务。JDBC连接支持两种工作方式:autocommit=true 和 autocommit=false. 第一种方式直接提交所有事务至数据库;第二种方式需要执行一条特殊命令来提交或者回退这些事务。我们会在后面的相关章节中更详细的讲解这个特性。下面以一小段代码为例来说明如何更改JDBC连接的自动提交模式:
        1
        2
        //it changes the mode to auto commit=false
        connect.setAutoCommit( false );
        • 提供了功能可以获得所使用的数据库的元信息。
        • 其它一些功能例如批处理(batch processing)、存储过程(stored procedure)等等。
        • 数据库:
        • JDBC能够支持相当多的数据库。它高度抽象出数据库的共性和工作方式,使得可以通过不同的驱动程序来支持它们。类DriverManager负责加载合适的数据库驱动,加载完毕后,那些用来读取和修改数据的代码基本是跨数据库通用的(或许会有一点点差异)。

          这里有个链接可以查看JDBC支持的数据库列表(已在Oracle官方注册的): http://www.oracle.com/technetwork/java/index-136695.html


          MySQL 示例:

          01
          02
          03
          04
          05
          06
          07
          08
          09
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          public static void main( String[] args ) throws ClassNotFoundException, SQLException
              {
           
                  // connection to JDBC using mysql driver
                  Class.forName( "com.mysql.jdbc.Driver" );
                  Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/countries?"
                      + "user=root&password=root" );
           
                  
                  selectAll( connect );
           
                  // close resources, in case of exception resources are not properly cleared
          ...
           
              }
               
              /**
               * select statement and print out results in a JDBC result set
               *
               * @param conn
               * @throws SQLException
               */
              private static void selectAll( java.sql.Connection conn ) throws SQLException
              {
                  Statement statement = conn.createStatement();
           
                  ResultSet resultSet = statement.executeQuery( "select * from COUNTRIES" );
           
                  while( resultSet.next() )
                  {
                      String name = resultSet.getString( "NAME" );
                      String population = resultSet.getString( "POPULATION" );
           
                      System.out.println( "NAME: " + name );
                      System.out.println( "POPULATION: " + population );
                  }
           
              }

        • 二、明天要做的事情
        • 继续往下学习

三、遇到的困难


四、收获

深入了解JDBC


返回列表 返回列表
评论

    分享到