使用JAVA、Hibernate连接SQLServer数据库

方式一:使用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.jarmssqlserver.jarmsutil.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.xmlSQLServer驱动连接配置更改为jtds驱动连接配置,具体如下:

<property name="connection.driver_class">

com.microsoft.jdbc.sqlserver.SQLServerDriver

</property>

<property name="connection.url">

jdbc:microsoft:sqlserver://localhost:1433;databasename=SPJ

</property>

<property name="connection.username">sa</property>

<property name="connection.password">root</property>

更改为:

<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">sa</property>

<property name="connection.password">root</property>

下面了解一下jtds:

JTDS是一个开放源代码的100%Java的,用于JDBC 3.0驱动Microsoft SQL Server 6.5 7 20002005版本)和Sybase10 11 12 15 版本)的驱动程序 JTDS是基于freetds的,并且是目前最快的生产准备JDBC驱动程序为SQL ServerSybase JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadataresultsetmetadata方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值