JAVA Web学习(14)___第10章 Java Web的数
2019-08-27 本文已影响0人
岁月静好浅笑安然
第10章 Java Web的数据库操作
10.1 JDBC技术
10.1.1 JDBC简介
JDBC是java程序操作数据库的API,也是Java程序与数据库交互的一门及时。
10.1.2 JDBC连接数据库的过程
- 注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
- 构建数据库连接URL
数据库URL,基本格式"JDBC协议+IP地址或域名+端口+数据库名称"如"jdbc:mysql://localhost:3306/test" - 获取Connection对象
DriverManager.getConnection(url,username,password);
需要下载mysql-connector-java-5.1.10-bin.jar放在
\WebRoot\WEB-INF\lib
中
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Connection"%> <%@page
import="java.sql.DriverManager"%> <%@page
import="com.mysql.jdbc.Driver"%> <%@page
language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>数据库连接</title>
</head>
<body>
<%
String str="";
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/hwp_db";
String urername = "root";
String password = "hwp123456";
Connection conn = DriverManager.getConnection(url, urername,
password);
if (conn != null) {
// out.println("数据库连接成功");
// conn.close();
str = "数据库连接成功";
} else {
str = "数据库连接失败";
//out.println("数据库连接失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
str=e.toString();
} catch (SQLException e) {
e.printStackTrace();
str=e.toString();
}
%>
<h2><%=str%></h2>
</body>
</html>
如果数据库连接失败,请确认数据库服务是否开启,因为只有数据库的服务处于开启状态,才能成功地与数据库建立连接。Class.forName("com.mysql.jdbc.Driver"),此类名也不要拼写错误。
10.2 JDBC API
10.2.1 Connection接口
Connection接口的方法声明及说明(部分)
方法声明 | 说明 |
---|---|
void close() |
立即释放 Connection对象的数据库连接占用的JDBC资源 |
void commit() |
提交事务 |
Statement createStatement() |
创建一个 Statement对象 |
boolean getAutoCommit() |
判断 Connection对象是否是自动提交模式 |
DatabaseMetaData getMetaData() |
获取 DatabaseMetaData对象 |
int getTransactionIsolation() |
获取 Connection对象当前事务隔离级别 |
boolean isClosed() |
判断 Connection对象是否与数据库断开连接 |
boolean isReadOnly() |
判断 Connection对象是否为只读模式 |
PreparedStatement prepareStatement(String sql) |
将参数化的SQL语句预编译并存储在 PreparedStatement中 |
void setAutoCommit(boolean autoCommit) |
设置是否自动提交 |
void setReadOnly(boolean readOnly) |
将 Connection对象的连接模式设置为只读 |
10.2.2 DriverManager类
DriverManager类接口的方法声明及说明(部分)
方法声明 | 说明 |
---|---|
Connection getConnection(String url,Properties info) |
建立数据库连接 |
Connection getConnection(String url) |
建立数据库连接 |
Connection getConnection(String url,String user, String password) |
建立数据库连接 |
void deregisterDriver(Driver driver ) |
删除一个驱动程序,参数 driver为要删除的驱动对象 |
Enumeration<Driver> getDrivers() |
获取所有驱动 |
void registerDriver(java.sql.Driver driver) |
注册驱动对象 |
10.2.3 Statement接口
10.2.4 PreparedStatement接口
10.2.5 ResultSet接口
10.3 JDBC操作数据库
10.3.1 添加数据
- 1.在mysql数据库中创建图书变
book_info
,其结构如下图(navicat for mysql可视化工具示例)
微信截图_20190827162430.png
mysql语法示例 此语法由navicat自动生成
CREATE TABLE `book_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`price` double NOT NULL,
`bookCount` int(11) NOT NULL,
`author` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
- 2.创建javabean类,
Book.java
public class Book {
//编号
private int id;
//名称
private String name;
//价格
private double price;
//数量
private int bookCount;
//作者
private String author;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
...
//省略部分代码
}
- 3.创建
index.jsp
,关键代码
<form action="AddBook.jsp" method="post" onsubmit="return check(this)">
<table align="center" width="450" border="1" bordercolor="#03A9F4">
<tr>
<td align="center" colspan="2">
<h2>添加图书信息</h2>
</td>
</tr>
<tr>
<td align="right" >图书名称:</td>
<td ><input type="text" name="name"/></td>
</tr>
<tr>
<td align="right" >价格:</td>
<td ><input type="text" name="price"/></td>
</tr>
<tr>
<td align="right" >数量:</td>
<td ><input type="text" name="count"/></td>
</tr>
<tr>
<td align="right" >作者:</td>
<td ><input type="text" name="author"/></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="添加"/>
</td>
</tr>
</table>
</form>
- 4.创建
AddBook.jsp
关键代码
<body>
<%
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//数据库连接字符串
String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8";
//数据库用户名
String user = "root";
//数据库密码
String password = "hwp123456";
//创建Connection连接
Connection conn = DriverManager.getConnection(url, user,
password);
//添加图书是sql语句
String sql = "insert book_info(name,price,bookCount,author)values(?,?,?,?)";
//获取PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
//对sql语句中的参数1赋值
ps.setString(1, StrUtil.set(book.getName()));
//对sql语句中的参数2赋值
ps.setDouble(2, book.getPrice());
//对sql语句中的参数3赋值
ps.setInt(3, book.getBookCount());
//对sql语句中的参数4赋值
ps.setString(4, StrUtil.set(book.getAuthor()) );
int row = ps.executeUpdate();
if (row > 0) {
out.print("成功添加了" + row + "条数据");
}
ps.close();
conn.close();
} catch (Exception e) {
out.print("添加失败了");
e.printStackTrace();
}
%>
<br>
<a href="book.jsp">返回</a>
</body>
- 5.解决乱码工具类
public class StrUtil {
public static String set(String str){
String s=null;
try {
s= new String(str.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
}
-
index.jsp页面
微信截图_20190827160925.png -
AddBook.jsp页面
微信截图_20190827160844.png
数据库添加成功实例
乱码和不乱码
技巧 <jsp:setProperty> 标签的 property属性的值可以设置为 “*”,它的作用是将与表单中同名称的属性值赋给JavaBean对象中的同名属性,使用这种方式就不必对JavaBean中的属性一一进行赋值,从而减少代码量
使用PreparedStatement对象对sql语句的占位符参数赋值,其参数的下标值不是0,二手1,它与数组的下标有所区别。
在执行数据操作之后,应该立即调用 ResultSet对象、 PreparedStatement对象、 Connection对象的close()方法,从而及时释放所占用的数据库资源。
中文添加乱码问题一定要先转换