JavaWeb連接SQLServer數據庫並完成一個登錄界面及其功能設計。


一、JDBC連接SQLserver數據庫的步驟:

  1.下載SQLserver的JDBC驅動文件——Microsoft JDBC Driver 4.0 for SQL Server

  2.例如下載得到的文件是sqljdbc_4.0.2206.100_chs.exe,解壓文件,將解壓縮文件中的sqljdbc4.jar放到eclipse-workspace\User_Message(新建的JavaWeb項目)\WebContent\WEB-INF\lib目錄下

  3.加載JDBC驅動程序:在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(String  className)實現,成功加載后,會將Driver類的實例注冊到DriverManager類中

  示例語句:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

 

  4.創建連接對象:要連接數據庫,需要向java.sql.DriverManager請求並獲得Connection對象, 該對象就代表一個數據庫的連接,使用DriverManager的getConnectin(String url , String username , String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼,其中url定義了連接數據庫時的協議、子協議、數據源標識,協議——在JDBC中總是以jdbc開始,子協議——是橋連接的驅動程序或是數據庫管理系統名稱,數據源標識——標記找到數據庫來源的地址與連接端口。

  示例語句:

String user="sa";

String password="woshizcy0919";

String url=
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=User_DB";

Connection connection=DriverManager.getConnection(url, user, password);

 

  5.准備SQL語句:

  示例語句:

String sql="select count(*) from t_user where username=?";

 

  6.執行SQL語句:先將SQL語句賦給preparedStatement對象,下面有兩種執行SQL語句的方法executeQuery 、executeUpdate

          (1)ResultSet executeQuery():執行查詢數據庫的SQL語句,返回值為一個結果集(ResultSet)對象。    

            (2)int executeUpdate():執行INSERT、UPDATE或DELETE語句以及SQL DDL語句(如:CREATE TABLE和DROP TABLE等),並更新數據庫,返回值為本次操作影響的行數,即記錄數。

  示例語句:

PreparedStatement preparedStatement=

connection.prepareStatement(sql);

preparedStatement.setString(1, user.getUsername());
resultSet=preparedStatement.executeQuery();

preparedStatement.executeUpdate();

 

  7.操作結果集對象:

  結果集中包含符合SQL語句查詢條件的所有行,即所有記錄,並且它通過一套get方法提供了對這些行中數據的訪問,使用結果集對象(resultSet)的訪問方法獲取數據。

  (1)resultSet.next():讀取結果集中的下一行,即下一條記錄。

  (2)resultSet.getInt(int index)

      resultSet.getInt(String columName):

      通過索引或者列名來獲得查詢結果集中的某一列的值。

  示例語句:

//例:現有表User:列有id,name

String sql="select * from User";

ResultSet resultSet = null; 

resultSet = preparedStatement.executeQuery(sql);

while(resultSet.next)

{

resultSet.getInt(1)//等價於resultSet.getInt("id");

resultSet.getString(2)//等價於resultSet.getInt("name");

}

 

  8.關閉JDBC對象:

  示例語句:

DBUtil.close(resultSet);

DBUtil.close(preparedStatement);

DBUtil.close(connection);

 

二、登錄界面及其功能設計

1.對數據庫操作方法的接口

package com.jaovo.msg.dao;

import java.util.List;

import com.jaovo.msg.model.User;

public interface IUserDao 
{
    public void add(User user);

    public void delete(int id);

    public void update(User user);

    public User load(int id);

    public User load(String username);

    public List<User> load(); 
}

2.實現接口的類

package com.jaovo.msg.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.jaovo.msg.Util.DBUtil;
import com.jaovo.msg.Util.UserException;
import com.jaovo.msg.model.User;

public class UserDaoImpl implements IUserDao
{
    public void add(User user) 
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="select count(*) from t_user where username=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        try 
        {
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setString(1, user.getUsername());
        //接收結果集
        resultSet=preparedStatement.executeQuery();    
        //遍歷結果集
        while(resultSet.next()) 
        {
            if(resultSet.getInt(1)>0) 
            {
                throw new UserException("用戶已存在!");
            }
        }
        sql="insert into t_user(username,nickname,password) values(?,?,?)";
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setString(1, user.getUsername());
        preparedStatement.setString(2, user.getNickname());
        preparedStatement.setString(3, user.getPassword());
        preparedStatement.executeUpdate();
        //重寫底層代碼:
        /*
        sql="insert into t_user(id,username,userpassword,nickname)values('"+user.getId()+"','"+user.getUsername()+"','"+user.getPassword()+"','"+user.getNickname()+"')";
        Statement stmt;
        Connection con=DBUtil.getConnection();
        stmt=con.createStatement();
        stmt.executeUpdate(sql);
        */
        //重寫結束
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            //關閉JDBC對象
            DBUtil.close(resultSet);
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);    
        }
    }

    public void delete(int id)
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="delete from t_user where id=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        try 
        {
            
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1, id);
            preparedStatement.executeUpdate();
            
        }
        catch(SQLException e) 
        {
            e.printStackTrace();
            
        }
        finally 
        {
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);
        }
    }

    public void update(User user) 
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="delete from t_user where id=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        try 
        {
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1, user.getUsername());
            preparedStatement.setString(2, user.getNickname());
            preparedStatement.setInt(3, user.getId());
            preparedStatement.executeUpdate();
        }
        catch(SQLException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);
        }
    }

    public User load(int id) 
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="select * from t_user where id=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        User user=null;
        try 
        {
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1, id);
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()) 
            {
                user=new User();
                user.setId(id);
                user.setUsername(resultSet.getString("username"));
                user.setPassword(resultSet.getString("password"));
                user.setNickname(resultSet.getString("nickname"));
            }        
        }
        catch(SQLException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            DBUtil.close(resultSet);
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);        
        }
            return user;
    }

    public User load(String username) 
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="select * from t_user where username=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        User user=null;
        try 
        {
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1, username);
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()) 
            {
                user=new User();
                user.setId(resultSet.getInt("id"));
                user.setUsername(username);
                user.setPassword(resultSet.getString("password"));
                user.setNickname(resultSet.getString("nickname"));
            }
        }
        catch(SQLException e) 
        {
        e.printStackTrace();
        }
        finally 
        {
            DBUtil.close(resultSet);
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);        
        }
        return user;
    }

    public List<User> load() 
    {
        //獲得連接的對象
        Connection connection=DBUtil.getConnection();
        //准備sql語句
        String sql="delete from t_user where id=?";
        //創建語句傳輸對象
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        List<User> users=new ArrayList<User>();
        User user=null;
        try 
        {
            preparedStatement=connection.prepareStatement(sql);
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()) 
            {
                user=new User();
                user.setId(resultSet.getInt("id"));
                user.setUsername(resultSet.getString("username"));
                user.setNickname(resultSet.getString("nickname"));
                user.setPassword(resultSet.getString("password"));
                users.add(user);
            }
            
        }
        catch(SQLException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            DBUtil.close(resultSet);
            DBUtil.close(preparedStatement);
            DBUtil.close(connection);
        }
        return users;
    }
    //檢查密碼是不是錯誤
    public boolean check(User user) 
    {
        boolean flag=false;
        Connection connection=DBUtil.getConnection();
        String sql="select * from t_user where username=?";
        PreparedStatement preparedStatement = null;
        ResultSet resultSet=null;
        try 
        {
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1,user.getUsername());
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()) 
            {
                if(resultSet.getString("password").equals(user.getPassword().toString().trim())) 
                {
                    flag=true;
                    break;
                }
            }
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
        return flag;
    }
}

 

