【助教】Java获取数据库数据展示

本文将给出一个最简单的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),也会是一个不错的方向,有想法的童鞋,可以试试看。

你可能感兴趣的:(java)