一、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的
分享到:
相关推荐
Eclipse JDBC驱动加载包是Java开发环境中用于连接数据库的重要组件,尤其在Eclipse IDE中,它使得开发者能够方便地操作数据库,执行SQL查询,进行数据的增删改查操作。JDBC(Java Database Connectivity)是Java语言...
使用JDBC驱动时,首先需要加载驱动,然后创建数据库连接,接着可以通过Statement或PreparedStatement对象执行SQL,最后关闭连接。对于Access数据库,需要特定的JDBC-ODBC桥接驱动或者由第三方提供的直接JDBC驱动。 ...
在实际开发中,我们常常会将JDBC驱动的JAR文件添加到项目的类路径(classpath)中,以便运行时能正确地加载和使用驱动。例如,对于Maven项目,可以在pom.xml文件中添加对应的依赖;对于非Maven项目,可以将JAR文件放...
2. **加载驱动**:使用`Class.forName()`方法加载JDBC驱动。 3. **创建连接**:通过`DriverManager.getConnection()`方法建立与Sybase数据库的连接,需要提供数据库URL、用户名和密码。 4. **创建Statement或...
下面将详细介绍SQL Server 2005的JDBC驱动以及如何加载它。 首先,了解JDBC驱动的分类。JDBC驱动有四种类型,分别是Type 1、Type 2、Type 3和Type 4。对于SQL Server 2005,我们使用的是Type 4驱动,这是一种纯Java...
1. **加载驱动**:在Java程序中,首先需要通过`Class.forName()`方法加载相应的JDBC驱动类。 2. **建立连接**:使用`DriverManager.getConnection()`方法,传入数据库URL、用户名和密码来建立连接。 3. **创建...
例如,你可以使用`Statement`或`PreparedStatement`对象来执行SQL语句,`ResultSet`对象则用于存储查询结果。 总的来说,KingbaseV8 JDBC驱动是Java应用程序与KingbaseV8数据库通信的关键,提供了多种版本以适应...
3. **Statement、PreparedStatement和CallableStatement接口**:它们分别用于执行简单的SQL语句、预编译的SQL语句和调用存储过程。 4. **ResultSet接口**:存储查询结果,提供遍历查询结果集的方法。 5. **...
Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象执行的SQL语句是直接编译的,而...
2. 使用Class.forName()方法加载JDBC驱动。 3. 使用DriverManager.getConnection()方法建立与数据库的连接。 4. 创建Statement或PreparedStatement对象,执行SQL语句。 5. 处理查询结果,关闭资源(Connection、...
SQL Server 2008 JDBC驱动还支持一些高级特性,如读写分离、分布式事务、大数据类型处理(如XML和二进制数据)、JDBC批处理以及SQL Server特有的功能(如Service Broker或Integration Services)。 9. **错误处理*...
JDBC主要由驱动程序管理器、驱动程序、连接、Statement、PreparedStatement和ResultSet等组件构成。 2. **MySQL JDBC驱动**: MySQL JDBC驱动,也称为Connector/J,是用于连接Java应用程序和MySQL数据库的接口。它...
Informix JDBC驱动程序实现了这一接口,使得Java开发者可以利用Java语言访问Informix数据库,进行数据查询、更新、插入和删除等操作。 标题中的“informix jdbc驱动”指的是专门针对Informix数据库的JDBC驱动程序,...
总结来说,MySQL JDBC驱动包8.0.11是Java开发者连接到MySQL数据库的关键组件,特别是在JSP应用中,它使得数据库操作变得更加简单和直接。正确配置和使用这个驱动,可以有效地提升Web应用的数据处理能力。
- 加载和注册JDBC驱动:通过`Class.forName()`加载驱动类。 - 获取数据库连接:使用`DriverManager.getConnection()`创建连接。 - 创建Statement或PreparedStatement对象:根据需求选择,Statement用于一般SQL...
JDBC驱动是实现这个接口的具体软件,它们作为中间层,负责在Java应用程序和数据库之间传递SQL命令和数据。 1. **JDBC驱动类型**: - **Type 1(JDBC-ODBC桥接驱动)**:最原始的JDBC驱动类型,依赖于操作系统级别...
在这个压缩包中,包含了两个关键的JDBC驱动文件:sqljdbc4.jar和sqljdbc.jar。 1. **sqljdbc4.jar**: 这个JAR文件是SQL Server JDBC驱动的版本4,适用于Java 6及以上版本。它提供了全面的功能,包括支持JDBC 4.0...
在使用这些驱动时,开发者首先需要将对应的JAR文件添加到项目的类路径中,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接,`Statement`和`PreparedStatement`对象执行SQL语句,最后用...
通常,开发者会将这个JAR文件添加到Java项目的类路径(classpath)中,以便在运行时能够正确地加载和使用驱动。 使用JDBC驱动的基本步骤包括: 1. 加载驱动:使用`Class.forName()`方法加载特定的JDBC驱动类。 2. ...
这些驱动的使用通常涉及以下步骤:加载驱动(Class.forName())、建立连接(Connection conn = DriverManager.getConnection())、创建Statement或PreparedStatement对象、执行SQL、处理结果集,最后关闭连接。...