Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • JDBC的结构

    post by onelong / 2009-12-20 3:21 Sunday [java]

    JDBC主要包含两部分:面向Java程序员的JDBC API及面向数据库厂商的JDBC Drive API。

    1)面向Java程序员的JDBC API:Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据库的能力,它主要是由一系列的接口定义所构成。

    java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创建新的数据库连接提供支持。

    java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。

    java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。

    java.sql.PreparedStatement:该接口主要定义了用于执行带或不带 IN 参数的预编译 SQL 语句。

    java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的雕用。

    java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。

    2)面向数据库厂商的JDBC Drive API:数据库厂商必须提供相应的驱动程序并实现JDBC API所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。

    通过JDBC 实现对数据库的访问

    (1)引用必要的包

    import java.sql.*;  //它包含有操作数据库的各个类与接口  

    (2)加载连接数据库的驱动程序类

    为实现与特定的数据库相连接,JDBC必须加载相应的驱动程序类。这通常可以采用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager登记注册并在与数据库相连接时,DriverManager将使用此驱动程序。

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    注意:这条语句直接加载了sun公司提供的JDBC-ODBC Bridge驱动程序类。

    3)创建与数据源的连接

     String url="jdbc:odbc:DatabaseDSN"; 

     Connection con=DriverManager.getConnection(url,"User","Password");

    注意:采用DriverManager类中的getConnection()方法实现与url所指定的数据源建立连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象;但对于Access等小型数据库,可以不用给出用户名与密码。

     String url="jdbc:odbc:DatabaseDSN"; 

     Connection con=DriverManager.getConnection(url);

     System.out.println(con.getCatalog()); //取得数据库的完整路径及文件名 

     JDBC借用了url语法来确定全球的数据库(数据库URL类似于通用的URL),对由url所指定的数据源的表示格式为

       jdbc::[ database locator]

    jdbc---指出要使用JDBC

    subprotocal---定义驱动程序类型

    database locator---提供网络数据库的位置和端口号(包括主机名、端口和数据库系统名等)  jdbc:odbc://host.domain.com:port/database 

      主协议jdbc   驱动程序类型为odbc,它指明JDBC管理器如何访问数据库,该例指名为采用JDBC-ODBC桥接方式;其它为数据库的位置表示。  

    例如:装载mySQL JDBC驱动程序

    Class.forName("org.gjt.mm.mysql.Driver ");

    String url="jdbc:mysql://localhost/testDB?user=root&password=soft1234&useUnicode=true&characterEncoding=8859_1"

    //testDB为你的数据库名

    Connection conn= DriverManager.getConnection(url);

    例如:装载Oracle JDBC OCI驱动程序(用thin模式)

    Class.forName("oracle.jdbc.driver.OracleDriver ");

    String url="jdbc:oracle:thin:@localhost:1521:orcl";

    //orcl为你的数据库的SID

    String user="scott";

    String password="tiger";

    Connection conn= DriverManager.getConnection(url,user,password);

    注意:也可以通过con.setCatalog("MyDatabase")来加载数据库。

    例如:装载DB2驱动程序

    Class.forName("com.ibm.db2.jdbc.app.DB2Driver ")

    String url="jdbc:db2://localhost:5000/sample";

    //sample为你的数据库名

      String user="admin";

      String password="";

      Connection conn= DriverManager.getConnection(url,user,password);

    例如:装载MicroSoft SQLServer驱动程序

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ");

    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";

    //pubs为你的数据库的

    String user="sa";

    String password="";   

    Connection conn= DriverManager.getConnection(url,user,password);

    4)查询数据库的一些结构信息

     这主要是获得数据库中的各个表,各个列及数据类型和存储过程等各方面的信息。根据这些信息,从而可以访问一个未知结构的数据库。这主要是通过DatabaseMetaData类的对象来实现并调用其中的方法来获得数据库的详细信息(即数据库的基本信息,数据库中的各个表的情况,表中的各个列的信息及索引方面的信息)。

     DatabaseMetaData dbms=con.getMetaData();

     System.out.println("数据库的驱动程序为 "+dbms.getDriverName());

    5)查询数据库中的数据:

     在JDBC中查询数据库中的数据的执行方法可以分为三种类型,分别对应Statement (用于执行不带参数的简单SQL语句字符串),PreparedStatement(预编译SQL语句)和CallableStatement(主要用于执行存储过程)三个接口。

    下面提供一个小例子
    import java.sql.*;
    public class HelloMysql {
        public static void main(String[] args) {
                    try {
                        Class.forName("com.mysql.jdbc.Driver");   
                    } catch (Exception e) {
                        System.out.println("驱动加载失败");
                    }
                    try {
                        String url ="jdbc:mysql://localhost:3306/mysql?user=root&password=Hl198711&useUnicode=true&characterEncoding=UTF-8";
                        Connection conn= DriverManager.getConnection(url);
                        Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
                        //Statement stmt=conn.createStatement();
                        String sql="select * from user";
                        ResultSet rs=stmt.executeQuery(sql);
                        while(rs.next()){
                        System.out.println(rs.getString(1)+"  "+rs.getString(2));
                        }
                    } catch (Exception e) {
                        System.out.println("加载数据库失败");
                    }

        }
    }

    引用地址:
     

    我要评论