-问题1:出现ClassNotFoundException,这个问题是由于你没有把driver类放到你的classpath中,也就是说
你的程序找不到驱动类,包括三个包:msutil.jar,msbase.jar,mssqlserver.jar
--解决:jb:可以在工程属性中加入这三个包,netbean:可以把这三个包copy到某一个 lib下,也就是某个类的公共库中
--问题2:出现[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket,这个错误,不论在什么容器下,凡是出现这种错误的,都可以说不是程序本身的错误,因为大部分人都知道:
jdbc:microsoft:sqlserver://localhost:1433;这样写是对的,但为什么这样写呢
######################################################################
如何用jdbc连接到sqlserver2000(翻译英文原裆)(1)
介
绍了连接server2000的方法之一:使用DriverManager.getConnection(...)连接到数据库有两种方法,one
is :with a connection url through the jdbc driver manager,another is
with a jndi datasource.
我们先说第一种:使用DriverManager.getConnection()方法
第一:你需要设置classpath,它是你得jvm加载类时所要寻找的路径。
当然首先你要有jdbs driver for sqlserver。
设置环境变量:window os:set classpath=.;${your path to save the driver}/msbase.jar;${}/mssqlserver.jar;${}/msutil.jar
第二:注册你的驱动registering the driver
注册驱动告诉你得jdbc管理器去加载什么驱动程序类,
当使用class.forName(),你必须指定驱动类名称,
com.microsoft.jdbc.sqlserver.SQLServerDriver.例如:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
第
三:在注册完一个驱动类后,你必须把你的数据库的物理信息以一个url的形式传给管理器,下面是一个url模版:jdbc:microsoft:
sqlserver://server_name:port,其中server2000默认的端口号为:1433.下面是一个例子:
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://server_name:1433","userName","password");
注:这里的server_name必须是一个ip address,或者一个主机名,你可以使用ping命令来测试你的主机名是否传回一个正确的ip address
下面是 连接url的属性解释:
------------------------------------------------------------------------------
---属性----------------------------------------说明--------------
--DatabaseName(0) ------the name of the sql server database to which you want to connect
--HostProcess (O) ------the process ID of the application connecting to SQL Server 2000.The supplied value
------appears in the "hostprocess" column of the sysprocesses table.
--NetAddress(O)
------the MAC address of the network interface card of the application
connnecting to sql
-----server 2000.the supplied value appears in the "net_address"
column of the sysprocesses
------table.
--Password ------the case-insensitive password used to connect to your sql server database.
--PortNumber(O) ------the tcp 端口号(一般在使用datasource时使用)默认为:1433
--ProgramName(0)
------the name of the application connecting to sql server 2000,the
supplied value appears in
------the "program_name" column of the sysprocesses table
--SelectMethod
------SelectMethod={cursor|direct}.determines wherther database cursors
are used for select
------statements .performance and behavior of the driver are affected
by the selectMethod
-------setting.Direct:->the direct method sends the complete results
set in one request to the
----driver
.it is useful for queries that only produce a small amount of data that
you fetch -----completely,you should avoid
using direct when executing queries that produce a large amount
of ----data,as the result set is cached
completely on the client and constrains memory .In this mode,each
-------------------------->statement
requires its connection to the database.this is accomplished by cloing
connections .cloned ------------------------->connections use the
same connection properties as the original connection;however,because
transactions ------------------->occur on a single connection,auto
commit mode is required,Due to this,JTA is not supported in direct
mode.In
------------------>addition,some operations,such as
updating an insensitive result set,are not supported in direct mode
because ---------->driver create a second statement
internally.Exceptions generated due to the creation of cloned
statements usually return an error message similar to "Cannot start a
cloned connection while in manual transaction mode"
----------------------------->Cursor:
--------------------->when the selectMode is set to cursor ,a server-side cursor is generated .行被一块的方式提取出来,JDBC语句
-----------------setFetchSize这时候就起作用了,它可以控制每次提取的行数,cursor值在查询结果产生大量数据的时候非常有用,并且也用在
-------------〉jta中,但是setFetchSize具体设置多大,这是没有什么规则的,你必须多多尝试!
###################################
--解决:启动你的sqlserver2000的服务器网络实用工具后,确保你的Tcp/Ip协议已启动,默认的应该都启动了,这是进行通讯的条件一
然后,在选中Tcp/Ip协议后点击属性,就看到了一个默认端口号,这就是你在 getConnection里用到的端口号,你必须把你程序里用
到的端口号,写成这里的值,这样才能解决上面的问题,当然你也可以在这里把端口号给该了,而保持程序不变!1433
--问题3:有些时候也连接上了,但就是不能访问,或者提示说sql语句有错误
--解决:这些都是管理sqlServer2000所需要注意的,或许你没有给这个用户分配足够的权限,或者你的sql语句中用到了sqlserver里保留的
关键字,我就遇到了这样一个问题:我写了个 select * from USER这个语句怎么执行都不对,后来看了分析器,才知道这是一个关键字,你
不可以用它来命名的!
错
误:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for
JDBC]Can't start a cloned connection while in manual transaction mode.
A:
这个错误产生的原因一般是当你在一个SQL
SERVER的JDBC连接上执行多个STATEMENTS的操作,或者是手动事务状态(AutoCommit=false) 并且使用 direct
(SelectMethod=direct) 模式. Direct 模式是默认的模式.
解决办法
当你使用手动事务模式时,必须把SelectMethod 属性的值设置为 Cursor, 或者是确保在你的连接上只有一个STATEMENT操作。
阅读(1808) | 评论(0) | 转发(0) |