Java Web开发——第八章JSP中使用数据库
前言
本章为《JSP实用教程》第四版 耿祥义 张跃平主编
软件版本号为:
Tomcat:9.0
Java:jdk13
连接MySQL数据库
下载jdbc-mysql数据库连接器
将MySQL数据库的JDBC-MySQL数据库连接器mysql-connector-java-8.0.18.jar保存到Tomcat安装目录下的lib文件夹中(例如D:\apache-tomcat-9.0.26\lib),并重新启动Tomcat服务器。
加载jdbc-mysql数据库连接器
MySQL数据库驱动是mysql-connector,java-8.0.18.jar文件中的Driver类,该类的包名是com.mysql.cj.jdbc.Driver(包名和以前的版本不同)。Driver类不是Java运行环境类库中的类,是连接器mysql-connector-java-8.0.18.jar中的类。
连接数据库
java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法):
Connection getConnection (java.lang.String,java.lang.String,java.lang.String)
Connection getConnection(java.lang.String)
注意:如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值GB2312或UTF-8:
查询记录
结果集与查询
对一个数据库中的表进行查询,然后将查询结果返回到一个ResultSet对象中,习惯称ResultSet对象为结果集对象。
有了SQL语句对象后,这个对象就可以调用相应的方法查询数据库中的表,并将查询结果存放在一个ResultSet结果集中。例如:
ResultSet rs= sql.executeQuery(“SELECT * FROMbookList”);
随机查询
前面ResultSet结果集使用next()方法顺序地查询记录,但有时候要在结果集中前后移动、显示结果集指定的一条(一行)记录或随机显示若干条记录等。这时,必须返回一个可滚动的结果集为了得到一个可滚动的结果集,须使用下述方法先获得一个Statement对象:
Statement stmt = con.createStatement(int type, int concurrency);
条件查询
1.where子语句
格式为:
select 字段 from 表明 where 条件;
2.排序
用order by语句,格式为:
select * from表名order by字段名(列名)select * from表名where条件order by字段名(列名)
更新,添加与删除记录
Statement对象调用方法:
public int executeUpdate(String sqlStatement);
1.更新
update表set字段=新值where<条件子句>
2.添加
update表set字段=新值where<条件子句>
3.删除
delete from表名where<条件子句>
用结果集操作数据库中的表
更新记录
使用结果集更新数据库表中第n行记录中某列的值的步骤如下。
(1)游标移动到第n行。结果集rs调用absolute()方法将游标移到第n行:
rs.absolute(n);
(2)结果集rs将第n行的column列的列值更新。结果集可以使用下列方法更新列值:
updateInt(String column, int x),updateInt(int column int x)
(3)更新数据表.调用updateRow()方法.
插入数据
具体代码为:
rs.moveToInsertRow();
(2)更新记录
rs.updateString(1,“210401010”);
rs.updateString(2,“JSP”);
rs.updateFloat(3,38);
rs.updateDate(4,‘2021-5-20’);
(3)插入记录.调用insertRow()方法.
预处理语句
Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。本节学习怎样使用预处理语句对象操作数据库中的表.
预处理语句的优点
当向数据库发送一个SQL语句,例如"select * from bookLsit",数据库中的SQL解释器负责将把sql语句输出的底层的内部命令,如何执行该命令,完成有关的数据操作.如果不断地向数据库提交sql语句势必增加数据库中sql解析器的负担,影响执行的速度.如果应用程序能针对连接的数据库,事先就将sql语句解析为数据库底层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度.
Connection连接对象con调用prepareStatement(String sq1)方法:
PreparedStatement pre= con.prepareStatement(String sql);
使用通配符
对sql进行预处理时可以使用通配符?来代替字段.
例如:
pre.setFloat(2,75);
事务
事务由一组SQL语句组成。所谓“事务处理”是指应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。
1.用setAutoCommit(boolean b)方法关闭自动提交模式
的默认设置)。
连接con首先调用setAutoCommit(boolean autoCommit)方法,将参数autoCommit取值为false来关闭自动提交模式:
2.用commit方法处理事务
3.用rollback()方法来处理事务失败.
总结
欢迎指正