在本章中,我們將討論如何使用JSP存取資料庫(這裡以MySQL資料庫為例)。並假設您對JDBC應用程式的工作方式有很好的了解。在開始通過JSP進行資料庫存取之前,請確保您具有適當的JDBC環境設定以及安裝好MySQL資料庫。
學習本教學的前置知識 -
如果沒有學習過MySQL,請參考:MySQL教學 。有關如何使用JDBC及其環境設定存取資料庫的更多詳細資訊,可以參閱JDBC教學。
這裡,我們從基本概念開始,首先在MySQL的testdb
資料庫中建立一個表:employees
,並在該表中建立一些記錄,參考以下SQL語句:
USE testdb;
DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`age` int(3) unsigned NOT NULL DEFAULT '0',
`education` varchar(32) DEFAULT '' COMMENT '學歷',
`address` varchar(254) DEFAULT NULL,
`salary` float(8,2) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of employees
-- ----------------------------
INSERT INTO `employees` VALUES ('1', '李小春', '23', '其它', '海口市人民大道1800號', '8900.00');
INSERT INTO `employees` VALUES ('2', '張輝', '28', '本科', '廣州天河區珠村市場', '15800.98');
INSERT INTO `employees` VALUES ('3', '林賢弟', '29', '博士', '廣州白雲區龍塘村120號', '18990.99');
INSERT INTO `employees` VALUES ('4', '王小簡', '23', '本科', '海口人民大道1688號', '899.98');
INSERT INTO `employees` VALUES ('5', '蔡世傑', '27', '專科', '上海市寶山區聯楊路2211弄26號', '15800.00');
INSERT INTO `employees` VALUES ('6', '張承龍', '30', '本科', '上海市虹口區虯江路522號', '23000.00');
INSERT INTO `employees` VALUES ('7', '李林奕', '26', '本科', '上海市徐匯區漕寶路440號', '32600.00');
INSERT INTO `employees` VALUES ('8', '劉皓軒', '28', '研究生', '上海松江九亭立同商務廣場', '29000.00');
INSERT INTO `employees` VALUES ('9', '周佳豪', '36', '博士', '深圳市寶安區沙井街道辦107國道富達工業區B棟', '48000.00');
INSERT INTO `employees` VALUES ('10', '陳聰', '23', '本科', '福田區文蔚大廈19層', '9800.00');
開啟Eclipse建立一個動態Web專案:JspMySQL, 其專案結構如下所示 -
注意:需要將MySQL的連線驅動程式:mysql-connector-java-5.1.40-bin.jar放入到{WebApp}/WEB-INFO/lib目錄下。
以下範例顯示了如何在JSP程式設計中使用JTSL
執行SQL SELECT語句。
檔案:select.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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>JSP+MySQL查詢資料</title>
</head>
<body>
<div style="margin: auto; width: 80%">
<sql:setDataSource var="connection" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8"
user="root" password="123456" />
<sql:query dataSource="${connection}" var="result">
SELECT * from employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>編號</th>
<th>名字</th>
<th>薪水</th>
<th>地址</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.name}" /></td>
<td>¥<c:out value="${row.salary}" /></td>
<td><c:out value="${row.address}" /></td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
在編寫上面範例程式碼後,執行專案,開啟瀏覽器存取URL: http://localhost:8080/JspMySQL/select.jsp
, 應該會看到以下結果 -
以下範例顯示了如何在JSP程式設計中使用JTSL
執行SQL INSERT語句。
檔案:insert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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>JSP+MySQL插入資料</title>
</head>
<body>
<div style="margin: auto; width: 80%">
<sql:setDataSource var="connection" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8"
user="root" password="123456" />
<sql:update dataSource="${connection}" var="count">
INSERT INTO employees(`name`,`age`,`education`,`address`,`salary`)
VALUES ('李路路', 24, '本科', '北京朝陽區', 13600);
</sql:update>
<sql:query dataSource="${connection}" var="result">
SELECT * from employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>編號</th>
<th>名字</th>
<th>薪水</th>
<th>地址</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.name}" /></td>
<td>¥<c:out value="${row.salary}" /></td>
<td><c:out value="${row.address}" /></td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
在編寫上面範例程式碼後,執行專案,開啟瀏覽器存取URL: http://localhost:8080/JspMySQL/insert.jsp
, 應該會看到以下結果 -
以下範例顯示了如何在JSP程式設計中使用JTSL
執行SQL DELETE語句。
檔案:delete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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>JSP+MySQL刪除資料</title>
</head>
<body>
<div style="margin: auto; width: 80%">
<sql:setDataSource var="connection" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8"
user="root" password="123456" />
<!-- 執行刪除語句 -->
<sql:update dataSource="${connection}" var="count">
DELETE FROM employees WHERE id>5;
</sql:update>
<sql:query dataSource="${connection}" var="result">
SELECT * from employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>編號</th>
<th>名字</th>
<th>薪水</th>
<th>地址</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.name}" /></td>
<td>¥<c:out value="${row.salary}" /></td>
<td><c:out value="${row.address}" /></td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
在編寫上面範例程式碼後,執行專案,開啟瀏覽器存取URL: http://localhost:8080/JspMySQL/delete.jsp
, 應該會看到以下結果 -
以下範例顯示了如何在JSP程式設計中使用JTSL
執行SQL UPDATE語句。
檔案:update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!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>JSP+MySQL更新資料</title>
</head>
<body>
<div style="margin: auto; width: 80%">
<sql:setDataSource var="connection" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8"
user="root" password="123456" />
<!-- 執行更新語句 -->
<c:set var = "empId" value = "1"/>
<sql:update dataSource="${connection}" var="count">
UPDATE employees SET name='李家誠' WHERE id=?
<sql:param value = "${empId}" />
</sql:update>
<c:set var = "empId" value = "2"/>
<sql:update dataSource = "${connection}" var = "count">
UPDATE employees SET salary = '19999.99' WHERE id=?
<sql:param value = "${empId}" />
</sql:update>
<sql:query dataSource="${connection}" var="result">
SELECT * from employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>編號</th>
<th>名字</th>
<th>薪水</th>
<th>地址</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.name}" /></td>
<td>¥<c:out value="${row.salary}" /></td>
<td><c:out value="${row.address}" /></td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
在編寫上面範例程式碼後,執行專案,開啟瀏覽器存取URL: http://localhost:8080/JspMySQL/update.jsp
, 應該會看到以下結果 -