1. 程式人生 > >在Servlet中使用JDBC訪問資料庫

在Servlet中使用JDBC訪問資料庫

(1) 新建使用者登錄檔單頁 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <form action="login" method="post" id="myform">
        <table
align="center">
<tr> <td>使用者名稱:</td> <td><input type="text" name="name" title="使用者名稱"/></td> </tr> <tr> <td>密碼:</td> <td><input type
="password" name="pwd" title="密碼" />
</td> </tr> <tr> <td>性別:</td> <td> <input type="radio" name="sex" value="男" title="性別"/><input type="radio" name="sex" value
="女" title="性別"/>
</td> </tr> <tr> <td>年齡:</td> <td><input type="text" name="age" title="年齡" /></td> </tr> <tr> <td>Email:</td> <td><input type="text" name="email" title="Email" /></td> </tr> <tr> <td colspan="2" align="center"> <input type="button" value="注 冊" onclick="check()"/> <input type="reset" value="重 置" /> </td> </tr> </table> </form> </body> <script type="text/javascript"> // 檢查表單元素的值是否為空 function check(){ var myform = document.getElementById("myform"); for(var i=0; i<myform.length; i++ ){ if(myform.elements[i].value == ""){ alert(myform.elements[i].title + "不能為空"); myform.elements[i].focus(); return; } } myform.submit(); // 表單中最後input提交標籤用的是button型別,首先不提交表單,在js判斷表單項都不為空時 再提交表單。 } </script> </html>

(2) 新建名為UserInfo的JavaBean類,用於封裝使用者的註冊資訊。

package com.user;

/**
 * UerInfo的JavaBean類,該類用於封裝使用者的註冊資訊
 * 
 * @author yilong
 * 
 */
public class UserInfo {
    private String userName;
    private String userPwd;
    private String userSex;
    private int userAge;
    private String email;

    public UserInfo() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

(3) 在servlet中使用JDBC訪問資料庫。可以將資料庫連線的程式碼單獨寫成一個類,這樣在其他的功能模組中可以實現程式碼的重用。新建名為MySQLDBCon的類,該類主要包含一個建立資料庫連線的方法

package com.dbCon;

import java.sql.Connection;
import java.sql.DriverManager;

public class MySQLDBCon {
    private static Connection conn = null;

    public static Connection getCon() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String user = "root";
            String pwd = "123456";
            String url = "jdbc:mysql://localhost:3306/login_user";
            conn = DriverManager.getConnection(url, user, pwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}

(4) 新建名為LoginDao的類,該類中包含一個儲存使用者註冊資訊到資料庫的方法和一個獲得本例項的靜態方法

package com.dao;

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

import com.dbCon.MySQLDBCon;
import com.user.UserInfo;

public class LoginDao {
    private static LoginDao instance = null;

    public static LoginDao getInstance() {
        if (instance == null) {
            instance = new LoginDao();
        }
        return instance;
    }

    // 儲存使用者註冊資訊
    public boolean saveUser(UserInfo user) {
        Connection conn = null;
        try {
            conn = MySQLDBCon.getCon(); // 建立資料庫連線
            String sql = "insert into userinfo(userName,userPwd,userSex,userAge,email) values(?,?,?,?,?)"; // insert
                                                                                                            // SQL語句=
            PreparedStatement pstmt = conn.prepareStatement(sql); // 建立使用者操作執行SQL語句的PreparedStatement物件
            pstmt.setString(1, user.getUserName());
            pstmt.setString(2, user.getUserPwd());
            pstmt.setString(3, user.getUserSex());
            pstmt.setInt(4, user.getUserAge());
            pstmt.setString(5, user.getEmail());
            pstmt.executeUpdate(); // 編譯執行insert語句
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}

(5) 新建名為LoginServlet的Servlet類,在該類的doPost()方法中獲得表單提交的使用者註冊資訊,並將這些資訊封裝到使用者資訊類UserInfo中,然後呼叫LoginDao中的方法將註冊資訊儲存到資料庫中

package com.servlet.login;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.LoginDao;
import com.user.UserInfo;

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        request.setCharacterEncoding("UTF-8"); // 設定請求的字元編碼格式,與JSP登陸介面的字元編碼保持一致

        /** 以下是獲得表單提交過來的值 **/
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        int userAge = 0;
        if (age != null && !age.equals("")) {
            userAge = Integer.parseInt(age);
        }
        String email = request.getParameter("email");

        /** 以下程式碼將獲得的表單值封裝到使用者資訊物件中 **/
        UserInfo user = new UserInfo();
        user.setUserName(name);
        user.setUserPwd(pwd);
        user.setUserSex(sex);
        user.setUserAge(userAge);
        user.setEmail(email);
        boolean flag = LoginDao.getInstance().saveUser(user); // 將使用者註冊資訊儲存到資料庫
        // [request.getRequestDispatcher]和[response.sendRedirect]兩種請求轉發的區別:
        // 前者轉發時,URL地址不會改變,而後者轉發時URL會發生變化。其次,前者的請求響應為同一個,而後者是重新建立新的請求與響應物件。
        if(flag){       // 當註冊成功時,轉發到success.jsp頁面
            request.getSession().setAttribute("userName", user.getUserName());
            request.getRequestDispatcher("success.jsp").forward(request, response);
        }else{      // 否則,轉發到errorpage.jsp頁面,顯示錯誤資訊!
            response.sendRedirect("errorpage.jsp");
        }
    }

}

(6) 新建錯誤頁面errorpage.jsp,顯示出錯資訊。

<%@ 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>
    <h2>登陸失敗,請重新登陸!</h2>
    <!-- 保留原頁面資訊的腳本回退方式 -->
    <a href="javascript:history.back()">返回</a>