3.用戶模型類

package com.jaovo.msg.model;

public class User 
{
    private int id;
    private String username;
    private String nickname;
    private String password;
    public int getId() 
    {
        return id;
    }
    public void setId(int id) 
    {
        this.id = id;
    }
    public String getUsername() 
    {
        return username;
    }
    public void setUsername(String username) 
    {
        this.username = username;
    }
    public String getNickname() 
    {
        return nickname;
    }
    public void setNickname(String nickname)
    {
        this.nickname = nickname;
    }
    public String getPassword() 
    {
        return password;
    }
    public void setPassword(String password) 
    {
        this.password = password;
    }
}

 

4.工具類(用於連接數據庫和關閉JDBC對象)

package com.jaovo.msg.Util;

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

public class DBUtil 
{
    public static Connection getConnection() 
    {
        try 
        {
            //加載驅動
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            System.out.println("驅動加載成功!");
        }
        catch(ClassNotFoundException | InstantiationException | IllegalAccessException e) 
        {            
            System.out.println("驅動加載失敗!");
            e.printStackTrace();
        }
        String user="sa";
        String password="woshizcy0919";
        String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=User_DB";
        Connection connection=null;
        try 
        {
            //創建鏈接對象connection
            connection=DriverManager.getConnection(url, user, password);
            System.out.println("數據庫連接成功!");
        }
        catch(SQLException e) 
        {
            System.out.println("數據庫連接失敗!");
            e.printStackTrace();
        }
        return connection;
    }
    
