本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础、网页布局、数据库基础、Servlet、前端后台数据库交互、DAO等知识。
前一篇文章讲解了MyEclipse环境下创建JSP注册表页面,并通过Servlet获取所提交的数据。这一篇文章将讲解MySQL数据库基本操作,并分享Servlet链接数据库的方法。基础性文章,希望对读者有所帮助 ,尤其是我的学生。
参考前文:
Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门
Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作
Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作
前文:
[JSP暑假实训] 一.MyEclipse安装及JAVA基础知识
[JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算
首先下载mysql-5.0.96-winx64,安装过程如下图所示。
1.安装MySQL 5.0
2.选择手动配置、服务类型、通用多功能型和安装路径
3.设置数据库访问量连接数为15、端口为3306(代码中设置URL用到)、编码方式为utf-8
4.设置默认超级root用户的用户名和密码,最后安装成功
安装MySQL 5.0成功后,进行数据库的简单操作。
1.运行MySQL输入默认用户密码123456,并创建数据库hcp(火车票),使用数据库。
--创建数据库
create database hcp;
--使用数据库
use database hcp;
2.创建表info(详情表),包括序号、起始地、目的地、车次、出发时间、价格、备注。
CREATE TABLE `info` (
`id` int(11) NOT NULL auto_increment,
`start` varchar(40) default NULL,
`end` varchar(40) default NULL,
`name` varchar(40) default NULL,
`starttime` datetime default NULL,
`price` float default NULL,
`otuer` varchar(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中,id为自增整数,并且为主键,其他的包括varchar类型、时间类型、浮点型等。
3.显示表结构,使用语句desc info。
4.向信息表中插入数据并显示查询的数据。
INSERT INTO `info` VALUES ('1', 'guiyang', 'kunming', 'T61', '2019-06-29 12:00:00', '56', NULL);
INSERT INTO `info` VALUES ('2', 'guiyang', 'kaili', 'T88', '2019-06-29 12:00:00', '26', NULL);
INSERT INTO `info` VALUES ('3', '贵阳', '西安', 'T98', '2019-07-04 12:00:00', '126', NULL);
INSERT INTO `info` VALUES ('4', '贵阳', '武汉', 'T34', '2019-07-04 12:00:00', '86', NULL);
INSERT INTO `info` VALUES ('5', '贵定', '西安', 'T51', '2019-07-04 12:00:00', '134', NULL);
INSERT INTO `info` VALUES ('6', '昆明', '武汉', 'T21', '2019-06-29 12:00:00', '123', NULL);
通过 “select * from info;” 查询数据,得到如下图所示结果:
此时MySQL操作数据库基本讲解结束,你同样可以实现数据库的增删改查、事务、存储过程等操作,建议安装可视化的软件来替代黑框。
1.运行该软件,点击“连接”按钮新建一个连接。
2.在“新建连接”中输入自定义连接名,数据库用户名为“root”,密码“123456”。
3.选中数据库“hcp”,可以对表进行查看、设计、新建、删除、导入、导出等操作。
其中,设计表可以修改表的内容,或者添加新的字段,如下图所示:
双击表,可以查看数据如下所示:
4.选中数据库“hcp”,右键“转储SQL文件”,将整个数据库的内容导出sql文件。
导出的SQL文件内容如下:
/*
Navicat MySQL Data Transfer
Source Server : 20190704
Source Server Version : 50622
Source Host : localhost:3306
Source Database : hcp
Target Server Type : MYSQL
Target Server Version : 50622
File Encoding : 65001
Date: 2019-07-04 23:51:16
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `info`
-- ----------------------------
DROP TABLE IF EXISTS `info`;
CREATE TABLE `info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start` varchar(40) DEFAULT NULL,
`end` varchar(40) DEFAULT NULL,
`name` varchar(40) DEFAULT NULL,
`starttime` datetime DEFAULT NULL,
`price` float DEFAULT NULL,
`otuer` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of info
-- ----------------------------
INSERT INTO `info` VALUES ('1', 'guiyang', 'kunming', 'T61', '2019-06-29 12:00:00', '56', null);
INSERT INTO `info` VALUES ('2', 'guiyang', 'kaili', 'T88', '2019-06-29 12:00:00', '26', null);
INSERT INTO `info` VALUES ('3', '贵阳', '西安', 'T98', '2019-07-04 12:00:00', '126', null);
INSERT INTO `info` VALUES ('4', '贵阳', '武汉', 'T34', '2019-07-04 12:00:00', '86', null);
INSERT INTO `info` VALUES ('5', '贵定', '西安', 'T51', '2019-07-04 12:00:00', '134', null);
INSERT INTO `info` VALUES ('6', '昆明', '武汉', 'T21', '2019-06-29 12:00:00', '123', null);
为统一并简化Java语言操作各种数据库,Sun公司提供了JDBC框架,用于所有Java应用以统一的方式连接数据库。JDBC(Java DataBase Connectivity,Java数据库连接)通过使用数据库厂家提供的数据库JDBC驱动器类,可以连接到任何流程的数据库上。
1.加载JDBC驱动程序(MySQL驱动)
Class.forName("com.mysql.jdbc.Driver") ;
2.提供JDBC连接的URL
//驱动程序名
String driverName = "com.mysql.jdbc.Driver";
//数据库用户名
String userName = "root";
//密码
String userPasswd = "123456";
//数据库名
String dbName = "hcp";
//表名
String tableName = "info";
//联结字符串
String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="
+ userName + "&password=" + userPasswd;
3.创建数据库的连接
Connection connection = DriverManager.getConnection(url);
4.创建一个Statement
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
5.执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1).ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2).int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等。
3).execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
6.处理结果
两种情况:执行更新返回的是本次操作影响到的记录数、执行查询返回的结果是一个ResultSet对象。
// 此方法比较高效 列是从左到右编号的,并且从列1开始
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ;
}
7.关闭JDBC对象
//释放连接方法 con ps rs
public static void release(Connection con,Statement ps,ResultSet rs){
try{
if(rs!=null){ // 关闭记录集
rs.close();
}
if(ps!=null){ // 关闭声明
ps.close();
}
if(con!=null){ // 关闭连接对象
con.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
下面介绍最终Servlet连接本地数据库并显示内容的实验,步骤如下:
1.新建“test0704_web”工程,其文件夹如下图所示。
2.修改“index.jsp”代码如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<div align="center">
<img src="imgs/bg.jpg" height="200" width="80%" /><br />
<hr width="80%" color="red" size="3" />
<h2>火车票查询h2>
<table border="2" width="80%">
<tr>
<td>序号td><td>起始地td><td>目的地td>
<td>车次td><td>时间td><td>价格td><td>备注td>
tr>
table>
div>
body>
html>
此时运行结果如下图所示:
3.在JSP文件中增加JAVA连接数据库的代码,放置<% %>之间,需要注意while循环多次遍历显示 < tr > < td > 布局。
PS:增加 java.sql.* 扩展包
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<div align="center">
<img src="imgs/bg.jpg" height="200" width="80%" /><br />
<hr width="80%" color="red" size="3" />
<h2>火车票查询h2>
<%
//驱动的名称
String driverName = "com.mysql.jdbc.Driver";
//数据库用户名密码
String userName = "root";
String userPwd = "123456";
//数据库名字
String dbName = "hcp";
//表名
String tableName = "info";
//拼接字符串链接数据库
String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="
+ userName + "&password=" +userPwd;
//链接数据库
Class.forName("com.mysql.jdbc.Driver").newInstance();
//SQL查询
ResultSet re;
Connection con = DriverManager.getConnection(url);
Statement statement = con.createStatement();
String sql = "select * from " + tableName;
System.out.println(sql);
re = statement.executeQuery(sql);
%>
<table border="2" width="80%">
<tr>
<td>序号td><td>起始地td><td>目的地td>
<td>车次td><td>时间td><td>价格td><td>备注td>
tr>
<%
while (re.next()) {
%>
<tr>
<td><% out.print(re.getString(1)); %>td>
<td><% out.print(re.getString(2)); %>td>
<td><% out.print(re.getString(3)); %>td>
<td><% out.print(re.getString(4)); %>td>
<td><% out.print(re.getString(5)); %>td>
<td><% out.print(re.getString(6)); %>td>
<td><% out.print(re.getString(7)); %>td>
tr>
<%
}
//关闭连接
re.close();
statement.close();
con.close();
%>
table>
div>
body>
html>
4.运行结果如下所示。
最近连续十多天给学生们分享暑假实训,JSP网站开发,周末不间断。大周末深夜凌晨办公室备课,为了什么?回想三年来,挺感谢学生们的厚爱的,无以回报,只希望自己能好好分享知识,认真教好每一位学生,将心比心,也望自己博士学成归来,能继续教书育人,感恩家乡和女神。
(By:Eastmount 2019-07-04 深夜1点 http://blog.csdn.net/eastmount/)