用JDBC毗连数据库
当前位置:以往代写 > JAVA 教程 >用JDBC毗连数据库
2019-06-14

用JDBC毗连数据库

用JDBC毗连数据库

据估算,快要一半的软件开拓都要涉及客户(机)/处事器方面的操纵。Java为本身担保的一项精彩本领就是构建与平台无关的客户机/处事器数据库应用。在Java 1.1中,这一担保通过Java数据库毗连(JDBC)实现了。
数据库最主要的一个问题就是各家公司之间的规格大战。确实存在一种“尺度”数据库语言,即“布局查询语言”(SQL-92),但凡是都必需确切知道本身要和哪家数据库公司打交道,不然极易出问题,尽量存在所谓的“尺度”。JDBC是面向“与平台无关”设计的,所以在编程的时候不必体贴本身要利用的是什么数据库产物。然而,从JDBC里仍有大概发出对某些数据库公司专用成果的挪用,所以仍然不行任性妄为。
和Java中的很多API一样,JDBC也做到了只管的简化。我们发出的要领挪用对应于从数据库收集数据时想虽然的做法:同数据库毗连,建设一个语句并执行查询,然后处理惩罚功效集。
为实现这一“与平台无关”的特点,JDBC为我们提供了一个“驱动措施打点器”,它能动态维护数据库查询所需的所有驱动措施工具。所以如果要毗连由三家公司开拓的差异种类的数据库,就需要三个单独的驱动措施工具。驱动措施工具会在装载时由“驱动措施打点器”自动注册,并可用Class.forName()强行装载。
为打开一个数据库,必需建设一个“数据库URL”,它要指定下述三方面的内容:
(1) 用“jdbc”指出要利用JDBC。
(2) “子协议”:驱动措施的名字可能一种数据库毗连机制的名称。由于JDBC的设计从ODBC接收了很多灵感,所以可以选用的第一种子协议就是“jdbc-odbc桥”,它用“odbc”要害字即可指定。
(3) 数据库标识符:随利用的数据库驱动措施的差异而变革,但一般都提供了一个较量切合逻辑的名称,由数据库打点软件映射(对应)到生存了数据表的一个物理目次。为使本身的数据库标识符具有任何寄义,必需用本身的数据库打点软件为本身喜欢的名字注册(注册的详细进程又随运行平台的差异而变革)。
所有这些信息都统一编译到一个字串里,即“数据库URL”。举个例子来说,若想通过ODBC子协议同一个标识为“people”的数据库毗连,相应的数据库URL可设为:
String dbUrl = "jdbc:odbc:people"
假如通过一个网络毗连,数据库URL也需要包括对长途呆板举办标识的信息。
筹备好同数据库毗连后,可挪用静态要领DriverManager.getConnection(),将数据库的URL以及进入谁人数据库所需的用户名暗码通报给它。获得的返回功效是一个Connection工具,操作它即可查询和哄骗数据库。
下面这个例子将打开一个联结信息数据库,并按照呼吁行提供的参数查询一小我私家的姓(Last Name)。它只选择那些有E-mail地点的人的名字,然后列印出切合查询条件的所有人:

 

//: Lookup.java
// Looks up email addresses in a 
// local database using JDBC
import java.sql.*;

public class Lookup {
  public static void main(String[] args) {
    String dbUrl = "jdbc:odbc:people";
    String user = "";
    String password = "";
    try {
      // Load the driver (registers itself)
      Class.forName(
        "sun.jdbc.odbc.JdbcOdbcDriver");
      Connection c = DriverManager.getConnection(
        dbUrl, user, password);
      Statement s = c.createStatement();
      // SQL code:
      ResultSet r = 
        s.executeQuery(
          "SELECT FIRST, LAST, EMAIL " +
          "FROM people.csv people " +
          "WHERE " +
          "(LAST='" + args[0] + "') " +
          " AND (EMAIL Is Not Null) " +
          "ORDER BY FIRST");
      while(r.next()) {
        // Capitalization doesn't matter:
        System.out.println(
          r.getString("Last") + ", " 
          + r.getString("fIRST")
          + ": " + r.getString("EMAIL") );
      }
      s.close(); // Also closes ResultSet
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
} ///:~

可以看到,数据库URL的建设进程与我们前面报告的完全一样。在该例中,数据库未设暗码掩护,所以用户名和暗码都是空串。
用DriverManager.getConnection()建好毗连后,接下来可按照功效Connection工具建设一个Statement(语句)工具,这是用createStatement()要领实现的。按照功效Statement,我们可挪用executeQuery(),向其通报包括了SQL-92尺度SQL语句的一个字串(不久就会看到如何自动建设这类语句,所以没须要在这里知道关于SQL更多的对象)。
executeQuery()要了解返回一个ResultSet(功效集)工具,它与担任器很是相似:next()要领将担任器移至语句中的下一笔记录;假如已抵告竣果集的末端,则返回null。我们必定能从executeQuery()返回一个ResultSet工具,纵然查询功效是个空集(也就是说,不会发生一个违例)。留意在试图读取任何记录数据之前,都必需挪用一次next()。若功效集为空,那么对next()的这个首次挪用就会返回false。对付功效会合的每笔记录,都可将字段名作为字串利用(虽然尚有其他要领),从而选择差异的字段。别的要留意的是字段名的巨细写是无关紧急的——SQL数据库不在乎这个问题。为抉择返回的范例,可挪用getString(),getFloat()等等。到这个时候,我们已经用Java的原始名目获得了本身的数据库数据,接下去可用Java代码做本身想做的任何工作了。

    关键字:

在线提交作业