第一篇:SQLServe数据源连接失败问题总结
SQL Server ODBC数据源连接失败问题总结
本文针对SQL Server 不存在或是访问被拒绝、[Microsoft][ODBC Sql Server Driver]无效的连接、SQLSERVER错误:18452三种常见的连接错误问题,提出了解决的方法,并且亲身实践。
在提出问题之前,首先要检查防火墙和杀毒软件是否关闭,接着,在建立连接的时候,要保证SQL Server 服务器是打开的。以上都做到后,请参考下文的出错情况以及解决方法。
一、错误1:SQL Server 不存在或是访问被拒绝
SQLState:01000 SQL Server 错误: 64 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOpen(Connect())连接失败
SQLState:08001 SQL Server 错误: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB] SQL Server 不存在或是访问被拒绝
检查1433端口是否打开
没有找到1433端口
说明1433端口没有打开。
打开1433端口的方法:
1.针对我安装的系统SP3,安装的SQL2005默认TCP/IP的状态是禁止的,因此:
选择SQL Server Configuration Manager,然后分别打开SQL Server 2005 Services和SQL Server 2005 Client Configuration,并把TCP/IP和Nameed Pipes的状态设置为Enabled;
2.如果不行,就需要更新系统
更新后,一定要重启电脑。
.重新检查1433端口,如下图所示,发现1433已经打开。
二、错误2:[Microsoft][ODBC Sql Server Driver]无效的连接
再次打开ODBC,进行到第二步时,又出错了,不过这次的错误如图所示,显示的无效的连接,和之前的错误不同。连接失败
Sqlstate :'01000' Sql server错误:14
[Microsoft][ODBC Sql Server Driver][DBNETLIB] connectionOpen(Invalid Instance())
连接失败:
Sql State:'08001' Sql Server错误:14
[Microsoft][ODBC Sql Server Driver]无效的连接
原因在于你的服务器没有启动,只要启动服务器即可
解决的方法如下:
1.选择下图的SQL Server Surface Area Configuration
接着如下图所示,依次点击Surface Area Configuration for Services and Connections和Surface Area Configuration for Features
如下面两个图所示,必须保证startup type为Automic,以及service status为Running(即start按钮键为灰色)。
三、错误3:SQLSERVER错误:18452
设置完毕后,再次打开ODBC,进行到第二步时,又出错了,不过这次的错误又和之前的错误不同,SQLSTATE:28000
SQLSERVER错误:18452
[MICROSOFT][ODBC SQLSERVER DRIVER][SQL SERVER]用户‘sa’ 登录失败
原因:未与信任SQL Server连接相关联
该错误产生的原因是由于SQL Server使用了“仅
Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(例如
sa)进行连接。
SQL 服务器已配置为在 “ Windows 身份验证模式(Windows 身份验证)” 操作和不允许使用 SQL 帐户。
解决方法如下:
1、设置允许SQL Server身份登录 操作步骤:
第一步:在“Microsoft SQL Server Management Stdio”中,展开“SQL Server组”,鼠标右键点击SQL Server服务器的名称。
第二步:选择“属性”
第三步:再选择“安全性”选项卡
第四步:在“身份验证”下,选择“SQL Server和Windows身份验证模式” 第五步:确定,并重新启动SQL Server服务。
2、如果还是没解决,可以检查SA用户是否被打开: 第一步:右键SA用户,打开属性。
第二步:选择“状态”选项卡,勾选登陆中的启用。
SA没有被启用,在数据库刚开始使用的时候很容易出现,安装的SQLServer,SA用户默认是关闭的,往往不被人知道。
当然可以新建一个用户,限于篇幅原因,读者参考下面的资料 http://apps.hi.baidu.com/share/detail/32872545
到此,创建到SQL Server 2005的数据源成功!附图如下
第二篇:SQL_Server_ODBC数据源连接失败问题总结
SQL Server ODBC数据源连接失败问题总结
本文针对SQL Server 不存在或是访问被拒绝、[Microsoft][ODBC Sql Server Driver]无效的连接、SQLSERVER错误:18452三种常见的连接错误问题,提出了解决的方法,并且亲身实践。在提出问题之前,首先要检查防火墙和杀毒软件是否关闭,接着,在建立连接的时候,要保证SQL Server 服务器是打开的。以上都做到后,请参考下文的出错情况以及解决方法。
一、错误1:SQL Server 不存在或是访问被拒绝
SQLState:01000 SQL Server 错误: 64 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOpen(Connect())连接失败
SQLState:08001 SQL Server 错误: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB] SQL Server 不存在或是访问被拒绝
检查1433端口是否打开
没有找到1433端口
说明1433端口没有打开。
打开1433端口的方法:
1.针对我安装的系统SP3,安装的SQL2005默认TCP/IP的状态是禁止的,因此:
选择SQL Server Configuration Manager,然后分别打开SQL Server 2005 Services和SQL Server 2005 Client Configuration,并把TCP/IP和Nameed Pipes的状态设置为Enabled;
2.如果不行,就需要更新系统
更新后,一定要重启电脑。
.重新检查1433端口,如下图所示,发现1433已经打开。
二、错误2:[Microsoft][ODBC Sql Server Driver]无效的连接
再次打开ODBC,进行到第二步时,又出错了,不过这次的错误如图所示,显示的无效的连接,和之前的错误不同。连接失败
Sqlstate :'01000' Sql server错误:14
[Microsoft][ODBC Sql Server Driver][DBNETLIB] connectionOpen(Invalid Instance())
连接失败:
Sql State:'08001' Sql Server错误:14
[Microsoft][ODBC Sql Server Driver]无效的连接
原因在于你的服务器没有启动,只要启动服务器即可
解决的方法如下:
1.选择下图的SQL Server Surface Area Configuration
接着如下图所示,依次点击Surface Area Configuration for Services and Connections和Surface Area Configuration for Features
如下面两个图所示,必须保证startup type为Automic,以及service status为Running(即start按钮键为灰色)。
三、错误3:SQLSERVER错误:18452
设置完毕后,再次打开ODBC,进行到第二步时,又出错了,不过这次的错误又和之前的错误不同,SQLSTATE:28000
SQLSERVER错误:18452
[MICROSOFT][ODBC SQLSERVER DRIVER][SQL SERVER]用户‘sa’ 登录失败
原因:未与信任SQL Server连接相关联
该错误产生的原因是由于SQL Server使用了“仅
Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(例如
sa)进行连接。
SQL 服务器已配置为在 “ Windows 身份验证模式(Windows 身份验证)” 操作和不允许使用 SQL 帐户。
解决方法如下:
1、设置允许SQL Server身份登录 操作步骤:
第一步:在“Microsoft SQL Server Management Stdio”中,展开“SQL Server组”,鼠标右键点击SQL Server服务器的名称。
第二步:选择“属性”
第三步:再选择“安全性”选项卡
第四步:在“身份验证”下,选择“SQL Server和Windows身份验证模式” 第五步:确定,并重新启动SQL Server服务。
2、如果还是没解决,可以检查SA用户是否被打开: 第一步:右键SA用户,打开属性。
第二步:选择“状态”选项卡,勾选登陆中的启用。
SA没有被启用,在数据库刚开始使用的时候很容易出现,安装的SQLServer,SA用户默认是关闭的,往往不被人知道。
到此,创建到SQL Server 2005的数据源成功!附图如下
第三篇:小结SQLServer连接失败错误及解决
小结SQL Server连接失败错误及解决
在使用 SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了。一般而言,有以下两种连接 SQL Server 的方式,一是利用 SQL Server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用 ODBC 或者 OLE DB 等连接 SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。
一、客户端工具连接失败
在使用 SQL Server 自带的客户端工具(以企业管理器为例)连接 SQL Server时,最常见的错误有如下一些:
1、SQL Server 不存在或访问被拒绝
ConnectionOpen(Connect())
2、用户'sa'登录失败。原因:未与信任 SQL Server 连接相关联。
3、超时已过期。
下面我们依次介绍如何来解决这三个最常见的连接错误。
第一个错误“SQL Server 不存在或访问被拒绝”通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。一般说来,有以下几种可能性:
1、SQL Server名称或IP地址拼写有误;
2、服务器端网络配置有误;
3、客户端网络配置有误。
要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因。
首先,检查网络物理连接:
ping <服务器IP地址>
或者
ping <服务器名称>
如果 ping <服务器IP地址> 失败,说明物理连接有问题,这时候要检查硬件设备,如网卡、HUB、路由器等。还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server。防火墙软件可能会屏蔽对 ping、telnet 等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。
如果ping <服务器IP地址> 成功而 ping <服务器名称> 失败,则说明名字解析有问题,这时候要检查 DNS 服务是否正常。有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,具体的方法是:
1、使用记事本打开HOSTS文件(一般情况下位于C:WINNTsystem32driversetc).2、添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
也可以在 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明。
其次,使用 telnet 命令检查SQL Server服务器工作状态:
telnet <服务器IP地址> 1433
如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接;如果命令返回“无法打开连接”的错误信息,则说明服务器端没有启动 SQL Server 服务,也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听。
接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道,是否启用了 TCP/IP 协议等等。我们可以利用 SQL Server 自带的服务器网络使用工具来进行检查。
点击:程序-> Microsoft SQL Server-> 服务器网络使用工具,打开该工具后看到的画面如下图所示:
从这里我们可以看到服务器启用了哪些协议。一般而言,我们启用命名管道以及 TCP/IP 协议。
点中 TCP/IP 协议,选择“属性”,我们可以来检查 SQK Server 服务默认端口的设置,如下图所示:
一般而言,我们使用 SQL Server 默认的1433端口。如果选中“隐藏服务器”,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接。
检查完了服务器端的网络配置,接下来我们要到客户端检查客户端的网络配置。我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,所不同的是这次是在客户端来运行这个工具。
点击:程序-> Microsoft SQL Server-> 客户端网络使用工具,打开该工具后看到的画面如下图所示:
从这里我们可以看到客户端启用了哪些协议。一般而言,我们同样需要启用命名管道以及 TCP/IP 协议。
点击 TCP/IP 协议,选择“属性”,可以检查客户端默认连接端口的设置,如下图所示。
该端口必须与服务器一致。
单击“别名”选项卡,还可以为服务器配置别名。服务器的别名是用来连接的名称,连接参数中的服务器是真正的服务器名称,两者可以相同或不同。如下图中,我们可以使用myserver来代替真正的服务器名称sql2kcn-02,并且使用网络库 Named Pipes。别名的设置与使用HOSTS文件有相似之处。
通过以上几个方面的检查,错误 1 发生的原因基本上可以被排除。下面我们再详细描述如何来解决错误 2。
当用户尝试在查询分析器里面使用sa来连接SQL Server,或者在企业管理器里面使用sa来新建一个SQL Server注册时,经常会遇到如图 2 所示的错误信息。该错误产生的原因是由于SQL Server使用了“仅 Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa)进行连接。解决方法如下所示:
1、在服务器端使用企业管理器,并且选择“使用 Windows 身份验证”连接上 SQL Server;
2、展开“SQL Server组”,鼠标右键点击SQL Server服务器的名称,选择“属性”,再选择“安全性”选项卡;
3、在“身份验证”下,选择“SQL Server和 Windows ”。
4、重新启动SQL Server服务。
在以上解决方法中,如果在第 1 步中使用“使用 Windows 身份验证”连接 SQL Server 失败,那么我们将遇到一个两难的境地:首先,服务器只允许了 Windows 的身份验证;其次,即使使用了 Windows 身份验证仍然无法连接上服务器。这种情形被形象地称之为“自己把自己锁在了门外”,因为无论用何种方式,用户均无法使用进行连接。实际上,我们可以通过修改一个注册表键值来将身份验证方式改为 SQL Server 和 Windows 混合验证,步骤如下所示:
1、点击“开始”-“运行”,输入regedit,回车进入注册表编辑器;
2、依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServer]
3、在屏幕右方找到名称“LoginMode”,双击编辑双字节值;
4、将原值从1改为2,点击“确定”;
5、关闭注册表编辑器;
6、重新启动SQL Server服务。
此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登录帐户:BUILTINAdministrators 以及 <机器名>Administrator 被删除。要恢复这两个帐户,可以使用以下的方法:
1、打开企业管理器,展开服务器组,然后展开服务器;
2、展开“安全性”,右击“登录”,然后单击“新建登录”;
3、在“名称”框中,输入 BUILTINAdministrators;
4、在“服务器角色”选项卡中,选择“System Administrators” ;
5、点击“确定”退出;
6、使用同样方法添加 <机器名>Administrator 登录。
以下注册表键
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServerLoginMode 的值决定了SQL Server将采取何种身份验证模式。该值为1,表示使用Windows 身份验证模式;该值为2,表示使用混合模式(Windows 身份验证和 SQL Server 身份验证)。
看完如何解决前两个错误的方法之后,让我们来看一下如图 3 所示的第三个错误。
如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误。有些情况下,由于局域网的网络问题,也会导致这样的错误。
要解决这样的错误,可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因)。具体步骤为:
1、在企业管理器中,选择菜单上的“工具”,再选择“选项”;
2、在弹出的“SQL Server企业管理器属性”窗口中,点击“高级”选项卡;
3、在“连接设置”下的“登录超时(秒)”右边的框中输入一个比较大的数字,如 20。
查询分析器中也可以在同样位置进行设置。
二、应用程序连接失败
以上的三种错误信息都是发生在 SQL Server 自带的客户端工具中,在应用程序中我们也会遇到类似的错误信息,例如:
Microsoft OLE DB Provider for SQL Server(0x80004005)[DBNETLIB][ConnectionOpen(Connect()).]Specified SQL server not found.Microsoft OLE DB Provider for SQL Server(0x80004005)用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'.[Microsoft][ODBC SQL Server Driver]超时已过期.首先,让我们来详细看以下的示意图来了解一下使用 ODBC 和使用 OLE DB 连接 SQL Server 有什么不同之处。
从上图中,我们可以看出在实际使用中,应用程序创建和使用各种 ADO 对象,ADO 对象框架调用享用的 OLE DB 提供者。为了访问 SQL Server 数据库,OLE DB 提供了两种不同的方法:用于 SQL Server 的 OLE DB 提供者以及用于 ODBC 的 OLE DB 提供者。这两种不同的方法对应于两种不同的连接字符串,标准的连接字符串写法如下所示:
1、使用用于 SQL Server 的 OLE DB 提供者:
使用 SQL Server 身份验证:
oConn.Open “Provider=sqloledb;” & _ “Data Source=myServerName;” & _ “Initial Catalog=myDatabaseName;” & _ “User Id=myUsername;” & _ “Password=myPassword”
使用 Windows 身份验证(信任连接): oConn.Open “Provider=sqloledb;” & _ “Data Source=myServerName;” & _ “Initial Catalog=myDatabaseName;” & _ “Integrated Security=SSPI”
2、使用用于 ODBC 的 OLE DB 提供者(不使用 ODBC 数据源):
使用 SQL Server 身份验证:
oConn.Open “Driver={SQL Server};” & _ “Server=MyServerName;” & _ “Database=myDatabaseName;” & _ “Uid=myUsername;” & _ “Pwd=myPassword”
使用 Windows 身份验证(信任连接): oConn.Open “Driver={SQL Server};” & _ “Server=MyServerName;” & _ “Database=myDatabaseName;” & _ “Trusted_Connection=yes”
3、使用用于 ODBC 的 OLE DB 提供者(使用 ODBC 数据源): oConn.Open “DSN=mySystemDSN;” & _ “Uid=myUsername;” & _ “Pwd=myPassword”
如果遇到连接失败的情况,我们只要按照一中所示的方法,结合程序中的连接字符串进行检查,基本都能得到解决。另外,还有以下几个要注意的地方:
1、配置 ODBC 数据源时,点击“客户端”配置选项可以让我们指定连接使用的网络库、端口号等属性,如下图所示:
2、如果遇到连接超时的错误,我们可以在程序中修改 Connection 对象的超时设置,再打开该连接。例如:
<% Set Conn = Server.CreateObject(“ADODB.Connection”)
DSNtest=“DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase” Conn.Properties(“Connect Timeout”)= 15 '以秒为单位
Conn.open DSNtest
%>
3、如果遇到查询超时的错误,我们可以在程序中修改 Recordset 对象的超时设置,再打开结果集。例如:
Dim cn As New ADODB.Connection Dim rs As ADODB.Recordset
...cmd1 = txtQuery.Text Set rs = New ADODB.Recordset rs.Properties(“Command Time Out”)= 300 '同样以秒为单位,如果设置为 0 表示无限制
rs.Open cmd1, cn rs.MoveFirst
...三、小结
本文针对大部分用户在使用 SQL Server 过程中常见的连接失败的错误,重点讨论了在使用 SQL Server 客户端工具以及用户开发的应用程序两种情况下,如何诊断并解决连接失败的错误。看过本文以后,相信每一个读者都会对 SQL Server 的连接工作原理、身份验证方式以及应用程序开发等有一个较为全面而深入的连接。本文中所有的测试或者示例均在 Windows 2000 Advanced Server + SQL Server 2000 企业版上通过。
第四篇:JSP连接SQL SERVER问题总结
首先是SQL 2000数据库的安装问题,在此我主要讲些关于SQL 2000的版本与操作系统的兼容性问题:SQL 2000总共有7个不同版本,适应不同等级用户的需求。
我试了一下,在XP系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。
下面说明如何连接到SQL 2000数据库,首先当然是要下载JDBC驱动程序,最好去微软官方网站下载,然后将下载到的三个JAR包放入你的WEB应用的WEB-INF/lib/下。接下来编写程序进行测试:
/*********************************************** /* /*DBTest.java /* /******************************************* */
import java.sql.*;
public class DBTest {
Connection con;
Statement sta;
ResultSet rs;
String driver;
String url;
String user;
String pwd;
public DBTest()
{
driver = “com.microsoft.jdbc.sqlserver.SQLServerDriver”;;
url
= “jdbc:microsoft:sqlserver:
//localhost:1433;DatabaseName =test”;
//test为数据库名
user
= “sa”;
pwd
= “sa”;
//请更改为你相应的用户和密码
init();
}
public void init()
{
try{
Class.forName(driver);
System.out.println(“driver is ok”);
con = DriverManager.getConnection(url,user,pwd);
System.out.println(“conection is ok”);
sta = con.createStatement();
rs = sta.executeQuery
(“select * from room”);
while(rs.next())
System.out.println
(rs.getInt(“roomNum”));
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
//自己替换[]
{
new DBTest();
} }
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:
driver is ok java.sql.SQLException: [Microsoft] [SQLServer 2000 Driver for JDBC] Error establis hing socket.at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Sou rce)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown S ource)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:523)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at DbTest.init(DbTest.java:32)
at DbTest.
at DbTest.main(DbTest.java:46)Press any key to continue...出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:
driver is ok conection is ok java.sql.SQLException:
[Microsoft][SQLServer 2000 Driver for JDBC] [SQLServer]对
象名 ’room’ 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Sour ce)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState
(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecu te(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal
(Unknown So urce)
at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at DbTest.init(DbTest.java:35)
at DbTest.
at DbTest.main(DbTest.java:46)Press any key to continue...在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:
在test数据库中选重用户---〉新建用户--〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:
driver is ok conection is ok 1001 1002 1003 1004 1005 1006 Press any key to continue...这次顺利通过测试
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。
总结:Sqlserve 和JDBC 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是Sqlserver 操作问题了,还有一点在远程操作的时候,要把Sqlserver 组设置一下,在安全性里边亦将身份验证更改为Sqlserve 验证即可。
------------------------------------------------windows xp sp2下jsp连接sql server 2000
注意:由于博客的文本编辑带有html代码解释功能,本文中对代码做了一定的改动,把所有的<改成了#,所有的>改成了$,如果需要用代码可以用记事本的“替换”功能替换回来即可。基本信息:windows xp sp2、Tomcat5.0、J2SDK1.5、Sql server 2000开发版
一、安装JDK 这个没有什么好说的,需要注意的是JDK1.5和以前的版本有个不同点,它默认的安装目录在C:Program FilesJava目录下,由于路径名里有空格,所以可能会给以后的命令行执行有一定的影响,并且和以往的习惯也有些不同,所以建议安装到C盘目录下就可以了。我的路径是C:jdk1.5
二、安装Tomcat 一路NEXT下来就可以了,注意有会有一个设置用户名密码的提示。我是安装在C:Tomcat 5.0了。
三、安装SQL Server2000 注意在windos xp下只能装两个版本,一个是开发版,另一个好像是个人版,记不得了。装的时候也基本上是一路NEXT下来,不过有一个地方要选择是采用Windows NT验证方式,一种是采用混合验证模式,为了安全,建议采用后者。并且要给超级管理员sa设上密码。最重要的是,不要忘了给SQL Server 2000打上补丁。由于sql server 2000存在漏洞,我们宿舍楼的局域网就因为中毒机器太多而造成网络拥塞。在windows xp中就把1433端口屏蔽了。要启用这个端口,要安装一个sql server 2000的sp3补丁。
四、设置环境变量
path路径:在系统变量的path前面加上C:Tomcat 5.0bin;C:jdk1.5bin;classpath路径.;C:jdk1.5libdt.jar;C:jdk1.5libtools.jar;C:jdk1.5librt.jar;C:jdk1.5;C:Tomcat 5.0commonlib,其中的.代表当前路径,其它的可以简单的设为C:jdk1.5lib,但是最好还是一个一个列出来。注意这里你如果在连接数据库时用到的是JDBC-ODBC桥接的方式的话,还要把桥接的驱动的路径加在classpath里面。有一个细节,好像在jdk1.5中,这个驱动不在C:jdk1.5lib下,而是在C:jdk1.5jrelib的rt.jar中,可以适当的设置一下或者把这个文件拷贝到classpath能到达的地方。
java_home路径:C:jdk1.5,即是jdk的安装目录。
tomcat_home路径:C:Tomcat 5.0,即是tomcat的安装目录。catalina_home路径:C:Tomcat 5.0 catalina_base路径:C:Tomcat 5.0,这两个环境变量的作用是可以通过命令行方式来启动和关闭tomcat,方法是打开命令行提示窗口,键入startup就可以启动,键入shutdown就可以关闭了。注意不要强行关闭tomcat,因为既然给了一个关闭的方式必然有它的道理,为了安全起见,还是用shutdown来关闭较为合适。当然不设置这两个环境变量也可以,只不要启动时用鼠标来从开始菜单启动。
五、建立数据库表
建立一个数据库testdb,在它里面建立一个表users。里面有两列,name和password,数据类型都取默认的char类型就行了。注意在SQL SERVER中表的名字不能为user。否则会出现错误。
六、配置数据DSN 打开“控制面板->性能与维护->管理工具->数据源”,点击“系统DSN”,点击“添加”,数据驱动选择“SQL SERVER”,点击“完成”,在弹出的对话框的“名称”里填入此DSN的名称,比如test。“描述”可以不填,“服务器”选择本地,即(local)。点击“下一步”,将弹出一个新的对话框。选择“使用sql server验证”,在下方填入用户名和密码。点击“下一步”,在新弹出的对话框的上方,选中“更改默认的数据库为”,在下侧的下拉菜单里选择你要映射的数据库,这里我们选择testdb。点击“下一步”,再点击“完成”。在新的对话框下方有个“测试数据源”的按钮,点击它,如果出现“测试成功”则表示建立DSN成功。点击完成即可。注意以后在程序中访问数据库是根据这里的系统DSN的名称来访问数据库的,而非真实的数据库名,在这里即是通过test而非testdb。
七、写测试网页文件
这里我们写一个简单的功能,有两个页面,第一个页面adduser.htm负责与用户进行交互,它可以让用户输入用户名和密码,并且提交它,但是它自己不处理,而是由第二个页面文件处理。第二个页面为jdbc.jsp,它接受第一个页面传递过来的参数,然后把它插入到users表中,然后把表中所有的用户都检索出来并且显示它。把这两个文件放在一个文件夹jdbc中,在jdbc文件夹中新建一个文件夹,名称为WEB-INF,在它里面建一个web.xml文件,然后把jdbc文件夹放到tomcat的工作目录C:Tomcat 5.0webapps中。web.xml内容
#?xml version=“1.0” encoding=“ISO-8859-1”?$ #!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”$ #web-app$ #display-name$My Web Application#/display-name$ #description$ A application for test.#/description$ #/web-app$ adduser.htm文件内容:
#html$ #head$ #title$Add User#/title$ #/head$ #body$ #form method=“POST” action=“jdbc.jsp”$ #p align=“center”$姓名
#input type=“text” name=“name” size=“20”$#/p$ #p align=“center”$密码
#input type=“password” name=“pwd” size=“20”$#/p$ #p align=“center”$
#input type=“submit” value=“提交” name=“B1”$#/p$ #/form$ #/body$ #/html$
jdbc.jsp文件内容: #html$
#head$#title$Add User to DB#/title$#/head$
#%@page import=“java.sql.*”%$
#%@page import=“com.microsoft.jdbc.sqlserver.SQLServerDriver”%$
#%@page import=“com.microsoft.jdbc.*”%$
#%@page import=“java.util.*”%$ #body$
#pre$ #% //Get parameters from request String name,pwd;int num;name=request.getParameter(“name”);pwd=request.getParameter(“pwd”);//add infomation to DB try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();Connection con=DriverManager.getConnection(“jdbc:odbc:test”,“sa”,“like”);Statement stmt=con.createStatement();stmt.executeUpdate(“insert into users values('”+name+“','”+pwd+“')”);//query DB for display all users ResultSet rs=stmt.executeQuery(“select * from users”);//rs.first();out.println(“All user in DB!”);while(rs.next()){
out.print(“user name: ”);
out.print(rs.getString(“name”)+“
password: ”);
out.println(rs.getString(“password”));} num=stmt.getMaxRows();out.println(num);rs.close();stmt.close();con.close();}catch(Exception ex){
out.println(ex.getMessage());
} %$
#/pre$ #/body$ #/html$
八、测试效果
启动tomcat,启动浏览器,在浏览器的地址栏中键入http://localhost:8080/jdbc/adduser.htm,在出现 的网页中填入用户名密码,点击“提交”,即可跳到jdbc.jsp文件,列出此时数据库中所有的用户。
第五篇:MySQL数据库连接超时(Wait_timeout)问题总结
当应用程序和数据库建立连接时,如果超过了8个小时,应用程序不去访问数据库,数据库就会出现断掉连接的现象。这时再次访问就会抛出异常.一般的解决方法大多是在数据库连接字符串中增加“autoReconnect=true ”选项。但是这只对mysql4以前的版本有效。在最新的mysql中是无效的。其实要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。决定从根源入手,设置mysql的wait_timeout为31536000(一年),再来试试。set-variable=wait_timeout=31536000 set-variable=interactive_timeout=31536000 问题得到了解决 想了深入解一下mysql的工作原理
百度了一下Google发现很多人都出现过这种问题,大多是配置hibernate时候出的问题,可惜我的项目中没有使用到hibernate只是简单的自己配了一个连接池,所以综合了问题的关键所在改了一下数据库配置,在这里暂且记录一下,以后备用。
Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在。
最近碰到了这个问题,检查后发现数据库连接池中保存的连接超时后失效了,下面是官方的解释 mysql gone-away
从Mysql 5.x的某个版本之后,MySQL的自动关闭空闲连接的特性被修改了,假如一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被接受,需要重新建立新连接,这就导致了SER的重连机制不能正常工作:SER只会在需要操作数据库时去使用同一个连接接口,断开了则发起重新连接请求,而且这个问题短期内SER也不能够解决。
下文中将具体讲述处理的方法:
1.使用Mysql 4.0或4.1版本,如果没有用到Mysql 5的一些新特性比如存储过程触发器之类。
2.定时重启Mysql服务器或Ser(由于本问题可能同样会影响到其它一些需要Mysql支持的服务器程序,所以重启Mysql服务器为好,但需要检测Mysql服务器不被使用的一个时间重启比较难确定)
3.设置my.cnf,有mysqld字段内增加参数:
[mysqld]port = 3306socket = /tmp/mysql.sockwait_timeout= 500000interactive_timeout = 500000(500000秒约五六天的超时时间,可根据实际需要选择一个数据库可能空闲的最长时间稍大的时间值。)重启Mysqld应用即可,也可以在执行mysqld时加-o wait_timeout=500000参数同样效果。
在MySQL客户端show variable时应该可以看到最后一条从默认的wait_time=28000变成500000了。
(假如重启Mysqld不生效,可以重启机子)