8.1 MySQL数据库管理系统
MySQL是一种常用的关系型数据库管理系统(RDBMS),它提供了高效、可靠的数据存储和管理解决方案。本篇博客将介绍MySQL的下载、安装、连接以及基本的数据库操作。
8.1.1 下载、安装MySQL
要开始使用MySQL,首先需要下载并安装MySQL数据库服务器。可以从MySQL官方网站(https://www.mysql.com)上下载适合您操作系统的安装程序。按照安装向导的指示进行安装,并设置数据库的用户名和密码。
8.1.2 启动MySQL
安装完成后,可以启动MySQL服务器。在Windows系统上,可以通过MySQL的服务管理器来启动和停止MySQL服务。在Linux系统上,可以使用命令行工具或服务管理命令来启动和停止MySQL。
8.1.3 MySQL客户端管理工具
MySQL提供了多种客户端管理工具,用于连接和管理MySQL数据库。其中一种常用的工具是MySQL Workbench,它提供了图形化界面和丰富的功能,方便用户进行数据库管理和操作。
8.2 连接MySQL数据库
要连接MySQL数据库,可以使用MySQL提供的命令行工具或者客户端管理工具。在命令行中,可以使用以下命令来连接到MySQL数据库:
mysql -u 用户名 -p 密码
通过客户端管理工具,可以使用图形化界面来输入用户名、密码和连接信息来连接到MySQL数据库。
8.3 创建数据库和表
一旦连接到MySQL数据库,我们可以使用SQL语句来创建数据库和表。以下是一个创建数据库和表的示例:
CREATE DATABASE mydatabase; USE mydatabase; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50) );
8.4 更新、添加和删除记录
通过使用SQL语句,我们可以更新、添加和删除数据库表中的记录。以下是一些示例:
更新记录:
UPDATE users SET email = 'newemail@example.com' WHERE id = 1;
添加记录:
INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
删除记录:
DELETE FROM users WHERE id = 1;
8.5 通过结果集操作数据库表
通过查询数据库表,我们可以获取结果集并对其进行操作。以下是一个查询并处理结果集的示例:
SELECT * FROM users; ResultSet rs = statement.executeQuery("SELECT * FROM users"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String email = rs.getString("email"); System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email); }
8.6 预处理语句
为了提高性能和安全性,MySQL支持预处理语句。预处理语句可以预编译并缓存,多次执行时效率更高,并且可以防止SQL注入攻击。以下是一个使用预处理语句的示例:
String query = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, "Jane Doe"); statement.setString(2, "janedoe@example.com"); statement.executeUpdate();
8.7 事务
MySQL支持事务,可以确保一系列数据库操作的原子性和一致性。在事务中,要么所有操作都成功提交,要么都回滚到事务开始之前的状态。以下是一个事务的示例:
connection.setAutoCommit(false); try { // 执行一系列数据库操作 connection.commit(); // 提交事务 } catch (SQLException e) { connection.rollback(); // 回滚事务 }
8.8 分页显示记录
在处理大量数据时,分页显示记录是很常见的需求。MySQL提供了LIMIT子句来限制查询结果的行数,并通过OFFSET参数指定起始位置。以下是一个分页查询的示例:
SELECT * FROM users LIMIT 10 OFFSET 20;
8.9 连接SQL Server和Access
除了连接MySQL数据库,还可以连接其他类型的数据库,如Microsoft SQL Server和Access数据库。
8.9.1 连接Microsoft SQL Server数据库
要连接Microsoft SQL Server数据库,需要下载并安装Microsoft SQL Server的驱动程序。然后可以使用Java的JDBC API来连接并操作SQL Server数据库。
8.10 使用连接池
8.10.1 连接池简介
连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。
8.10.2 建立连接池
1、连接池配置的文件
为了让 Tomcat 服务器创建连接池,必须编写一个 XML 文件,Tomcat 服务器通过读取该文件创建连接池。XML 文件的名字必须是 context.xml。内容如下:
<?xml version = "1.0" encoding = "utf-8"?>
<Context>
<Resource
name = "gxy"
type = "javax.sql.DataSource"
deriverClassName - "com.mysql.cj.jbcb.Driver"
url = "jdbc:mysql://127.0.0.1:3306/bookDatabase?useSSL = false
&serverTimezone = CST&characterEncoding = utf-8"
username = "root"
password = ""
maxActive = "15"
maxIdle = "15"
minIdle = "1"
maxIdle = "1000"
/>
</Context>
将连接池配置文件保存在 context.xml 文件保存在 Web 服务目录的 META-INF 子目录中。
连接池配置文件 context.xml 中的 Resource 标记通知 Tomcat 服务器创建数据源,Resource 标记中各个属性的意义如下:
(1)name:设置连接池的名字,例如 gxy,改密工资是连接池的 id,context.xml 文件中,如果有多个 Resource 标记,必须保证其中的 name 互不相同。
(2)type:设置连接池的类型,这里必须是 javax.sql.DataSource,即 Tomcat 服务器把创建的 Connection 对象存放在实现 DataSource 接口的对象中,即连接池是一个 DataSource 型对象。
(3) driverClassName:设置数据库连接器,即数据库驱动的类。不同版本的 MYSQL 其名称各不相同。
(4)url:设置连接数据库的 URL。需要注意的是对于 url 中的 & 字符要写成“&”,这是 XML 文件对特殊字符的一个特殊规定。
(5)username:给出可以访问数据库的用户名,例如 root。
(6)password:给出访问数据库的密码,用户默认是无密码。
(7)maxActive:设置连接池的大小,即连接池中处于活动状态 Connection 对象的数目。maxActive 取值不可以超过数据库系统允许的最大连接数目。
(8)maxIdle:设置连接池中可处于空闲状态的 Connection 对象的最大数目,取值非正整数,表示无限制,如果取正整数,那么空闲状态的 Connection 对象多余 6 个时,Tomcat 服务器会释放多余的 Connection 对象,即从连接池中删除多余的 Connection 对象。
(9)minIdle:设置连接池中保证处于空闲状态的 Connection 对象的最小数目。当连接池中仅仅剩下两个空闲状态 Connection 对象时,此刻如果同时有两个用户需要使用连接池中的 Connection 对象,那么二者只能有一个获得 Connection 对象,另一个用户必须等待。
(10)maxWait:设置连接池中没有空闲状态 Connection 对象可用时,用户请求获得连接池中 Connection 对象需要等待的最长时间,如果超出 maxWait 设置的时间,Tomcat 服务器将抛出一个 TimeoutException 给用户。取值负数,表示用户可以无限时等待。
2、使用连接池
应用程序必须到 Tomcat 服务器中去获得连接池。步骤如下:
(1)Context 接口
首先创建一个实现 Context 接口的对象:
Context context = new InitialContext( );
然后让 context 去寻找 Tomcat 服务器曾绑定在运行环境中的另一个 Context 对象:
Context contextNeeded = (Context)context.lookup("java:comp/env");
其中的 java:comp/env 是 Tomcat 服务器绑定这个 Context 对象时使用的资源标识符。
(2)得到连接池
Tomcat 服务器通过连接池配置文件 context.xml 将连接池绑定在 Context 对象 contextNeeded 中。绑定用的资源标志符是连接池配置文件 context.xml 中 name 给的值。因此,从 contextNeeded 中或的代码池的代码是:
DataSource ds = (DataSource)contextNeeded.lookup("gxy");
(3)从连接池中获得连接
获得连接池之后,就可以从连接池中获得 Connection 对象。连接池中都是已经创建好的 Connection 对象,连接池调用 getConnection()方法,如果有空闲的 Connection 对象,该方法就返回一个 Connection 对象,如果没有空闲的 Connection 对象,该方法将使得用户线程处于 warning 状态,即等待该方法返回 Connection 对象。代码如下:
Connection con = ds.getConnection();
(4)将连接返回连接池
当 Web 应用程序不再需要 Connection 对象时,就让 Connection 对象调用 close()方法,这样就可以把这个 Connection 对象再放回连接池中,以便其他 Web 应用程序使用这个 Connection 对象。如果用户忘记 Connection 对象再返回连接池中,将可能很快导致连接池中无 Connection 对象可用。