    //關閉資源的方法
    public static void close(Connection connection) 
    {
        if(connection!=null) 
        {
            try 
            {
                connection.close();
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
        }
    }
    
    public static void close(PreparedStatement preparedStatement) 
    {
        
        if(preparedStatement !=null) 
        {
            try 
            {
                preparedStatement.close();
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
        }
    }
    
    public static void close(ResultSet resultSet) 
    {
            if(resultSet!=null) 
            {
                try 
                {
                    resultSet.close();
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
            }
    }    
}

 

5.異常拋出類

package com.jaovo.msg.Util;

public class UserException extends RuntimeException
{
    public UserException() 
    {
        super();
    }

    public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) 
    {
        super(message, cause, enableSuppression, writableStackTrace);
    }

    public UserException(String message, Throwable cause) 
    {
        super(message, cause);
    }

    public UserException(String message) 
    {
        super(message);
    }

    public UserException(Throwable cause) 
    {
        super(cause);
    }    
}

 

6.jsp界面代碼

(1)登錄界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>歡迎來到登錄界面</title>
</head>
<body>
<%=request.getAttribute("error") %>
<form action="LoginCheck.jsp" method="post">
    <table align="center" border="1" width="500">
    <caption>用戶登錄</caption>
        <tr>
            <td>賬號:</td>
            <td>
            <input type="text" name="username"/>
            </td>
        </tr>
        <tr>
            <td>密碼:</td>
            <td>
            <input type="password" name="password">
            </td>
        </tr>
        <tr align="center">
            <td colspan="2">
            <input type="submit" value="登錄"/>
            <input type="button" value="注冊" onClick="window.location.href='addInput.jsp'"/>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

 

(2)登錄驗證界面

<%@page import="com.jaovo.msg.Util.UserException"%>
<%@page import="com.jaovo.msg.dao.UserDaoImpl"%>
<%@page import="com.jaovo.msg.model.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>用戶身份驗證</title>
</head>
<body>
<%
    //接收客戶端傳遞過來的參數
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if(username == null || "".equals(username.trim())||password == null || "".equals(password.trim()))
    {
        request.setAttribute("error", "用戶名和密碼不能為空!");
%>
    <jsp:forward page="Login.jsp"></jsp:forward>
<%
    }
%>
<%
    User user = new User();
    user.setUsername(username);
    user.setPassword(password);
    UserDaoImpl userDao = new UserDaoImpl();
    try
    {
        if(userDao.load(username)==null)
        {
            throw new UserException();
        }
        if(userDao.check(user)==true)
        {
%>
    登錄成功!<br>
<%
        }
        else
        {
%>
    密碼輸入錯誤!<br>
<%
        }
    }
    catch(UserException e)
    {
%>
    <h2 style="color:red ; font-size:50px">該用戶名不存在</h2>
    <%
    }
    %>
    </body>
</html>

 

(3)用戶注冊界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>用戶添加頁面</title>
</head>
<body>
    <form action="add.jsp" method="get">
        <table align="center" border="1" width="500">
            <tr>
                <td>用戶名稱 : </td>
                <td>
                    <input type="text" name="username" />
                </td>
            </tr>
                <tr>
                <td>用戶密碼:</td>
                <td>
                    <input type="password" name="password" />
                </td>
            </tr>
            <tr>
                <td>用戶昵稱:</td>
                <td>
                    <input type="text" name="nickname" />
                </td>
            </tr>
            <%=request.getAttribute("error") %>
            <tr align="center">
                <td colspan="2">
                    <input type="submit" value="提交" />
                    <input type="reset" value="重置" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

 

(4)注冊結果界面

<%@page import="com.jaovo.msg.Util.UserException"%>
<%@page import="com.jaovo.msg.dao.UserDaoImpl"%>
<%@page import="com.jaovo.msg.model.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>用戶添加頁面</title>
</head>
<body>
<%
    //接收客戶端傳遞過來的參數
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String nickname = request.getParameter("nickname");
    if(username == null || "".equals(username.trim())||password == null || "".equals(password.trim())){
        request.setAttribute("error", "用戶名和密碼不能為空!");
%>
    <jsp:forward page="addInput.jsp"></jsp:forward>
<%
    }
%>
<%
    User user = new User();
    user.setUsername(username);
    user.setPassword(password);
    user.setNickname(nickname);
    
    UserDaoImpl userDao = new UserDaoImpl();
    try{
    userDao.add(user);
%>
    注冊成功!<br>
    <a href="addInput.jsp">返回</a><br>
    <a href="#">用戶列表</a>
<%
    }catch(UserException e){
%>
    <h2 style="color:red ; font-size:50px">發生錯誤 : <%=e.getMessage() %></h2>
    <%
    }
    %>
    </body>
</html>

 

7.運行結果界面截圖:

(1)登錄界面

(2)登錄成功

(3)用戶名或密碼為空

(4)用戶名不存在

(5)密碼錯誤

(6)注冊界面

(7)注冊成功

(8)注冊重復

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM