方式一:使用jdbc-odbc桥连的方式来操作sql server数据库
方式二:使用jdbc驱动程序直接操作sql server数据库
历史:一开始,微软提供了odbc(Open DataBase Connection)供程序员操作数据库,后来,SUN公司便提供了jdbc-odbc驱动来与odbc做连接,再由odbc访问sql server数据库。但是这种方法效率不高,于是微软又向SUN提供了jdbc驱动,允许JAVA程序直接通过jdbc访问sql server数据库。(而hibernate则是一种更好的方法)
今天(2010/9/13),总算把SQLServer连接上了,总结一下过程中遇到的问题:
1、导入SQLServer需要的jar文件:msbase.jar、mssqlserver.jar、msutil.jar否则会报错误:java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver
2、下载SQLServer SP4补丁,这个问题烦扰比较久,最主要的问题是一开始下载错了补丁,下载到Analysis SQLServer SP4的补丁,所以一定要注意区别SQL2000.AS-KB884525-SP4-x86-CHS.exe补丁和SQL2000-KB884525-SP4-x86-CHS.exe前者多了AS,表明是Analysis SQLServer的补丁,安装时候会报要先安装Analysis SQLServer错误。
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
不过,不管怎么说,今天总算连接到了SQLServer SP4了,最大的感悟就是不能因为问题一下子卡住了就轻言放弃。
以下是实例:
package com.yilong.sqlserver.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
* jdbc方式去操作数据库
* 1、把java.sql.*
*
*/
public class SqlServer_jdbc {
public static void main(String[] args) {
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
try {
// 初始化我们的对象
// 1、加载驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// 2、得到连接
ct = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdbl",
"sa", "root");
// 3、创建preparestatement
ps = ct.prepareStatement("select *from emp");
// 4、执行[如果是增加,删除,修改 executeUpdate(),如果是查询 executeQuer();
rs = ps.executeQuery();
// 5、循环取出 雇员的名字,雇员的薪水,部门的编号
while (rs.next()) {
System.out.println(rs.getString("ename"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
System.out.println("RS Close Fail!");
}
rs = null;
}
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("PS Close Fail!");
}
ps = null;
}
if (ct != null) {
try {
ct.close();
} catch (SQLException e) {
System.out.println("Connection Close Fail!");
}
ct = null;
}
}
}
}
然后自己又使用了hibernate连接SQLServer,发现又出现了问题:
java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
后来,通过百度解决了,说法是:microsoft提供的数据库驱动存在bug,需要使用jtds驱动连接,于是下载了jtds,导入到项目中,并且把SQLServer驱动删掉,把hibernate.cfg.xml的SQLServer驱动连接配置更改为jtds驱动连接配置,具体如下:
com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://localhost:1433;databasename=SPJ
<property name="connection.username">saproperty>
<property name="connection.password">rootproperty>
更改为:
<property name="connection.driver_class">
net.sourceforge.jtds.jdbc.Driver
property>
<property name="connection.url">
jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=SPJ
property>
<property name="connection.username">saproperty>
<property name="connection.password">rootproperty>
下面了解一下jtds:
JTDS是一个开放源代码的100%纯Java的,用于JDBC 3.0驱动Microsoft SQL Server (6.5 ,7 ,2000和2005版本)和Sybase(10 ,11 ,12 ,15 版本)的驱动程序 。 JTDS是基于freetds的,并且是目前最快的生产准备JDBC驱动程序为SQL Server和Sybase 。 JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadata和resultsetmetadata方法。