首先把我的运行环境进行声明.
数据库:SQL Server 2000,运行无误
打了SP3的补丁,并运行了setup.bat
JDBC驱动了装了,并将三个包置入Tomcat/lib文件夹中
更改了Tomcat中的配置文件
数据库端口号为1433
通过telnet命令测试端口号是否能用:不能
部分代码如下:
Connection con = null;
try{
// 加载JDBC驱动器类
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// 建立到TestDB的数据库连接
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Homen", "sa", "exc");
//在数据库中创建表
int createTable = -1;
String strCreateTable = "CREATE TABLE Books (book_id INTEGER, book_name VARCHAR(50), price FLOAT,quantity INTEGER)";
Statement stmtCreate=con.createStatement();
createTable = stmtCreate.executeUpdate(strCreateTable);
stmtCreate.close();
if ( createTable == 0) {
out.println("创建表成功!<br>");
网页中出现的异常信息为:[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
另一个代码也有同样的异常信息:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
注:寻找过类似的答复,有说装SP4,我装了,结果是SQL Server都启动不了,现在SQL是重装的.
以前也运行过这段代码,完全正常.因为实在找不到其他帮助了,所以请有这方面经验的高手指点一二.感激不尽!!!
数据库:SQL Server 2000,运行无误
打了SP3的补丁,并运行了setup.bat
JDBC驱动了装了,并将三个包置入Tomcat/lib文件夹中
更改了Tomcat中的配置文件
数据库端口号为1433
通过telnet命令测试端口号是否能用:不能
部分代码如下:
Connection con = null;
try{
// 加载JDBC驱动器类
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// 建立到TestDB的数据库连接
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Homen", "sa", "exc");
//在数据库中创建表
int createTable = -1;
String strCreateTable = "CREATE TABLE Books (book_id INTEGER, book_name VARCHAR(50), price FLOAT,quantity INTEGER)";
Statement stmtCreate=con.createStatement();
createTable = stmtCreate.executeUpdate(strCreateTable);
stmtCreate.close();
if ( createTable == 0) {
out.println("创建表成功!<br>");
网页中出现的异常信息为:[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
另一个代码也有同样的异常信息:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
注:寻找过类似的答复,有说装SP4,我装了,结果是SQL Server都启动不了,现在SQL是重装的.
以前也运行过这段代码,完全正常.因为实在找不到其他帮助了,所以请有这方面经验的高手指点一二.感激不尽!!!
解决方案 »
- 下载了tomcat源码来编译 org.eclipse.jdt.core.compiler 不存在
- 使用javabean 在jsp中连接 MySQL 数据库 总是出现错误
- 从数据库里取出来值,一条条的传值到另一个页面
- 请问如何在tomcat启动时将变量放入application对象
- 部分程序 连接不到 Connection Pool ,何解?
- 求助:谁有JSP的管理系统的例子?参考一下,非常感谢
- 树结构 100分
- GetDate() 来抛砖引玉
- 如何保存制定网页中的table
- CPU 100%
- java高人请看:如何用代码实现解压缩功能(什么语言都可以)救命的!
- 连接ACCESS 用getRow() 得到返回结果为 0 怎么回事?
还是有什么地方表述的不清楚.让我奇怪的是,一样的代码,一样的运行环境.
之前运行完全正常,重装SQL之后就是出现以上异常提示.都找不错误之处.
用 CMD 命令NETSTAT查1433(这是默认的端口,可能被占用,你可以重新设一个新的端口)的端口可是居然没有没有打开,先看看你的服务器有没有打开,如果都大开了那就说明你没有装SQL的sp3或sp4的补丁. 还有一个方法看你是不是要打补丁,那就是看看你的版本号:
可以用如下的方式查看MSSQL的版本:
打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于
查看MSSQL的详细版本号
如果 是 8.00.194 就是还没打补丁
8.00.760 就是SP3
8.00.2039 就是SP4
如果你的版本号是对的,但NETSTAT查1433没有,那可能你的1433端口被占了,换一个端口应该就可以了.
换端口的方法是:1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。
2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。
3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,一般默认端口是:1433。 另有一篇网上的方法,供参考:如运行程序时出现 "Error establishing socket" 错误,则应进行如下调试:
1 检查SQL SERVER 是否允许远程访问.具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
2)在相应"数据库"上单击右键,选择"属性"
3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择.2 使用telnet IP地址 1433,系统是否提示连接出错,如系统提示出错
检查是否防火墙屏蔽了SQL SERVER 或 java IDE 的网络访问端口
如果是,关闭防火墙,重新启动SQL SERVER和java IDE,进行测试,
如果系统仍提示上述错误,尝试下列步骤3 检查SQL SERVER 端口号及是否启用了TCP/IP协议,具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
2)在相应"数据库"上单击右键,选择"属性"
3)选择"常规"选项卡,点击"网络配置",如启用的协议中无"TCP/IP协议"将其加入
4)选择"TCP/IP协议",点击"属性",检查其端口号是否为1433
5)如端口号为1433将其修改为其它端口号,修改jdbc连接语句,将端口号同样改为新启用的端口号,如jdbc:microsoft:sqlserver://server_name:1400(假设新端口号为 1400)以下的方法你每种的去试试:
#检查一下sql server的connection有没有full.#如果是认证的问题.
可到sql enterprice manager->指定server->内容->安全性.
把验证改为 SQL server 及 windows.#点选属性检查一下port是否正确.#执行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe
把TCP/IP启用.#关掉防火墙.#把SQL server update到sp3
后者是 SP4 的,如果小于 8.00.760 说明根本就没打上补丁。----------------------------------------------
通过telnet命令测试端口号是否能用:不能 1433 端口都不能用还连什么啊?
其中connection是什么,新手SQL数据库学的不扎实,看不明白.还有"执行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe
把TCP/IP启用. "
这段代码又是什么意思?不过我TCP/IP协议肯定启动了.
待会儿会把分给热心的朋友.谢谢
import java.sql.*;
import java.sql.Driver;
public class CdbOper {
String _sqlstr;
static Connection conn;
static Statement pstmt;
static ResultSet rs;
//constructors
public CdbOper() {}
public CdbOper(String sqlstr) {
_sqlstr = sqlstr;
}
public static ResultSet fun(String sqlstr) {
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://" + "localhost" + ":" + "1433" +
";databaseName=" + "dbLibary" + ";selectMethod=" + "cursor" +";" , "sa", "1234"); //LZ对照一下这里
pstmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery(sqlstr);
} catch(Exception ex) {
ex.printStackTrace();
}
return rs;
}
public static void sub(String sqlstr) {
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://" + "localhost" + ":" + "1433" +
";databaseName=" + "dbLibary" + ";selectMethod=" + "cursor" +";" , "sa", "1234");
pstmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery(sqlstr);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}上面的是我封装的一个数据库连接用的, FUN是返回RS, SUB没有返回。
PS:我用的NETBEANS5.5还有ECLIPSE都能运行正常的。当初我查资料用了3天, LZ加油!