`
dbjoy
  • 浏览: 9508 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

JDBC驱动的加载和注册及statement、preparedStatement

阅读更多
一、JDBC驱动加载和注册
Class.forName("org.hsqldb.jdbcDriver");

这行代码是用于加载一个JDBC驱动并注册这个已经加载的驱动,可是我们并没有看到加载和注册的代码片段,这行代码的背后隐藏着些什么呢?先来看看org.hsqldb.jdbcDriver这个类的java源代码:

public class jdbcDriver
    implements Driver
{

    public jdbcDriver()
    {
    }

    public Connection connect(String s, Properties properties)
        throws SQLException
    {
        return getConnection(s, properties);
    }

    public static Connection getConnection(String s, Properties properties)
        throws SQLException
    {
        HsqlProperties hsqlproperties = DatabaseURL.parseURL(s, true);
        if (hsqlproperties == null)
            throw new SQLException(Trace.getMessage(62));
        if (hsqlproperties.isEmpty())
        {
            return null;
        } else
        {
            hsqlproperties.addProperties(properties);
            return new jdbcConnection(hsqlproperties);
        }
    }

    public boolean acceptsURL(String s)
    {
        return s != null && s.regionMatches(true, 0, "jdbc:hsqldb:", 0, "jdbc:hsqldb:".length());
    }

    public DriverPropertyInfo[] getPropertyInfo(String s, Properties properties)
    {
        String as[] = {
            "true", "false"
        };
        DriverPropertyInfo adriverpropertyinfo[] = new DriverPropertyInfo[6];
        DriverPropertyInfo driverpropertyinfo = new DriverPropertyInfo("user", null);
        driverpropertyinfo.value = properties.getProperty("user");
        driverpropertyinfo.required = true;
        adriverpropertyinfo[0] = driverpropertyinfo;
        driverpropertyinfo = new DriverPropertyInfo("password", null);
        driverpropertyinfo.value = properties.getProperty("password");
        driverpropertyinfo.required = true;
        adriverpropertyinfo[1] = driverpropertyinfo;
        driverpropertyinfo = new DriverPropertyInfo("get_column_name", null);
        driverpropertyinfo.value = properties.getProperty("get_column_name", "true");
        driverpropertyinfo.required = false;
        driverpropertyinfo.choices = as;
        adriverpropertyinfo[2] = driverpropertyinfo;
        driverpropertyinfo = new DriverPropertyInfo("ifexists", null);
        driverpropertyinfo.value = properties.getProperty("ifexists");
        driverpropertyinfo.required = false;
        driverpropertyinfo.choices = as;
        adriverpropertyinfo[3] = driverpropertyinfo;
        driverpropertyinfo = new DriverPropertyInfo("default_schema", null);
        driverpropertyinfo.value = properties.getProperty("default_schema");
        driverpropertyinfo.required = false;
        driverpropertyinfo.choices = as;
        adriverpropertyinfo[4] = driverpropertyinfo;
        driverpropertyinfo = new DriverPropertyInfo("shutdown", null);
        driverpropertyinfo.value = properties.getProperty("shutdown");
        driverpropertyinfo.required = false;
        driverpropertyinfo.choices = as;
        adriverpropertyinfo[5] = driverpropertyinfo;
        return adriverpropertyinfo;
    }

    public int getMajorVersion()
    {
        return 1;
    }

    public int getMinorVersion()
    {
        return 8;
    }

    public boolean jdbcCompliant()
    {
        return false;
    }

    static 
    {
        try
        {
            DriverManager.registerDriver(new jdbcDriver());
        }
        catch (Exception exception) { }
    }
}

注意到最后的代码片段是一个被static包含的静态语句块:

static 
    {
        try
        {
            DriverManager.registerDriver(new jdbcDriver());
        }
        catch (Exception exception) { }
    }

java的运行机制,静态语句块是在类的class文件首次被装载到JVM中时马上就要执行并且只执行一次的代码,所以当我们使用Class.forName("org.hsqldb.jdbcDriver");把的class文件装载到JVM时,这行代码背后就通过上面的静态语句块已经完成了JDBC驱动的加载实例化并使用DriverManager类注册这个驱动的操作了



二、statement、preparedStatement

Statement是用于向数据库发送SQL语句、执行SQL语句并返回结果。
当你需要多次使用一个Statement对象时,使用PreparedStatement对象更有效率。PreparedStatement对象和Statement对象不同的是,PreparedStatement对象在实例化创建时就被设置了一个SQL语句,使用PreparedStatement对象执行的SQL语句在首次发送到数据库时,SQL语句会被编译,所以PreparedStatement对象是一个包含了已经预编译SQL语句的对象,这样当多次执行同一个SQL语句时,就不用每次都去编译SQL语句,而是直接执行已经编译过的SQL语句。
经过代码测试:

Connection conn = JdbcUtil.getDefaultConnection();
        Statement stmt = JdbcUtil.getDefaultConnection().createStatement();
        int executeTime = 1000000;
        long start = System.currentTimeMillis();
        for (int i = 0; i < executeTime; i++) {
            stmt.executeQuery("select * from coffees");
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        PreparedStatement preStmt = conn
            .prepareStatement("select * from coffees");
        long preStart = System.currentTimeMillis();
        for (int i = 0; i < executeTime; i++) {
            preStmt.executeQuery();
        }
        long preEnd = System.currentTimeMillis();
        System.out.println(preEnd - preStart);

        assertTrue((end - start) > (preEnd - preStart));

        // 关闭jdbc相关对象
        stmt.close();
        preStmt.close();
        conn.close();


使用Statement对象和PreparedStatement对象执行同一个SQL语句1000000次所消耗的时间分别为:
Statement:112406
PreparedStatement:85953
可以看出PrepareStatment执行SQL语句的效率确实会提高。所以在日常开发中,我们是优先使用preparedstatement的
1
0
分享到:
评论

相关推荐

    eclipse jdbc驱动加载包

    Eclipse JDBC驱动加载包是Java开发环境中用于连接数据库的重要组件,尤其在Eclipse IDE中,它使得开发者能够方便地操作数据库,执行SQL查询,进行数据的增删改查操作。JDBC(Java Database Connectivity)是Java语言...

    access的jdbc驱动

    使用JDBC驱动时,首先需要加载驱动,然后创建数据库连接,接着可以通过Statement或PreparedStatement对象执行SQL,最后关闭连接。对于Access数据库,需要特定的JDBC-ODBC桥接驱动或者由第三方提供的直接JDBC驱动。 ...

    jdbc驱动jar包.zip

    在实际开发中,我们常常会将JDBC驱动的JAR文件添加到项目的类路径(classpath)中,以便运行时能正确地加载和使用驱动。例如,对于Maven项目,可以在pom.xml文件中添加对应的依赖;对于非Maven项目,可以将JAR文件放...

    sybase 数据库 jdbc 驱动下载

    2. **加载驱动**:使用`Class.forName()`方法加载JDBC驱动。 3. **创建连接**:通过`DriverManager.getConnection()`方法建立与Sybase数据库的连接,需要提供数据库URL、用户名和密码。 4. **创建Statement或...

    SQLSERVER2005最新JDBC驱动和加载方式

    下面将详细介绍SQL Server 2005的JDBC驱动以及如何加载它。 首先,了解JDBC驱动的分类。JDBC驱动有四种类型,分别是Type 1、Type 2、Type 3和Type 4。对于SQL Server 2005,我们使用的是Type 4驱动,这是一种纯Java...

    最新Oracle_11g JDBC驱动包

    1. **加载驱动**:在Java程序中,首先需要通过`Class.forName()`方法加载相应的JDBC驱动类。 2. **建立连接**:使用`DriverManager.getConnection()`方法,传入数据库URL、用户名和密码来建立连接。 3. **创建...

    kingbaseV8 jdbc 驱动

    例如,你可以使用`Statement`或`PreparedStatement`对象来执行SQL语句,`ResultSet`对象则用于存储查询结果。 总的来说,KingbaseV8 JDBC驱动是Java应用程序与KingbaseV8数据库通信的关键,提供了多种版本以适应...

    神通数据库JDBC驱动包

    3. **Statement、PreparedStatement和CallableStatement接口**:它们分别用于执行简单的SQL语句、预编译的SQL语句和调用存储过程。 4. **ResultSet接口**:存储查询结果,提供遍历查询结果集的方法。 5. **...

    Statement和PreparedStatement之间的区别

    Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象执行的SQL语句是直接编译的,而...

    常用数据库jdbc驱动

    2. 使用Class.forName()方法加载JDBC驱动。 3. 使用DriverManager.getConnection()方法建立与数据库的连接。 4. 创建Statement或PreparedStatement对象,执行SQL语句。 5. 处理查询结果,关闭资源(Connection、...

    sql server2008 jdbc驱动

    SQL Server 2008 JDBC驱动还支持一些高级特性,如读写分离、分布式事务、大数据类型处理(如XML和二进制数据)、JDBC批处理以及SQL Server特有的功能(如Service Broker或Integration Services)。 9. **错误处理*...

    各种数据库的jdbc驱动

    JDBC主要由驱动程序管理器、驱动程序、连接、Statement、PreparedStatement和ResultSet等组件构成。 2. **MySQL JDBC驱动**: MySQL JDBC驱动,也称为Connector/J,是用于连接Java应用程序和MySQL数据库的接口。它...

    informix jdbc驱动

    Informix JDBC驱动程序实现了这一接口,使得Java开发者可以利用Java语言访问Informix数据库,进行数据查询、更新、插入和删除等操作。 标题中的“informix jdbc驱动”指的是专门针对Informix数据库的JDBC驱动程序,...

    mysql-jdbc驱动包8.0.11

    总结来说,MySQL JDBC驱动包8.0.11是Java开发者连接到MySQL数据库的关键组件,特别是在JSP应用中,它使得数据库操作变得更加简单和直接。正确配置和使用这个驱动,可以有效地提升Web应用的数据处理能力。

    第10章 JDBC-课后习题1

    - 加载和注册JDBC驱动:通过`Class.forName()`加载驱动类。 - 获取数据库连接:使用`DriverManager.getConnection()`创建连接。 - 创建Statement或PreparedStatement对象:根据需求选择,Statement用于一般SQL...

    JDBC驱动及JAR包

    JDBC驱动是实现这个接口的具体软件,它们作为中间层,负责在Java应用程序和数据库之间传递SQL命令和数据。 1. **JDBC驱动类型**: - **Type 1(JDBC-ODBC桥接驱动)**:最原始的JDBC驱动类型,依赖于操作系统级别...

    sqlserver 2008 jdbc 驱动包

    在这个压缩包中,包含了两个关键的JDBC驱动文件:sqljdbc4.jar和sqljdbc.jar。 1. **sqljdbc4.jar**: 这个JAR文件是SQL Server JDBC驱动的版本4,适用于Java 6及以上版本。它提供了全面的功能,包括支持JDBC 4.0...

    jdbc 驱动包合集

    在使用这些驱动时,开发者首先需要将对应的JAR文件添加到项目的类路径中,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接,`Statement`和`PreparedStatement`对象执行SQL语句,最后用...

    JDBC驱动8.0.25JAR.zip

    通常,开发者会将这个JAR文件添加到Java项目的类路径(classpath)中,以便在运行时能够正确地加载和使用驱动。 使用JDBC驱动的基本步骤包括: 1. 加载驱动:使用`Class.forName()`方法加载特定的JDBC驱动类。 2. ...

    所有的JDBC驱动大全

    这些驱动的使用通常涉及以下步骤:加载驱动(Class.forName())、建立连接(Connection conn = DriverManager.getConnection())、创建Statement或PreparedStatement对象、执行SQL、处理结果集,最后关闭连接。...

Global site tag (gtag.js) - Google Analytics