web实验报告——数据库连接与应用(SQL Server)

实验九 数据库连接的应用
一、实验目的
通过实验掌握下列知识 :
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
我一直遇到的问题就是因为三没打补丁,等安装了补丁之后,问题就解决了

你可能感兴趣的:(web实验报告——数据库连接与应用(SQL Server))