JDBC错误大全

问题1:出现ClassNotFoundException

这个问题是由于你没有把driver类放到你的classpath中,也就是说你的程序找不到驱动类,包括三个包:msutil.jar,msbase.jar,mssqlserver.jar

--解决:jb:可以在工程属性中加入这三个包,netbean:可以把这三个包copy到某一个 lib下,也就是某个类的公共库中。

问题2:出现[Microsof

问题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操作。

问题4java.sql.SQLException

A:这个错误产生的原因一般是当你在一个SQL SERVER的JDBC连接上执行多个STATEMENTS的操作,或者是手动事务状态(AutoCommit=false) 并且使用 direct (SelectMethod=direct) 模式. Direct 模式是默认的模式.

解决办法

当你使用手动事务模式时,必须把SelectMethod 属性的值设置为 Cursor, 或者是确保在你的连接上只有一个STATEMENT操作。

问题5xp出现[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这个错误了

问题6Microsoft 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次。没办法自己改代码,严格从左向右读,结果就没有问题了。

问题7oracle procedure中使用了事务时,jta的事务不起作用

A:用jdbc调用存储过程,存储过程中最好不要有事务,除非所有的数据库操作都在存储过程中完成;如果存储过程中有事务,该事务能提交或回滚本次同数据库会话中进行的所有操作。包括在程序中进行的还没有提交的操作;无论在jta还是在存储过程中的事务,其控制的对象都是同数据库的会话,所以其本质是一样的。

问题8:连接池不断增加直至weblogic down机

A:应该是程序建立连接的方式和关闭方式不当造成的,可以在连接池设置一下Inactive Connection Timeout。

问题9SQL的服务自动停止的问题

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 安装程序,成功完成安装。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1596628t][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操作。

问题4java.sql.SQLException

A:这个错误产生的原因一般是当你在一个SQL SERVER的JDBC连接上执行多个STATEMENTS的操作,或者是手动事务状态(AutoCommit=false) 并且使用 direct (SelectMethod=direct) 模式. Direct 模式是默认的模式.

解决办法

当你使用手动事务模式时,必须把SelectMethod 属性的值设置为 Cursor, 或者是确保在你的连接上只有一个STATEMENT操作。

问题5xp出现[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这个错误了

问题6Microsoft 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次。没办法自己改代码,严格从左向右读,结果就没有问题了。

问题7oracle procedure中使用了事务时,jta的事务不起作用

A:用jdbc调用存储过程,存储过程中最好不要有事务,除非所有的数据库操作都在存储过程中完成;如果存储过程中有事务,该事务能提交或回滚本次同数据库会话中进行的所有操作。包括在程序中进行的还没有提交的操作;无论在jta还是在存储过程中的事务,其控制的对象都是同数据库的会话,所以其本质是一样的。

问题8:连接池不断增加直至weblogic down机

A:应该是程序建立连接的方式和关闭方式不当造成的,可以在连接池设置一下Inactive Connection Timeout。

问题9SQL的服务自动停止的问题

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 安装程序,成功完成安装。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1596628 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JDBC(Java数据库连接)是Java程序与数据库之间进行交互的重要工具。JDBC 8.0.11是JDBC的一个版本,但在使用过程中,可能会遇到一些常见错误。以下是几种常见的错误: 1. ClassNotFoundException(类未找到异常):这通常是由于未找到JDBC驱动程序引起的。在使用JDBC时,需要确保正确配置了驱动程序的类路径,并且驱动程序的jar文件已经导入到项目中。 2. SQLException(SQL异常):这是由于SQL语句执行或连接数据库过程中出现的问题。常见的原因有:错误SQL语法、连接数据库时的用户名或密码错误数据库服务器关闭等。在遇到SQLException时,我们需要仔细检查SQL语句的正确性,并确保数据库连接参数的正确性。 3. ConnectException(连接异常):这是由于无法连接到数据库服务器引起的。可能的原因包括:数据库服务器地址或端口号配置错误、网络连接故障、数据库服务器未启动等。在遇到连接异常时,我们需要确保数据库服务器处于正常运行状态,并检查连接参数的准确性。 4. DataConversionException(数据转换异常):这是由于数据类型转换错误引起的。在使用JDBC时,Java和数据库之间的数据类型需要正确匹配。在进行数据操作时,需要确保正确的数据类型转换,以避免此类异常。 5. BatchUpdateException(批处理异常):这是由于批处理操作中某一项失败,导致整个批处理操作失败引起的。在进行批处理操作时,需要逐一检查每一条SQL语句的执行结果,并处理其中的异常情况。 总之,JDBC 8.0.11在使用过程中可能会遇到上述常见错误,我们需要仔细检查代码、确保配置正确、处理异常情况,以保证程序与数据库的正常交互。 ### 回答2: JDBC 8.0.11是Java数据库连接(JDBC)的一个版本,用于在Java程序和数据库之间进行通信。在使用这个版本时,可能会遇到一些常见的错误。下面是一些可能会出现的错误和解决方法: 1. ClassNotFoundException:这个错误通常发生在Java程序无法找到JDBC驱动程序时。解决方法是确保已经将JDBC驱动程序的jar文件添加到项目的类路径中。 2. SQLException:这是一个在与数据库交互时常见的错误。这个错误可能会发生在连接数据库、执行查询或更新语句时。解决方法是检查数据库连接URL、用户名和密码是否正确,并确保数据库服务器运行正常。 3. NullPointerException:这个错误通常表示代码中的空指针引用。在使用JDBC时,可能会发生这个错误,比如在尝试使用已关闭的连接或未初始化的变量时。解决方法是仔细检查代码并确保所有的对象都被正确地初始化和关闭。 4. BatchUpdateException:在批量执行更新操作时可能会出现这个异常。这个异常表示在执行一批更新语句时,其中一个或多个语句执行失败。解决方法是检查每个更新语句的语法和逻辑,并确保它们正确地执行。 5. DataTruncation:这个异常通常发生在尝试将数据插入到字段中,而字段长度不足以容纳该数据。解决方法是检查数据库表结构的设计,并确保字段长度足够容纳所需的数据。 这些是一些JDBC 8.0.11常见的错误和解决方法。当使用JDBC时,遇到错误是很常见的,但通过仔细检查和调试代码,可以很容易地解决这些问题,并确保与数据库的正常通信。 ### 回答3: JDBC 8.0.11是Java连接数据库的一个版本,虽然它相对较新,但仍然有一些常见的错误可能发生。以下是几个常见的错误以及可能的解决方案: 1. ClassNotFoundException:这个错误意味着无法找到指定的JDBC驱动程序。解决方法是检查你的类路径中是否包含正确的驱动程序JAR文件,并确保在连接数据库之前加载驱动程序。 2. SQLException:这个错误通常表示在执行SQL查询或更新时出现问题。可能的原因包括SQL语句的语法错误、无效的表或列名称以及数据库连接问题。为了解决这个问题,首先检查你的SQL语句的正确性,并确保数据库连接的可用性。 3. ConnectionTimeoutException:这个错误意味着连接数据库的超时时间已过。这可能是由于网络问题、数据库服务器负载过高或数据库连接池配置不正确等原因引起的。要解决这个问题,可以尝试增加连接超时时间,并确保数据库服务器的正常运行。 4. IntegrityConstraintViolationException:这个错误意味着在数据库表中违反了完整性约束,例如主键或唯一键冲突。解决这个问题的方法是检查数据插入或更新的值是否满足表中的约束条件,并确保只插入或更新有效的数据。 5. ResultSetClosedException:这个错误意味着试图访问一个已经关闭的结果集。解决这个问题的方法是确保在使用结果集之前,通过调用关闭方法来正确地关闭结果集。 总之,理解和解决这些常见错误能够帮助开发人员更好地使用JDBC 8.0.11连接数据库,并减少潜在的错误和问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值