java web开发——第八章JSP中使用数据库


主要内容

  • MySQL数据库管理系统
  • 连接MySQL数据库查询记录
  • 更新、添加与删除记录
  • 用结果集操作数据库中的表预处理语句
  • 事务

8.1 MySQL数据库管理系统

MySQL数据库管理系统,简称MySQL,是目前流行的开源数据库管理系统,其社区版(MySQL Community Edition)是可免费下载的开源数据库管理系统。MySQL最初由瑞典MySQLAB公司开发,目前由Oracle公司负责源代码的维护和升级。Oracle将MySQL分为社区版和商业版,并保留MySQL开放源码这一特点。目前许多Web开发项目都选用社区版MySQL,其主要原因是社区版MySQL的性能卓越,满足许多Web应用已经绰绰有余,而且社区版MySQL是开源数据库管理系统,可以降低软件的开发和使用成本。

8.1.1 下载、安装MySQL

  1. 下载

MySQL是开源项目,很多网站都提供免费下载。可以使用任何搜索引擎搜索关键字:“MySQL社区版下载”获得有关的下载地址。

在这里插入图片描述

  1. 安装

将下载的mysql-8.0.18-winx64.zip解压缩到本地计算机,例如解压缩到D:\。本教材将
下载的mysql-8.0.18-winx64.zip解压缩到D:,形成的安装目录结构如图8.2所示

在这里插入图片描述

8.1.2启动MySQL数据库服务器

  1. 初始化
    在这里插入图片描述
D:\mysql-8.0.18-winx64\bin> mysqld --initialize

  1. 启动

访问它所管理的数据库。用管理员身份启动命令行窗口,然后进入MySQL安装目录的bin子目录,输入“net start
mysql”(Windows
7输入“mysqld”),按Enter键确认启动MySQL数据库服务器(以后再启动MySQL就不需要初始化了),如图8.4所示。MySQL服务器占用的端口是3306(3306是MySQL服务器使用的端口号)

在这里插入图片描述

  1. 停止

进入MySQL安装目录的bin子目录,输入"net stop mysql",按Enter键确认停止MySQL数据库服务器。

  1. root用户

MySQL8.0版本必须对root用户进行身份确认,否则将导致其他mysql客户端程序,如Navicat for MySQL等,无法访问MySQL8.0.21数据库服务器。因此,MySQL数据库服务器启动后,再用管理员身份打开另一个命令行窗口,使用mysqladmin命令确认root用户和root用户的密码,或确认root用户,并修改root用户的密码。在新的命令行窗口进入MySQL的安装目录D:\mysql-8.0.18-winx64\bin,使用mysqladmin命令:

mysqladmin -u root -p password

按Enter键确认后,将提示输入root的当前密码(无密码就直接按Enter键确认),Windows 10安装的MySQL的root用户的初始密码是drH&&1svhvoa,如果输入正确,将继续提示输入root的新密码,以及确认新密码

8.1.3 MySQL客户端管理工具

  1. 命令行客户端
  • 进入MySQL安装目录下的bin子目录。执行mysql.exe,即启动命令行客户端。执行格式为:
mysql  -u root-p
  1. 创建数据库
create database bookDatabase;

  1. 建表
    先进入数据库
use bookDatabase

输入创建bookList表的SQL语句(建议用记事本编辑相关的SQL语句,然后右击,复制、粘贴到命令行窗口):

create table bookList(
ISBN varchar(100) not null,
name varchar(100) character set gb2312,
price float,publishDate date,
primary key(ISBN)
);
  1. 删除数据库或表

删除数据库的命令:drop database<数据库名>,例如删除名为tiger的数据库:

drop database tiger;

删除表的命令:drop table<表名>,例如使用bookDatabase数据库后,执行:

drop table bookList;

8.2连接MySQL数据库

在这里插入图片描述

  1. 下载jdbc-mysql数据库连接器

将MySQL数据库的JDBC-MySQL数据库连接器mysql-connector-java-8.0.18.jar保存到Tomcat安装目录下的lib文件夹中(例如D:\apache-tomcat-9.0.26\lib),并重新启动Tomcat服务器。

  1. 加载jdbc-mysql数据库连接器
try{ Class.forName("com.mysql.cj.jdbc.Driver");
}
catch(Exception e){}

MySQL数据库驱动是mysql-connector
java-8.0.18.jar文件中的Driver类,该类的包名是com.mysql.cj.jdbc.Driver(包名和以前的版本不同)。Driver类不是Java运行环境类库中的类,是连接器mysql-connector-java-8.0.18.jar中的类。

  1. 连接数据库
    java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法):
Connection getConnection
(java.lang.String,java.lang.String, java.lang.String)
Connection getConnection(java.lang.String)

应用程序要和MySQL数据库服务器管理的数据库Book(在8.1.3节建立的数据库)建立连接,而有权访问数据库Book的用户的id和密码分别是root和空。建立连接的代码如下

Connection con;
Stringurl =
"jdbc:mysql://192.168.100.1:3306/Book?useSSL= false&serverTimezone=GMT";
String user ="root";
String password ="";
try{
con= DriverManager.getConnection(url,user,password);
//连接代码
}
catch(SQLException e){
System.out.println(e);
}
  1. 注意汉字问题

