问题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(引自converse斑竹的帖子)
介绍连接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里用到的端口号,你必须把你程序里用
到的端口号,写成这里的值,这样才能解决上面的问题,当然你也可以在这里把端口号给该了,而保持程序不变!
问题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操作。
问题4:java.sql.SQLException
A:这个错误产生的原因一般是当你在一个SQL SERVER的JDBC连接上执行多个STATEMENTS的操作,或者是手动事务状态(AutoCommit=false) 并且使用 direct (SelectMethod=direct) 模式. Direct 模式是默认的模式.
解决办法
当你使用手动事务模式时,必须把SelectMethod 属性的值设置为 Cursor, 或者是确保在你的连接上只有一个STATEMENT操作。
问题5:xp下出现[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket
A:在WinXP sp2下,sqlserver 不能用jdbc,下载 sql server sp3,下载jdbc sp3的驱动,装上以后就正常了:下载Microsoft SQL Server 2000 Service Pack 3a并安装,SQL请选用混和安装模式;下载SQL Server 2000 Driver for JDBC Service Pack 3 并安装。
另外一种解决办法:本机的SQL Server 2000 当客户端,直接连接到主机(Windows XP)上的SQL Server 2000数据库,也就是在本机上新注册一个SQL Server,指向服务器上的SQL Server。这样再运行一下原来的Java 程序就不会出现Error establishing socket这个错误了
问题6:Microsoft JDBC "ResultSet Can Not Re-Read Row Data" Error
A:使用MS SQL Server 2000 SP3a/SP4做数据库服务器时,用Microsoft提供的JDBC驱动(2.2.0040),在查询时遇到一个SQLException:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column #。查询语句和JDBC代码都没有问题,怀疑是Microsoft驱动的BUG,google一下果然在Microsoft support站点发现了问题:http://support.microsoft.com/kb/824106,原因是如果该表存在TEXT, NTEXT, IMAGE等大型字段,对于ResultSet的字段读取必须按照从左向右读,如果你用:
int a = rs.getInt(2);
int b = rs.getInt(1);
则报错。Microsoft给出的方案是不能从右往左也不能连续读2次。没办法自己改代码,严格从左向右读,结果就没有问题了。
问题7:当oracle procedure中使用了事务时,jta的事务不起作用
A:用jdbc调用存储过程,存储过程中最好不要有事务,除非所有的数据库操作都在存储过程中完成;如果存储过程中有事务,该事务能提交或回滚本次同数据库会话中进行的所有操作。包括在程序中进行的还没有提交的操作;无论在jta还是在存储过程中的事务,其控制的对象都是同数据库的会话,所以其本质是一样的。
问题8:连接池不断增加直至weblogic down机
A:应该是程序建立连接的方式和关闭方式不当造成的,可以在连接池设置一下Inactive Connection Timeout。
问题9:SQL的服务自动停止的问题
A:错误原因:
线程试图对一个虚地址进行读或写,但没有做适当的存取。
解决方法 :
注意:从 SP3 安装 CD 或安装目录运行以下命令。在下面的步骤中,安装目录是 C:/sql2ksp3。
1. 在命令提示符处,运行以下命令,将 CAB 格式的自解压文件 SQLRedis.exe 中的文件解压缩到 C:/Extract 文件夹中:
C:/sql2ksp3/x86/other/sqlredis.exe /T:C:/Extract /C
注意:SQLRedis.exe 文件位于安装目录中的 /x86/Other 文件夹中。
2. 在 C:/Extract 文件夹中找到 Mdac_qfe.exe 文件,然后运行 Mdac_qfe.exe 文件。
3. “Microsoft Data Access Components Hotfix Installer”对话框打开,显示出您正在安装修复程序。单击“确定”,继续安装修复程序。
4. 成功安装 MDAC 修复程序 (Mdac_qfe.exe) 后,再次运行 SQL Server 2000 SP3 安装程序,成功完成安装。