实验九
数据库连接的应用
一、实验目的
通过实验掌握下列知识
:
1
、掌握数据库连接技术;
2
、掌握使用
JAVA
技术与
select
语句进行数据查询的方法;
3
、掌握使用
JAVA
技术进行数据插入等修改操作的方法。
二、实验内容及步骤
1
、实验说明
1)把sql server的权限认证方式改为混合认证(通过“企业管理器”)
2)把服务器实例TCP/IP监听端口改为1433(通过“服务器网络实用工具”)
3
)试运行
web
应用
dbexample
中的
testSqlServer.jsp
页面,若有输出,说明
sql server
链接成功。
附:
JDBC
相关代码和
sql server
驱动包下载地址
http://wljx.zjut.edu.cn/common/script/download.jsp?fileid=33965&resid=43288
建立一个
edu
的数据库,当中在建一个
T_User
的表
表的参数类型和数据为
新建
odbc
LOCAL(WINDOWS NT)
——安全性——登陆——新建登陆
双击新建的登陆,并修改它们的相关属性
修改数据库的登陆
LOCAL(WINDOWS NT)
——右键属性——安全性——
SQL Server
和
Windows
建立
ODBC:
控制面板——管理工具——数据源(
ODBC
)——系统
DSN
——
localServer
——配置
新建一个
bdexample
的
web project
工程,再建一个
testsSqlServer.jsp
文件,
testsSqlServer.jsp
源代码:
<%@
page
language
=
"java"
contentType
=
"text/html; charset=gb2312"
pageEncoding
=
"gb2312"
%>
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=gb2312"
>
<
title
>
Insert title here
</
title
>
</
head
>
<
body
>
<%@
page
import
=
"java.sql.*"
%>
<%
Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver"
);
// .microsoft.jdbc.sqlServer.SQLServerDriver");
Connection conn = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=edu"
,
"test"
,
"test"
);
Statement st=conn.createStatement();
st.setMaxRows(20);
String sqlStr=
"select * from T_User"
;
ResultSet rs=st.executeQuery(sqlStr);
%>
<
table
width
=
200
border
=
1
>
<
tr
>
<
td
width
=
100
>
用户名
</
td
>
<
td
width
=
100
>
密码
</
td
>
</
tr
>
<%
while
(rs.next())
{
%>
<
tr
>
<
td
>
<%=
rs.getString(
"uid"
)
%>
</
td
>
<
td
>
<%=
rs.getString(
"upwd"
)
%>
</
td
>
</
tr
>
<%
}
rs.close(); st.close(); conn.close();
%>
</
table
>
</
body
>
</
html
>
运行结果
:
2
、数据库操作练习
在实验八的基础上修改
ShoppingCart
例子,实现基于数据库的购物车程序
1
)数据库设计(
access
或
sql server 2000
);
a)
通过
access
或
sql server 2000
创建一个数据库
BookStore
;
b)
在该数据库中创建包括用户信息与商品信息两张表;
2
)修改登录页面,将登录表单信息与数据库中读出的信息(用户名与密码)进行比较,以判断是否登录成功;
源代码:
Lodin.jsp
<%@
page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<!
DOCTYPE
html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html
>
<
head
>
<
meta
http-equiv="Content-Type" content="text/html; charset=GB2312">
<
title
>
用户登录
</
title
>
</
head
>
<
body
>
<
form
action="http://localhost:8080/testsql/servlet/CheckPwd" method="get">
用户名:
<
input
type=text name=userid size=20><br>
密码:
<
input
type=password name=userpwd size=20><br>
<
input
type=submit value="
登录
"
>
</
form
>
</
body
>
</
html
>
CheckPwd.java
import
java.io.IOException;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.sql.*;
/**
*
Servlet
implementation
class
CheckPwd
*/
public
class
CheckPwd
extends
HttpServlet {
private
static
final
long
serialVersionUID
= 1L;
/**
*
@see
HttpServlet#HttpServlet()
*/
public
CheckPwd() {
super
();
//
TODO
Auto-generated constructor stub
}
/**
*
@see
HttpServlet#doGet(HttpServletRequest
request,
HttpServletResponse
response)
*/
protected
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
String uid = request.getParameter(
"userid"
);
System.
out
.println(uid);
String pwd = request.getParameter(
"userpwd"
);
System.
out
.println(pwd);
String query =
"select * from T_user where uid='"
+uid+
"' and upwd='"
+pwd+
"'"
;
System.
out
.println(query);
//String query = "select * from T_user where uid='zhujiadun' and upwd='123456' ";
try
{
Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver"
);
Connection con = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=edu"
,
"test"
,
"test"
);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
System.
out
.println(
"ok"
);
if
(rs.next()){
response.sendRedirect(
"KidsBooksPage"
);
}
else
{
response.sendRedirect(
"http://localhost:8080/testsql/Login.jsp"
);
}
rs.close();
st.close();
con.close();
}
catch
(ClassNotFoundException ex){
}
catch
(SQLException e) {
e.printStackTrace();
}
}
/**
*
@see
HttpServlet#doPost(HttpServletRequest
request,
HttpServletResponse
response)
*/
protected
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//
TODO
Auto-generated method stub
doGet(request,response);
}
}
运行结果:
3
)修改
CatalogPage
,实现从数据库中读取书本信息并且显示。
源代码:
在
sql Server
的
edu
数据库中新建一张
KidsBooks
表
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.sql.Statement;
public
class
KidsBooksPage
extends
CatalogPage {
public
void
init() {
String[] ids =
new
String[3];
try
{
Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver"
);
Connection con = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=edu"
,
"test"
,
"test"
);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(
"select * from KidsBooks "
);
int
i = 0;
while
(rs.next()){
ids[i] = rs.getString(1);
i++;
}
setItems(ids);
setTitle(
"All-Time Best Children's Fantasy Books"
);
rs.close();
st.close();
con.close();
}
catch
(ClassNotFoundException ex){
}
catch
(SQLException e) {
e.printStackTrace();
}
}
}
中途遇到的问题:
JDBC
连接SQLServer的错误Error establishing socket
我在网上查询到问题解决的方式有大概如下 种:
一 配置错误
jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433
其中的sqlserver、server_name和端口号都要看仔细了。
二 1433端口问题
可以通过命令“netstat -an”,来查看是否开了1433端口,如果列表中没有,要增开端口。
要保持jdbc配置语句( jdbc:microsoft:sqlserver://server_name:1433)中的端口与数据库传输协议默认的端口相同。
MSSQL设置端口号步骤如下:
1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。
2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。
3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,一般默认端口是:1433。 如果你在url中用的端口号与这个不同,就会出现错误。应保持二者相同。
三 没打补丁
可以用如下的方式查看MSSQL的版本:
打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于
查看MSSQL的详细版本号
如果 是 8.00.194 就是还没打补丁
8.00.760 就是SP3
8.00.2039 就是SP4
我一直遇到的问题就是因为三没打补丁,等安装了补丁之后,问题就解决了