文章出處

本文將給出一個最簡單的Java查詢數據庫中一張表的數據并將查詢結果展示在頁面的例子.

實際上,我們要解決以下兩個問題:

  • Java與數據庫交互(以JDBC為例)
  • 數據展示在前臺頁面(以Servlet+JSP為例)

數據結構:

學生表(student)
student_id : 學號(主鍵,字符,非空)
student_name:學生姓名(字符,非空)
student_age:學生年齡(整型,非空)

附:數據庫腳本和初始化數據(MySQL為例):

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `student_id` varchar(255) NOT NULL,
  `student_name` varchar(255) NOT NULL,
  `student_age` int(11) NOT NULL,
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', 'zhangsan', '20');
INSERT INTO `student` VALUES ('2', 'lisi', '21');
INSERT INTO `student` VALUES ('3', 'wangwu', '19');

Java與數據庫交互(以JDBC為例):

import java.sql.*;

public class Main {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost/tt";


    static final String USER = "root";
    static final String PASS = "root";

    public static void main(String[] args) throws Exception {
        Connection conn = null;
        Statement stmt = null;

        //STEP 2: Register JDBC driver
        Class.forName(JDBC_DRIVER);

        //STEP 3: Open a connection
        conn = DriverManager.getConnection(DB_URL,USER,PASS);

        //STEP 4: Execute a query
        stmt = conn.createStatement();
        String sql;
        sql = "SELECT student_id, student_name, student_age FROM student";
        ResultSet rs = stmt.executeQuery(sql);

        //STEP 5: Extract data from result set
        while(null != rs && rs.next()){

            String studentId  = rs.getString("student_id");
            String studentName = rs.getString("student_name");
            int student_age = rs.getInt("student_age");


            System.out.println("student_id: " + studentId);
            System.out.println("student_name: " + studentName);
            System.out.println("student_age: " + student_age);
            System.out.println("-----------");
        }

        rs.close();
        stmt.close();
        conn.close();
    }
}

需要注意:
1.運行這個程序需要下載MySQL驅動包:

http://www.mysql.com/downloads/

2.這個程序肯定可以優化,利用之前學的封裝,異常處理等知識優化一下這段代碼。

3.試著實現對數據庫的其他操作,比如增刪改。


數據展示在前臺頁面(以Servlet+JSP為例):

輸入頁面input.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>
    <form action="HandleServlet">
        <input type="text" id="studentName" name="studentName"> <input
            type="submit" value="submit">
    </form>
</body>
</html>

新建Servlet:HandleServlet.java 配置其URL Mappings為:/HandleServlet
在其doGet方法里面寫以下代碼:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String studentName = request.getParameter("studentName");
        System.out.println("已經傳到后臺:"+studentName);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/output.jsp");
        request.setAttribute("studentName",studentName);// 傳回前臺
        dispatcher .forward(request, response);
        
    }

輸出界面:output.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>
    歡迎:<%=request.getAttribute("studentName")%>
</body>
</html>

將程序部署到Tomcat下,啟動Tomcat,訪問input,并輸入學生名字,點擊submit按鈕,則:

1.HandleServlet接收到學生名字的輸入并打印在控制臺。
2.HandleServlet將學生名字傳到output.jsp頁面并展示出來。

需要注意:

1.代碼肯定還可以優化,如:JSP頁面可以采用JSTL標簽來獲取數據。
2.Eclipse配置tomcat參考:

http://jingyan.baidu.com/article/ca2d939dd90183eb6d31ce79.html

到目前為止,將這一步和之前的與數據庫連接結合起來,就可以實現頁面展示在前臺界面的功能,部分只實現靜態頁面的團隊可以參考一下將自己的靜態頁面變為動態從數據庫取數據的方式。

若能將取數據的過程發布成服務(如:webservice),也會是一個不錯的方向,有想法的童鞋,可以試試看。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()