    <!-- 保留原頁面資訊的腳本回退方式 -->
    <!-- <a href="index.jsp">返回</a> -->
</body>
</html>

將獲取資料庫連線的程式碼、表單資料以及資料庫的操作都封裝在獨立的類中,而Servlet只是負責呼叫這些類,這樣便充分地體現了Servlet作為控制器(Controller)角色的作用。

相關推薦

Servlet使用JDBC訪問資料庫

(1) 新建使用者登錄檔單頁 index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-/

java 資料視覺化(二)通過jdbc訪問資料庫,在servlet上獲取資料庫資料

想要通過servlet獲取資料庫資料,首先需要建立jdbc 因為資料是通過無線感測傳到資料庫的,因此jdbc裡只有查詢操作,增刪改的同學可以自行新增。 程式碼中被註釋掉的部分用於測試。 main函式部分用於檢測是否連線上資料庫,並檢測是否能讀到資料,若是讀得到

ASP.NET C#訪問資料庫用三種方式顯示資料表

第一種方式:使用DataReader從資料庫中每次提取一條資料,用迴圈遍歷表                下面是我寫的一個例子:  &nbs

#使用JDBC訪問資料庫,實現web與資料庫的通訊

//驅動程式名 String driverName = "com.mysql.jdbc.Driver"; //資料庫使用者名稱 String userName = "root"; //密碼 String userPasswd = "1

如何通過JDBC訪問資料庫

//資料庫連線的本質其實就是客戶端維持了一個和遠端MySQL伺服器的一個TCP長連線,並且在此連線上維護了一些資訊。 //socket是TCP/IP協議的API。其只是對TCP/IP協議棧操作的抽象

oracle原生JDBC訪問資料庫

/** * */ package com.umcservice.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import j

JDBC訪問資料庫之MySql

what: jdbc是一組API when:  應用程式和資料庫通過JDBC實現資料互動 how:(嚴格來說分為以下五步:     Class.forName()載入驅動——     DriverManager獲取

java開發JDBC連線資料庫的步驟

JDBC核心類 DriverManager 用於管理驅動/獲得連線 Connection 用於連線資料庫 Statement 用於執行SQL語句 ResultSet 使用者獲取執行結果,可

JDBC訪問資料庫的步驟

1.裝載驅動程式 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//使用JDBC-ODBC裝載驅動程式 Class.forName("com.mysq

完整java開發JDBC連線資料庫程式碼和步驟

宣告:來自Hongten(部落格園) JDBC連線資料庫 建立一個以JDBC連線資料庫的程式,包含7個步驟: 1、載入JDBC驅動程式: 在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器), 這通過java.lang

MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程訪問資料庫,遞迴之前只訪問兩次 進行遞迴前資料準備)

查詢檔案樹 實體類 public class TradeInfoFile { ​ // 檔案編碼(子) private String fileCode; // 所屬檔案編碼(父) private String belongFileCode; // 交易

JDBC訪問資料庫最佳程式碼

package reusing; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultS

Servlet訪問Spring bean物件,但是不能直接以注入的方式引用

在Servlet中使用註解的方式引用Spring bean物件,會報空指標,因此可以在init()方法中通過WebApplicationContextUtils.getWebApplicationContext(serv

javaEE jdbc載入資料庫驅動失敗

jdbc連結mysql資料庫的時候            Class.forName("com.mysql.jdbc.Driver"); 這句報ClassNotFoundException,網上找了一下,這篇部落格講的非常實用,推薦給大家 http://blog.csdn.

JDBC 訪問資料庫的基本步驟(

(1)載入JDBC驅動: 將資料庫的JDBC驅動載入到classpath中,在基於JavaEE的Web應用實際開發過程中,通常要把目標資料庫產品的JDBC驅動複製到WEB-INF/lib下. (2)例項化資料庫連線驅動類: 並將其註冊到DriverManager中.下面是一些主流資料庫的JDBC舉動載入註冊的

JavaJDBC資料庫連線池

資料庫連線池 池引數(所有池引數都有預設值): 初始大小:10個 最小空閒連線數:3個 增量:一次建立的最小單位(5個) 最大空閒連線數:12個 最大連線數:20個 最大的等待時間:1000毫秒 四

JDBC訪問資料庫的基本步驟

jdbc連線SQL server的步驟: 載入驅動driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; Class.forName(driver); 建立連線 url ="jdbc:sqls

java-JDBC訪問資料庫

Java語言提供了對資料庫的強大支援,Java語言提供JDBC來實現對資料庫訪問和資料處理的支援。利用JDBC來訪問特定的資料庫,實現對資料庫的各種操作。具體有7步: (1) 匯入JDBC類; (2)

javaJDBC詳解 附帶實現配置檔案訪問資料庫

JDBC 是Java操作資料庫的規範,它實際上定義了一組標準的資料庫的介面,為了實現通過java操作資料庫,必須實現這些介面,不同的資料庫廠商都提供了對JDBC介面的實現,這些具體的實現被打包成一個jar包(也就是資料庫驅動),供我們在開發的時候直接使用。 J

關於servlet匯入資料庫執行時提示找不到合適的驅動(No suitable driver found for jdbc

感謝網友分享    1.連線URL格式出現了問題(Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/XX","root","XXXX")   2。驅動字串出錯(com.mysql