用JDBC连接SQL Servers数据库的时候,遇到这个问题。
今天忙了两个多小时来解决,最后终于搞定。把自己总结的一点经验和大家分享下,因为我发现网上有很多人遇到这个问题,但解决方案不多。
下面是正确的步骤,很简单:
1、首先要确保安装了 sql server 2005,在xp 或win 7下安装了 sql sp4 补丁(补丁非常重要,我就是一直没有给数据库打补丁不能连接的)。SP4补丁的下载地址是:http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5
2.配置驱动。把安装驱动器目录下lib中的三个jar包msbase.jar、mssqlserver.jar、msutil.jar放到你的web 服务器的lib 下面(比如说Tomcat下面的lib文件夹下)。或者设置到环境变量classpath中(如果你不是建立web项目的话应该选择这个)。这三个包也可以在网上搜索一下下载下来,很多的。
3.代码:
[java] view plain copy print ?
- <span style="font-size: 16px;">package util;
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.Properties;
-
- import javax.swing.JButton;
-
- public class JdbcUtil {
- private static String url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=master";</span>
<span style="font-size: 16px;">package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.swing.JButton;
public class JdbcUtil {
private static String url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=master";</span>
[java] view plain copy print ?
- <span style="font-size: 16px;"><span> </span>/*127.0.0.1是你的服务器的IP地址,因为我的SQL Server就安装在本地,所以IP就是localhost了</span>
<span style="font-size: 16px;"><span> </span>/*127.0.0.1是你的服务器的IP地址,因为我的SQL Server就安装在本地,所以IP就是localhost了</span>
[java] view plain copy print ?
- <span style="font-size: 16px;"><span> </span> 1434是数据库的端口,默认是1433,不知道咋滴我的是1434,捣鼓了半天才找到自己端口出问题了。</span>
<span style="font-size: 16px;"><span> </span> 1434是数据库的端口,默认是1433,不知道咋滴我的是1434,捣鼓了半天才找到自己端口出问题了。</span>
[java] view plain copy print ?
- <span style="font-size: 16px;"><span> </span>master是数据库的名字,这个数据库是SQL Server2005自带的一个数据库。</span>
<span style="font-size: 16px;"><span> </span>master是数据库的名字,这个数据库是SQL Server2005自带的一个数据库。</span>
[java] view plain copy print ?
- <span style="font-size: 16px;"><span> </span>*/
- private static String user="sa";
- private static String pwd="";
-
-
-
- private JdbcUtil(){
-
- }
-
- static{
- try {
- Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
- } catch (ClassNotFoundException e) {
-
- e.printStackTrace();
- System.out.println("数据库驱动加载失败!");
- }
- }
-
- public static Connection getConnection() throws SQLException{
- return DriverManager.getConnection(url, user, pwd);
- }
-
-
- public static void free(ResultSet rs,Statement stmt,Connection conn){
- try {
- if(rs!=null)
- rs.close();
- } catch (SQLException e) {
-
- e.printStackTrace();
- }finally{
- try {
- if(stmt!=null)
- stmt.close();
- } catch (SQLException e) {
-
- e.printStackTrace();
- }finally{
- try {
- if(conn!=null)
- conn.close();
- } catch (SQLException e) {
-
- e.printStackTrace();
- }
- }
- }
- }
-
-
-
- public static void main(String[] args) {
- JdbcUtil jdbcutil = new JdbcUtil();
- try {
- System.out.println(jdbcutil.getConnection());
- } catch (SQLException e) {
-
- e.printStackTrace();
- }
-
- }
-
-
-
- }</span><span style="font-size: 18px;">
- </span>
<span style="font-size: 16px;"><span> </span>*/
private static String user="sa";
private static String pwd="123";
private JdbcUtil(){
}
// 1、注册驱动com.microsoft.jdbc.sqlserver.SQLServerDriver
static{
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库驱动加载失败!");
}
}
// 2、建立一个连接
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, pwd);
}
// 5、关闭资源
public static void free(ResultSet rs,Statement stmt,Connection conn){
try {
if(rs!=null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(stmt!=null)
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(conn!=null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//下面的主函数的作用是一个测试,看连库是否成功了。
public static void main(String[] args) {
JdbcUtil jdbcutil = new JdbcUtil();
try {
System.out.println(jdbcutil.getConnection());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}</span><span style="font-size:18px;">
</span>
如果测试通过,没有报异常就说明没问题了。
下面解决java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket这个异常。
可能原因1:端口不对。
解决办法:在SQL Server查询命令行下面输入:exec sys.sp_readerrorlog 0, 1, 'listening' 查看自己SQL Server 端口号。本来SQL Server的默认端口是1433.。我的偏不一样,出异常了的时候没想到是这个问题。
可能原因2:SQL Server 2005的SP4没有安装。这个问题貌似也会导致连接数据库的时候不能通过SQL Servers身份验证的方式登录。
解决办法:安装SP4补丁。安装的时候安装在SQL Server下面就可以了。下载下来的补丁是可执行文件。
可能原因3:配置SQL的时候就不能通过SQL Servers身份验证的方式登录。简单地说就是使用SQL Server MangementStudio进入数据库的时候,当你选择了使用SQL Servers身份验证的方式登录不能登录成功。(你忘记了密码,不知道密码,或者是你没有启动那个账号作为你的登录账号)
解决办法:1.1先用Windows验证的方法进去数据库。右键点击 左边的根目录---》属性,进去服务器属性,点击”安全性“,然后在”服务器身份验证“里面选择SQL Server和Windows身份验证模式。确定保存。1.2在SQL Server Mangement的主界面中双击最左边的”安全性“,在展开的菜单里面选择”登录名“右键点击”sa“这个用户,打开属性菜单栏,在这个里面你可以设置sa的登录密码。最重要的是我们要点击”状态“栏,然后点击登录设置为”启用“。