Java 通过 JDBC 分别在混合验证模式和 Windows 身份验证模式下连接 SQL Server 2008 或 2005 的连接实例

yuezkun 2011-03-13 02:37:10
Java 通过 JDBC 分别采用混合验证模式和 Windows 身份验证模式连接 SQL Server 2008 或 2005 的连接实例

开场白:由于这学期开始学习数据库,这两天便在自己的电脑上折腾了起来,经过一天不断地失败与摸索,在百度与谷歌的帮助下,以及各个论坛博客的经验分享,使得我最终使用 JDBC 分别在混合验证模式和 Windows 身份验证模式下连接SQL Server 2008成功,我在这里总结一下连接的具体过程与心得与大家分享!如有错误之处希望大家能够指出,予以纠正。

一、混合登录模式( SQL Sever 和 Windows 身份验证模式)
这种是 SQL Server 经典的连接数据库的方法,如果数库没有配置错误,连接应该很顺利。一下是 Java 源代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class SqlServerConnection02 {
public static void main(String[] args) {
String dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL数据库引擎
String dbUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=Test";// 数据源

try {
Class.forName(dbDriver);// 加载数据库引擎,返回给定字符串名的类
} catch (ClassNotFoundException e) {
// e.printStackTrace();
System.out.println("加载数据库引擎失败");
System.exit(0);
}
System.out.println("数据库驱动成功");

try {
String username = "sa";
String password = "sqlserveradmin"; //此处输入你的数据库的"sa"密码
Connection conn = DriverManager.getConnection(dbUrl, username, password);// 连接数据库对象
System.out.println("连接数据库成功");
Statement stmt = conn.createStatement();// 创建SQL命令对象

// 创建表
System.out.println("开始创建表");
String sqlCreate = "create table TABLE1(ID NCHAR(2),NAME NCHAR(10))";// 创建表SQL语句
stmt.executeUpdate(sqlCreate);// 执行SQL命令对象
System.out.println("表创建成功");

// 输入数据
System.out.println("开始插入数据");
String a1 = "INSERT INTO TABLE1 VALUES('1','张三')";// 插入数据SQL语句
String a2 = "INSERT INTO TABLE1 VALUES('2','李四')";
String a3 = "INSERT INTO TABLE1 VALUES('3','王五')";
stmt.executeUpdate(a1);// 执行SQL命令对象
stmt.executeUpdate(a2);
stmt.executeUpdate(a3);
System.out.println("插入数据成功");

// 读取数据
System.out.println("开始读取数据");
ResultSet rs = stmt.executeQuery("SELECT * FROM TABLE1");// 返回SQL语句查询结果集(集合)
// 循环输出每一条记录
while (rs.next()) {
// 输出每个字段
System.out.println(rs.getString("ID") + "\t"
+ rs.getString("NAME"));
}
System.out.println("读取完毕");

// 关闭连接
rs.close();
stmt.close();// 关闭命令对象连接
conn.close();// 关闭数据库连接
} catch (SQLException e) {
e.printStackTrace();
// System.out.println("数据库连接错误");
System.exit(0);
}
}
}
运行结果:

数据库驱动成功
连接数据库成功
开始创建表
表创建成功
开始插入数据
插入数据成功
开始读取数据
1 张三
2 李四
3 王五
读取完毕

二、Windows 身份验证模式下的连接代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class SqlServerConnection {
public static void main(String[] args) {
String dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL数据库引擎
String dbUrl = "jdbc:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=Test";// 数据源

try {
Class.forName(dbDriver);// 加载数据库引擎,返回给定字符串名的类
} catch (ClassNotFoundException e) {
// e.printStackTrace();
System.out.println("加载数据库引擎失败");
System.exit(0);
}
System.out.println("数据库驱动成功");

try {
Connection conn = DriverManager.getConnection(dbUrl);// 连接数据库对象
System.out.println("连接数据库成功");
Statement stmt = conn.createStatement();// 创建SQL命令对象

// 创建表
System.out.println("开始创建表");
String sqlCreate = "create table TABLE2(ID NCHAR(2),NAME NCHAR(10))";// 创建表SQL语句
stmt.executeUpdate(sqlCreate);// 执行SQL命令对象
System.out.println("表创建成功");

// 输入数据
System.out.println("开始插入数据");
String a1 = "INSERT INTO TABLE2 VALUES('1','张三')";// 插入数据SQL语句
String a2 = "INSERT INTO TABLE2 VALUES('2','李四')";
String a3 = "INSERT INTO TABLE2 VALUES('3','王五')";
stmt.executeUpdate(a1);// 执行SQL命令对象
stmt.executeUpdate(a2);
stmt.executeUpdate(a3);
System.out.println("插入数据成功");

// 读取数据
System.out.println("开始读取数据");
ResultSet rs = stmt.executeQuery("SELECT * FROM TABLE2");// 返回SQL语句查询结果集(集合)
// 循环输出每一条记录
while (rs.next()) {
// 输出每个字段
System.out.println(rs.getString("ID") + "\t"
+ rs.getString("NAME"));
}
System.out.println("读取完毕");

// 关闭连接
rs.close();
stmt.close();// 关闭命令对象连接
conn.close();// 关闭数据库连接
} catch (SQLException e) {
e.printStackTrace();
// System.out.println("数据库连接错误");
System.exit(0);
}
}
}

运行结果:

数据库驱动成功
连接数据库成功
开始创建表
表创建成功
开始插入数据
插入数据成功
开始读取数据
1 张三
2 李四
3 王五
读取完毕

仔细观察上面两段代码,可以发现,两点不同,一个是数据库连接地址即 dbUrl 另一个是与其对应生成的 Connection 对象。

实际上使用Windows集成的安全性验证在访问数据库时具有很多优势:安全性更高、访问速度更快、减少重新设计安全架构的工作、可以硬编码连接字符串等,还是很值得使用的。有兴趣的可以试一下。
...全文
428 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wufeiafei 2011-11-19
很好 就是我的jdbc版本过低 不知道怎么安装啊
回复
快溜 2011-03-13
不错,分享,学习。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-13 02:37
社区公告
暂无公告