JAVA连接SQL Server2008的具体实现

时间:2024-03-31 17:10:15

第一步,下载JDBC,即SQL Server JDBC Driver 2.0
网址在:
https://www.microsoft.com/zh-cn/download/details.aspx?id=2505
下载好后解压至当前文件夹里,即出现Microsoft SQL Server JDBC Driver 2.0这个文件夹。这个文件夹我放到了C:\Program Files\Java\JDBC里
第二步,导入包
右击你创建的工程,找到Build path ,选择 Add External Archives,找到那两个包,都导入就可以了。
第三步,创建数据源
在控制面板—管理工具(这个要点击大图标,有个博客就是没说,找了半天没找到)中选择数据源(我选的是64位的),选择系统DNS选项卡,点击添加,选择SQLServer,点击完成,服务器一般是(local),这个我被坑了好久。。。(今天网速慢,图片一直传不上来)一直以为是Sa.填入你自己取的数据源的名称和数据,一般用户名是Sa,密码是1,或者没有密码。
第四步,JAVA上运行代码
这是我根据一个博客上的代码改成我的

package com.sql;
import java.sql.*;
public class test
{
public static void main(String[] args)
{
String JDriver=”com.microsoft.sqlserver.jdbc.SQLServerDriver”;//SQL数据库引擎
String connectDB=”jdbc:sqlserver://127.0.0.1:1433;DatabaseName=SPJ_mng”;//数据源注意IP地址和端口号,数据库名字!!!
try
{
Class.forName(JDriver);//加载数据库引擎,返回给定字符串名的类
}catch(ClassNotFoundException e)
{
//e.printStackTrace();
System.out.println(“加载数据库引擎失败”);
System.exit(0);
}
System.out.println(“数据库驱动成功”);
try
{
String user=”Sa”;//你自己创建的用户名字和密码!!!!!!!!!!!!
String password=”1”;
Connection con=DriverManager.getConnection(connectDB,user,password);//连接数据库对象
System.out.println(“连接数据库成功”);
Statement stmt=con.createStatement();//创建SQL命令对象
//创建表
System.out.println(“查询”);
System.out.println(“开始读取数据”);
ResultSet rs=stmt.executeQuery(“SELECT * FROM S where SNAME=S1”);//返回SQL语句查询结果集(集合)
//循环输出每一条记录
while(rs.next())
{
//输出每个字段
System.out.println(rs.getString(“stuId”)+”\t”+rs.getString(“NAME”));
}
System.out.println(“读取完毕”);
//关闭连接
stmt.close();//关闭命令对象连接
con.close();//关闭数据库连接
}
catch(SQLException e)
{
e.printStackTrace();
//System.out.println(“数据库连接错误”);
System.exit(0);
}
}
}

IP地址是没有改的,然后出现以下错误

数据库驱动成功
十月 22, 2017 9:04:25 下午 com.microsoft.sqlserver.jdbc.SQLServerConnection
严重: 此驱动程序不支持 Java Runtime Environment (JRE) 1.8 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。
Exception in thread “main” java.lang.UnsupportedOperationException: 此驱动程序不支持 Java Runtime Environment (JRE) 1.8 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。
at com.microsoft.sqlserver.jdbc.SQLServerConnection.(SQLServerConnection.java:223)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:840)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.sql.test.main(test.java:23)

把sqldbc那个包移走后,就是只剩一个sqljdbc4的包后,出现如下情况:
数据库驱动成功
(过了一会儿后)
com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1049)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.sql.test.main(test.java:23)

然后我改成了本机IP地址后还是出现如上问题,然后找到这个网址
http://www.jb51.net/article/70976.htm
发现我没有关闭防火墙,关闭后再运行。
发现sql server配置管理器里有这个问题
http://www.cnblogs.com/cool-fire/archive/2012/09/15/2686131.html
可能是因为我的sql server2008与我装的vs2015有冲突,所以用360删了Microsoft SQL Server 2016LocalDB这个文件,卸载后就有了
然后我停止后重新启动服务,再在java里面,看是否能实现
数据库驱动成功
连接数据库成功
查询
开始读取数据
com.microsoft.sqlserver.jdbc.SQLServerException: 列名 ‘S1’ 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:786)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:685)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:620)
at com.sql.test.main(test.java:29)

现在是这样,发现有进步咦,列名S1无效是神马鬼,难道是java对大小写敏感?SQL Server是对大小写不敏感的。打开我的SQL Sever Management Studio看了看,发现S1,改成’S1’后
出现如下:
数据库驱动成功
连接数据库成功
查询
开始读取数据
com.microsoft.sqlserver.jdbc.SQLServerException: 列名 stuId 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(SQLServerResultSet.java:626)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2301)
at com.sql.test.main(test.java:34)

好坑,查了下数据库中stuid的数据类型是什么,发现好像是长整型的意思。

后来我发现,问题出在我的数据库里没有stuld和NAME这两个鬼,改成我用的SNO就没问题了,成功查询
System.out.println(rs.getString(“stuId”)+”\t”+rs.getString(“NAME”));
JAVA连接SQL Server2008的具体实现

相关文章