JDBC
连接各种数据库经验技巧集萃
Java
数据库连接(
JDBC
)由一组用
Java
编程语言编写的类和接口组成。
JDBC
为工具
/
数据库开发人员提供了一个标准的
API
,使他们能够用纯
Java API
来编写数据库应用程序。然而各个开发商的接口并不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。
一、
连接各种数据库方式速查表
下面罗列了各种数据库使用
JDBC
连接的方式,可以作为一个手册使用。
1
、
Oracle8/8i/9i
数据库(
thin
模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl
为数据库的
SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2
、
DB2
数据库
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample
为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3
、
Sql Server7.0/2000
数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb
为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4
、
Sybase
数据库
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB
为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5
、
Informix
数据库
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER
=myserver;
user=testuser;password=testpassword"; //myDB
为数据库名
Connection conn= DriverManager.getConnection(url);
6
、
MySQL
数据库
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&
useUnicode=true&characterEncoding=8859_1" // myDB
为数据库名
Connection conn= DriverManager.getConnection(url);
7
、
PostgreSQL
数据库
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB" //myDB
为数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
8
、
access
数据库直连用
ODBC
的
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=
"+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;
二、
JDBC
连接
MySql
方式
下面是使用
JDBC
连接
MySql
的一个小的教程
1
、查找驱动程序
MySQL
目前提供的
java
驱动程序为
Connection/J
,可以从
MySQL
官方网站下载,并找到
mysql-connector-java-3.0.15-ga-bin.jar
文件,此驱动程序为纯
java
驱动程序,不需做其他配置。
2
、动态指定
classpath
如果需要执行时动态指定
classpath
,就在执行时采用-
cp
方式。否则将上面的
.jar
文件加入到
classpath
环境变量中。
3
、加载驱动程序
try{
Class.forName(com.mysql.jdbc.Driver);
System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
System.out.println(Error loading Mysql Driver!);
e.printStackTrace();
}
4
、设置连接的
url
jdbc
:
mysql
:
//localhost/databasename[?pa=va][
&
pa=va]
三、通过
JDBC
连接
oracle
数据库的十大技巧
1
、在客户端软件开发中使用
Thin
驱动程序
在开发
Java
软件方面,
Oracle
的数据库提供了四种类型的驱动程序,二种用于应用软件、
applets
、
servlets
等客户端软件,另外二种用于数据库中的
Java
存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择
OCI
驱动程序或
Thin
驱动程序。
OCI
驱动程序利用
Java
本地化接口(
JNI
),通过
Oracle
客户端软件与数据库进行通讯。
Thin
驱动程序是纯
Java
驱动程序,它直接与数据库进行通讯。为了获得最高的性能,
Oracle
建议在客户端软件的开发中使用
OCI
驱动程序,这似乎是正确的。但我建议使用
Thin
驱动程序,因为通过多次测试发现,在通常情况下,
Thin
驱动程序的性能都超过了
OCI
驱动程序。
2
、关闭自动提交功能,提高系统性能
在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值
false
参数的
Connection
类的
setAutoCommit()
方法关闭自动提交功能,如下所示:
conn.setAutoCommit(false);
值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用
Connection
类的
commit()
和
rollback()
方法来人工的方式对事务进行管理。
3
、在动态
SQL
或有时间限制的命令中使用
Statement
对象
在执行
SQL
命令时,我们有二种选择:可以使用
PreparedStatement
对象,也可以使用
Statement
对象。无论多少次地使用同一个
SQL
命令,
PreparedStatement
都只对它解析和编译一次。当使用
Statement
对象时,每次执行一个
SQL
命令时,都会对它进行解析和编译。这可能会使你认为,使用
PreparedStatement
对象比使用
Statement
对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的
SQL
操作中,除非成批地处理
SQL
命令,我们应当考虑使用
Statement
对象。
此外,使用
Statement
对象也使得编写动态
SQL
命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的
SQL
命令。因此,我认为,
Statement
对象可以使动态
SQL
命令的创建和执行变得更加简单。
4
、利用
helper
函数对动态
SQL
命令进行格式化
在创建使用
Statement
对象执行的动态
SQL
命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字
O'Reilly
插入表中的
SQL
命令,则必须使用二个相连的“
''
”号替换
O'Reilly
中的“
'
”号。完成这些工作的最好的方法是创建一个完成替换操作的
helper
方法,然后在连接字符串心服用公式表达一个
SQL
命令时,使用创建的
helper
方法。与此类似的是,我们可以让
helper
方法接受一个
Date
型的值,然后让它输出基于
Oracle
的
to_date()
函数的字符串表达式。
5
、利用
PreparedStatement
对象提高数据库的总体效率
在使用
PreparedStatement
对象执行
SQL
命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个
PreparedStatement
对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的
SQL
命令,使用
PreparedStatement
对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行
PreparedStatement
任务需要的时间长于
Statement
任务,我会建议在除动态
SQL
命令之外的所有情况下使用
PreparedStatement
对象。
6
、在成批处理重复的插入或更新操作中使用
PreparedStatement
对象
如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。
Oracle
提供的
Statement
和
CallableStatement
并不真正地支持批处理,只有
PreparedStatement
对象才真正地支持批处理。我们可以使用
addBatch()
和
executeBatch()
方法选择标准的
JDBC
批处理,或者通过利用
PreparedStatement
对象的
setExecuteBatch()
方法和标准的
executeUpdate()
方法选择速度更快的
Oracle
专有的方法。要使用
Oracle
专有的批处理机制,可以以如下所示的方式调用
setExecuteBatch()
:
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}
调用
setExecuteBatch()
时指定的值是一个上限,当达到该值时,就会自动地引发
SQL
命令执行,标准的
executeUpdate()
方法就会被作为批处理送到数据库中。我们可以通过调用
PreparedStatement
类的
sendBatch()
方法随时传输批处理任务。
7
、使用
Oracle locator
方法插入、更新大对象(
LOB
)
Oracle
的
PreparedStatement
类不完全支持
BLOB
和
CLOB
等大对象的处理,尤其是
Thin
驱动程序不支持利用
PreparedStatement
对象的
setObject()
和
setBinaryStream()
方法设置
BLOB
的值,也不支持利用
setCharacterStream()
方法设置
CLOB
的值。只有
locator
本身中的方法才能够从数据库中获取
LOB
类型的值。可以使用
PreparedStatement
对象插入或更新
LOB
,但需要使用
locator
才能获取
LOB
的值。由于存在这二个问题,因此,我建议使用
locator
的方法来插入、更新或获取
LOB
的值。
8
、使用
SQL92
语法调用存储过程
在调用存储过程时,我们可以使用
SQL92
或
Oracle PL/SQL
,由于使用
Oracle PL/SQL
并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用
SQL92
。
9
、使用
Object SQL
将对象模式转移到数据库中
既然可以将
Oracle
的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建
Java bean
作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些
bean
中添加方法。尽管这样作在
Java
中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用
Oracle
的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用
JPublisher
等工具生成自己的
Java bean
类。如果使用这种方式,不但
Java
应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。
10
、利用
SQL
完成数据库内的操作
我要向大家介绍的最重要的经验是充分利用
SQL
的面向集合的方法来解决数据库处理需求,而不是使用
Java
等过程化的编程语言。
如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的
UPDATE
命令来成批地更新第一个表中的数据。与此类似的任务可以通过在
set
子句中使用多列子查询而在一个
UPDATE
命令中完成。当能够在单一的
SQL
命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥
SQL
的功能。