JDBC备忘录1_JDBC入门

JDBC全称 Java Data Base Connectivity

Java数据库连接

JDBC API由两部分构成:

java.sql.*和javax.sql.*

java.sql.*提供JDBC基本操作的API,包括数据库连接,增删改查之类的基础API

javax.sql.*提供JDBC的高级操作,为通过Java进行服务器数据源访问和处理提供的API


JDBC连接数据库的基本步骤:

(1)注册驱动(只做一次);

(2)建立连接 Connection

(3)创建执行SQL的语句的对象 Statement和PreparedStatement

(4)执行sql语句

(5)处理结果集 ResultSet

(6)释放资源,关闭数据库连接

注册驱动的方式:

(1)Class.forName("com.mysql.jdbc.Driver")

将class转载到虚拟机中,但是并不创建实例(newInstance才创建实例)

推荐采用这种方式,不会对具体的驱动类产生依赖;

这种方式没有显示注册驱动,而是在载入虚拟机的时候通过静态代码块的方式来实现驱动注册。详见 mysql Driver类的实现

        //将class装载到虚拟机中,并不创建实例
        //Class.forName("com.mysql.jdbc.Driver");

        //创建实例
        //Class.forName("com.mysql.jdbc.Driver").newInstance();

(2)DriverManager.registerDriver(new com.mysql.jdbc.Driver());

会造成DriverManager中产生两个一样的驱动(mysql Drive的实现类),并会对具体的驱动类产生依赖,因为你需要new一个具体的驱动类。

      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

(3)System.setProperty("jdbc.drivers", "driver1:driver2");

虽然不会对具体的驱动类产生依赖,但注册不方便,所以很少使用。

//System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

环境变量名是“jdbc.drivers”,可以注册多个驱动,多个驱动以冒号分割,多个驱动类使用Vector保存

DriverManager类

    private static void loadInitialDrivers() {
        String drivers;
	
        try {
	    drivers = (String) java.security.AccessController.doPrivileged(
		new sun.security.action.GetPropertyAction("jdbc.drivers"));
        } catch (Exception ex) {
            drivers = null;
        }
        
        // If the driver is packaged as a Service Provider,
        // load it.
        
        // Get all the drivers through the classloader 
        // exposed as a java.sql.Driver.class service.
	
	 DriverService ds = new DriverService();

	 // Have all the privileges to get all the 
	 // implementation of java.sql.Driver
	 java.security.AccessController.doPrivileged(ds);		
	        
         println("DriverManager.initialize: jdbc.drivers = " + drivers);
        if (drivers == null) {
            return;
        }
        while (drivers.length() != 0) {
            int x = drivers.indexOf(':');
            String driver;
            if (x < 0) {
                driver = drivers;
                drivers = "";
            } else {
                driver = drivers.substring(0, x);
                drivers = drivers.substring(x+1);
            }
            if (driver.length() == 0) {
                continue;
            }
            try {
                println("DriverManager.Initialize: loading " + driver);
                Class.forName(driver, true,
			      ClassLoader.getSystemClassLoader());
            } catch (Exception ex) {
                println("DriverManager.Initialize: load failed: " + ex);
            }
        }
    }

四种驱动类型:

1、 JDBC-ODBC bridge plus ODBC driver:        JDBC-ODBC桥驱动程序,将JDBC调用转换为ODBC的调用。( This combination provides JDBC access via ODBC drivers. ODBC binary code--and in many cases, database client code-- must be loaded on each client machine that uses a JDBC-ODBC Bridge. Sun provides a JDBC-ODBC Bridge driver, which is appropriate for experimental use and for situations in which no other driver is available.)注意, 必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。这种类型的驱动程序最适合于企业网(这种网络上客户 机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

2、Native-API partly-Java driver:  将JDBC调用转换为对数据库客户端API的调用。(A native-API partly Java technology-enabled driver: This type of driver converts JDBC calls into calls on the client API for Oracle, Sybase, Informix, DB2, or other DBMS. Note that, like the bridge driver, this style of driver requires that some binary code be loaded on each client machine.)这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调 用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。


3、 Pure Java Driver for Database Middleware: 先将JDBC调用转换为DBMS-independent网络协议,然后由服务器端的中间件转换为具体数据库服务器可以接收的网络协议。(net- protocol fully Java technology-enabled driver #This style of driver translates JDBC calls into the middleware vendor's protocol, which is then translated to a DBMS protocol by a middleware server. The middleware provides connectivity to many different databases.)这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的 JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理 Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

4、 Direct-to-Database Pure Java Driver:    将JDBC调用直接转换为具体数据库服务器可以接收的网络协议。(native-protocol fully Java technology-enabled driver #This style of driver converts JDBC calls into the network protocol used directly by DBMSs, allowing a direct call from the client machine to the DBMS server and providing a practical solution for intranet access.)这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数 据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。

   第3、4类驱动程序将成为从JDBC访问数据库的首选方法。第1、2类驱动程序在直接的纯Java驱动程序还没有上市前将会作为过渡方案来使用。对第1、 2类驱动程序可能会有一些变种(下表中未列出),这些变种要求有连接器,但通常这些是更加不可取的解决方案。第3、4类驱动程序提供了Java的所有优 点,包括自动安装(例如,通过使用JDBC驱动程序的applet applet来下载该驱动程序)。

数据库连接的基本步骤

1、注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

2、建立连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "123");

3、创建执行语句
Statement st = conn.createStatement();

4、执行语句
ResultSet rs = st.executeQuery("select * from user");

5、结果处理:
		while(rs.next()) {
			Integer id = rs.getObject(1);
			Integer name = rs.getObject(2);
			Integer birthday = rs.getObject(2);
			Integer money = rs.getObject(2);
			
			System.out.println("id = " + id + ", name = " + name + ", " 
					+ "birthday = " + birthday + ", money = " + money);
		}

猜你喜欢

转载自paladin1988.iteye.com/blog/1888974