不得不说的在 MS SQL SERVER 下的 JDBC 调用
今天下午,临时决定要再 MS SQL-SERVER 下配置 Spring 的数据源 DataSource 。但配置了半天,获取数据源仍不成功,我没有办法,找原因呗,只能写个列子测试下。先不管三七二十一,先上正确的例子再说。
看客如果想运行下面的代码,需要自己手工写个主函数调用,或者使用 JUnit 做个测试。如果这个例子运行成功,就说明不受机器环境影响,没有必要关闭防火墙和杀毒软件。
请注意,里面的红色字体,请换成实际SQL SERVER 服务器地址。【 dbc:sqlserver://localhost:1433】
即:
(1)connectionUrl
(2)String SQL = "SELECT [ID],[USER_ID],[NAME],[EMAIL] FROM [Z_MARK_MANAGE].[dbo].[USER]";
上面2个你必须得换。
package com.wellhope.bob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import com.microsoft.sqlserver.jdbc.SQLServerDriver; /** * @author Bob * */ public class GetConn { /** * @param args */ public void getconn() { // TODO Auto-generated method stub // Create a variable for the connection string. String connectionUrl = "jdbc:sqlserver://localhost:1433;database=Z_MARK_MANAGE;integratedSecurity=false;user=sa;password=wellhope;"; // Declare the JDBC objects. Connection con = null; Statement stmt = null; ResultSet rs = null; try { // Establish the connection. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(connectionUrl); // Create and execute an SQL statement that returns some data. String SQL = "SELECT [ID],[USER_ID],[NAME],[EMAIL] FROM [Z_MARK_MANAGE].[dbo].[USER]"; stmt = con.createStatement(); rs = stmt.executeQuery(SQL); // Iterate through the data in the result set and display it. while (rs.next()) { System.out.println("【SUCC】获取 SQL-SERVER 的连接已成功。[1]="+rs.getString(2)); } } // Handle any errors that may have occurred. catch (Exception e) { System.out.println("【ERROR】打开 SQL-SERVER 的连接失败。"); e.printStackTrace(); } finally { if (rs != null) try { rs.close(); } catch (Exception e) { } if (stmt != null) try { stmt.close(); } catch (Exception e) { } if (con != null) try { con.close(); } catch (Exception e) { } } } }
上面的程序如果运行不成功,典型的就是获取连接不成功。按照下面步骤查找。
(1) 你少数据库驱动吗?
典型的就是 ClassNotFoundException,自己注意看下,如果少驱动,请到下面地址下载。
微软 MS SQL SERVER 2008 驱动
上面的驱动,请注意所适应的运行环境,这个下载完毕后,看里面的中文文档即可,下载下来后就是一个 HTML 页面,无非就是让你接受法律条款之类的,我大概看了下,微软这个家伙很恶心,下载的软件,你只有一次转给第二个人的机会。否则呵呵---要触犯法律的。在JAVA如此开源的情况下,不得不说微软你真的很搞。 上面的链接如果失效的话,请到CSDN的下载区搜,还是有好多人为了赚点分,给你传上去的。 我想告诉你的是,你到官方下载不会使用你超过10分钟的时间。
(2) 检查SQL SERVER 2008&2005 等数据库的服务是否开启,同样需要注意端口号。
如果你说你不会检查,那我告诉你在什么位置,
【开始】-【程序】-【Microsoft SQL Server 2008】-【配置工具】-【SQL Server 配置管理器】
按照上面配置后,端口可以采用默认或者非默认。 接下面要注意的是。
如果你原来的 SQLSERVER 的 TCP/IP 服务是关掉的,那么启用 TCP/IP 后, 必须要重新启动 SQL-SERVER 服务。 我犯的就是这个错误。真TMD恶心
(3)1,2 步骤不行, 那么请你关闭防火墙,关闭杀毒软件。 如果还不行,那就重新启动机器再试了。
(4)用 SQL SERVER 的客户端登陆,使用 url 里面的 用户名和密码登陆,看看是否有这样的用户,和密码是否正确。
如果上面 4 个步骤,还不行, 那我也无语。 出去散散步,再搞吧
接下来就是在Spring的配置文件 applicationContext.xml 中配置数据源。 先上个正确的例子吧。
上面需要解释,
就是一个配置的url:
(1) jdbc:sqlserver 这个不需要变
(2) localhost:1433 ,这个根据实际情况,自己转,如果你不知道端口号,请查看上面的图
(3) database=Z_MARK_MANAGE;integratedSecurity=false
这个解释下,
a)database=Z_MARK_MANAGE 数据库实例名称,当然也可以写成 databaseName=Z_MARK_MANAGE
b)integratedSecurity=false 这个表示的意思是,我不使用window的本机验证,使用 用户名/口令 的方式验证
上面的照着写就可以,如果还出现什么问题,请留言,我抽空解答。
下面附一个数据库的表的创建脚本和Hibernate的映射文件
一 映射文件
一 数据库创建的SQL脚本
CREATE TABLE [dbo].[USER_INFO](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[USER_ID] [nvarchar](50) NOT NULL,
[NAME] [nvarchar](200) NULL,
[EMAIL] [nvarchar](200) NOT NULL,
[SEX] [nchar](1) NULL,
[ADDRESS] [nvarchar](500) NULL,
[ZIP_CODE] [nchar](6) NULL,
[DEPARTMENT] [tinyint] NULL,
[PASSWORD] [nvarchar](500) NULL,
[ROLE_ID] [bigint] NULL
)