需要特别注意的是,如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值GB2312或UTF-8:

String url=
"jdbc:mysql://localhost/bookDatabase?"+
"useSSL= false&serverTimezone = GMT&characterEncoding=utf-8";con=DriverManager.getConnection(url,"root","");      //连接代码

8.3 查询记录

8.3.1 结果集与查询

对一个数据库中的表进行查询,然后将查询结果返回到一个ResultSet对象中,习惯称ResultSet对象为结果集对象。

使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()返回SQL语句对象,代码如下:

try{ Statement sql= con.createStatement();
catch(SQLException e){
System.out.println(e);
}

有了SQL语句对象后,这个对象就可以调用相应的方法查询数据库中的表,并将查询结果存放在一个ResultSet结果集中。例如

ResultSet rs= sql.executeQuery("SELECT * FROMbookList");

8.3.2 随机查询

前面ResultSet结果集使用next()方法顺序地查询记录,但有时候要在结果集中前后移动、显示结果集指定的一条(一行)记录或随机显示若干条记录等。这时,必须返回一个可滚动的结果集
为了得到一个可滚动的结果集,须使用下述方法先获得一个Statement对象

Statement stmt = con.createStatement(int type, int concurrency);

然后,根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSet re= stmt.executeQuery(SQL语句);

8.3.3 条件查询

  1. wherc子语句
    一般格式:
select字段from表名where条件
  • 字段值和固定值比较,例如:
select name, price from bookList where name='高等数学’
  • 字段值在某个区间范围,例如:
select  from bookList where price>28.68 and price<=87.7
select * from bookList where price>56 and name!='月亮湾'
  • 用操作符like进行模式般配,使用%代替0个或多个字符,用一个下画线代替一个字符。例如查询name含有“程序”两个字的记录:
select * from bookLidt where name like '名程序名’
  1. 排序
    用order by子语句对记录排序,
select * from表名order by字段名(列名)select * from表名where条件order by字段名(列名)

8.4 更新、添加与删除记录

Statement对象调用方法:

public int executeUpdate(String sqlStatement);

通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作。方法执行成功(成功更新、添加或删除),将返回一个正整数,否则返回0。

  1. 更新
update表set字段=新值where<条件子句>
  1. 添加
insert into表(字段列表)values(对应的具体的记录)或
insert into表values(对应的具体的记录)
  1. 删除
delete from表名where<条件子句>

8.5 用结果集操作数据库中的表

8.5.1 更新记录

使用结果集更新数据库表中第n行记录中某列的值的步骤如下。
(1)游标移动到第n行。结果集rs调用absolute()方法将游标移到第n行:

rs.absolute(n);

(2)结果集rs将第n行的column列的列值更新。结果集可以使用下列方法更新列值:

updateInt(String column, int x),updateInt(int column int x)

(3)更新数据库中的表。最后,结果集rs调用updateRow()方法用结果集中的第n行更新数据库表中的第n行记录。
以下代码片段按照上述步骤,更新bookList表中的第3行记录的name列(字段)的值。

rs.absolute(3);
rs.updateString(2,"操作系统");
//也可以写成
rs.updateString("name","操作系统");rs.updateRow();

8.5.2 插入记录

使用结果集向数据库表中插入(添加)一行记录步骤如下:
(1)将结果集rs的游标移动到插入行。结果集中有一个特殊区域,用作构建要插入的行的暂存区域,习惯上将该区域位置称作结果集的插入行。为了向数据库表中插入一行新的记录,必须首先将结果集的游标移动到插入行,代码如下:

rs.moveToInsertRow();

(2)更新插入行的列值,即设置插入行的列值。结果集可以用updateXxx()方法更新插入行的列值,例如,准备插入的记录是(‘7307014659’,‘数据结构’,58,‘2020-08-10’),那么执行下列操作:

rs.updateString(1,"7307014659");
rs.updateString(2,"数据结构");
rs.updateFloat(3,58);
rs.updateDate(4,'2020-08-10');

(3)插入记录。结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新记录。

8.6 预处理语句

Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。本节学习怎样使用预处理语句对象操作数据库中的表

8.6.1 预处理语句的优点

Connection连接对象con调用prepareStatement(String sq1)方法:

PreparedStatement pre= con.prepareStatement(String sql);

对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象 pre中,那么该对象调用下列方法都可以使得该 底层内部命令被数据库执行:

ResultSet executeQuery()(执行成功返回ResultSet对象)
boolean execute()(执行成功返回false)
int executeUpdate()(执行成功返回1)

8.6 事务

事务由一组SQL语句组成。所谓“事务处理”是指应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。

JDBC事务处理步骤如下:

  1. sctAutoCommit(boolean b)方法关闭自动提交模式
    的默认设置)。
    连接con首先调用setAutoCommit(boolean autoCommit)方法,将参数autoCommit取值为false来关闭自动提交模式:
con.setAutoCommit(false);
  1. 用commit方法处理事务
  2. 用rollback()方法处理事务失败

总结

大概结束了o.0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值