任务描述:认识并了解开发语言连接数据库的基本知识,理解什么是数据库驱动,熟悉访问数据库接口的使用流程,并掌握 Python 和 Java 连接 MySQL 数据库的编程思路。
(1)什么是PyMySQL
PyMySQL是Python 3.x版本(x表示版本号)中用于连接MySQL服务器的一个库。Python 2中则使用MySQLdb来连接MySQL服务器。本书主要介绍Python 3如何使用PyMySQL连接MySQL数据库。
PyMySQL遵循Python数据库API v2.0规范,是一个纯Python编写的MySQL客户端库。
(2)PyMySQL的安装
在使用PyMySQL之前,先要确保PyMySQL已被安装。如果未安装,则可以使用以下命令安装最新版的PyMySQL。
$ pip3 install PyMySQL
在使用Python连接MySQL数据库之前,需先确认以下事项。
① 已经创建MySQL数据库,这里的数据库名为TESTDB。
② 连接TESTDB数据库使用的用户名为dbuser,密码为123456(读者也可以自己设定,或者直接使用root用户名及密码)。MySQL数据库用户授权使用的命令是GRANT。
③ 连接MySQL数据库的实验机已经安装Python MySQLdb模块。
# !/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","dbuser","123456","TESTDB" ) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法获取单条数据 data = cursor.fetchone() print ("Database version : %s " % data) # 关闭数据库连接 db.close()
执行以上脚本,得到的输出结果如下。
Database version : 5.7.16-log
Java连接MySQL需要驱动包,那么下载驱动包并解压后得到 jar 库文件,然后在对应的项目中导入该库文件。需注意的是,MySQL 8.0及以上版本的数据库连接有以下不同。
① MySQL 8.0及以上版本的驱动包为mysql-connector-java-8.0.16.jar。
② com.mysql.jdbc.Driver变为com.mysql.cj.jdbc.Driver。
以下实例使用JDBC 连接MySQL数据库,其中的一些数据(如用户名、密码等)需要读者根据自己的开发环境来配置。
package test; import java.sql.*; public class MySQLDemo { // MySQL 8.0及以下版本的JDBC 驱动名及数据库统一资源定位符(URL) static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/test"; // MySQL 8.0及以上版本的JDBC 驱动名及数据库URL // static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; // static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL= false&allowPublicKeyRetrieval=true&serverTimezone=UTC"; // 数据库的用户名与密码需要自己设置 static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 System.out.println("连接数据库……"); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println("实例化Statement对象……"); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 System.out.print("ID: " + id); System.out.print(",站点名称: " + name); System.out.print(",站点 URL: " + url); System.out.print("\n"); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }catch(Exception e){ // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 关闭资源 try{ if(stmt != null) stmt.close(); }catch(SQLException se2){ }// 什么都不做 try{ if(conn != null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } }