简介
提供MySQL安装说明,以及在C++、Python、Java编程中的MySQL数据库环境配置,并且分别利用这三种语言对基础的MySQL数据库操作功能进行了实现。
引用博客:
MySQL8.0.26安装配置教程(windows 64位) 作者:扑喽哈哈使用C++实现MySQL数据库编程 作者:Liebeandypython3基础:操作mysql数据库 作者:小小小小人kshJava中JDBC的使用详解 作者:盡盡
资源下载:
操作教程及代码文件
一、MySQL 安装
MySQL 下载地址:
https://dev.mysql.com/downloads/mysql/
解压到自定义目录(此处为C:Program FilesMySQL,注意与4中配置文件中的目录路径一致)
在解压目录中创建初始化文件my.ini
编辑my.ini:
[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=C:Program FilesMySQLmysql-8.0.28-winx64 # 设置mysql数据库的数据的存放目录 datadir=C:Program FilesMySQLmysql-8.0.28-winx64data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为utf8mb4 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb4
- 以管理员身份打开CMD进入bin目录,输入命令
mysqld --initialize --console
记录初始密码(此处为:F%G6eT35!Kij,每个人不一样)
接着运行命令
mysqld --install
显示Service successfully installed.表示安装成功
8. 运行命令开启服务
net start mysql
显示MySQL服务已经启动成功
- 运行命令进入MySQL
mysql -u root -p
输入我们之前记录的初始密码:F%G6eT35!Kij(输入你们的密码)
- 输入命令修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
配置环境变量
STEP1:
STEP2:
安装完成
引用博客: MySQL8.0.26安装配置教程(windows 64位) 作者:扑喽哈哈
二、创建数据(之后的代码均用此数据演示)
- SQL语句
CREATE DATAbase class;
USE class;
CREATE TABLE student(
id INT NOT NULL PRIMARY KEY AOTU_INCREMENT,
name VARCHAR(10) NOT NULL,
sex VARCHAR(7) NOT NULL,
age INT NOT NULL
);
INSERT INTO student (name, sex, age) VALUES ('a', 'man', 20);
INSERT INTO student (name, sex, age) VALUES ('b', 'man', 19);
INSERT INTO student (name, sex, age) VALUES ('c', 'women', 19);
INSERT INTO student (name, sex, age) VALUES ('d', 'women', 20);
SELECt * FROM student;
- 查看结果
三、C++ 与 MySQL (Visual Studio 2022) 配置环境
鼠标右键点击项目名称,打开项目属性页
找到"C/C++"选项下的"常规"设置页,在"附加包含目录"中添加MySQL安装目录下的"include"文件夹路径(如果找不到"C/C++"选项,需要先创建一个源文件,编写一些代码调试一下,随便写点什么都行)
找到"链接器"选项下的"常规"设置页,在"附加库目录"中添加MySQL安装目录下的"lib"文件夹路径
找到"链接器"选项下的"输入"设置页,在"附加依赖项"中添加MySQL安装目录下的"lib"文件夹中的"libmysql.lib"文件路径,(注意不要错选成"libmysql.dll"文件)
找到"配置属性"选项下的"调试"设置页,在"环境"中添加MySQL安装目录下的"bin"文件夹目录,结尾加上英文的";"(有些博客中这里的路径前要加"PATH=",如果出问题都试试,应该是在安装MySQL配置系统环境变量导致的)
- 包含头文件
# include# include using namespace std;
- 关闭数据库
void closeConnection(MYSQL* mysql) {
//关闭数据库
mysql_close(mysql);
printf("nDisconnect succeed.");
}
- 建立数据库连接
void createConnection(MYSQL* mysql, string user, string pwd, string database, string host = "localhost") {
//初始化数据库
mysql_init(mysql);
//设置字符编码
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");
//建立数据库连接
if (mysql_real_connect(mysql, &host[0], &user[0], &pwd[0], &database[0], 3306, NULL, 0) == NULL) {
printf("Error: % s.n", mysql_error(mysql));
printf("Failed to connect.");
closeConnection(mysql);
exit(-1);
}
else {
printf("Connect succeed.n");
}
}
- 执行SQL语句
int exeSql(MYSQL* mysql, string sql) {
printf("nExe SQL: %s.n", &sql[0]);
//执行SQL语句,返回执行结果,如果ret==0,则执行成功,否则失败
int ret = mysql_query(mysql, &sql[0]);
return ret;
}
- 查询
void query(MYSQL* mysql, string sql) {
//查询数据
int ret = exeSql(mysql, sql);
if (ret != 0) {
printf("Error: %s.n", mysql_error(mysql));
closeConnection(mysql);
exit(-1);
}
else {
//获取查询结果集
MYSQL_RES* res = mysql_store_result(mysql);
//输出查询结果内容
cout << "nidt" << "namet" << "sext" << "age" << endl;
//查询记录
MYSQL_ROW row;
while (row = mysql_fetch_row(res)) {
cout << row[0] << "t";
cout << row[1] << "t";
cout << row[2] << "t";
cout << row[3] << "n";
}
//释放结果集
mysql_free_result(res);
printf("nExe Succeed.n");
}
}
6.更新(增、删、改)
void update(MYSQL* mysql, string sql) {
int ret = exeSql(mysql, sql);
if (ret != 0) {
printf("Error: %s.n", mysql_error(mysql));
closeConnection(mysql);
exit(-1);
}
else {
printf("nExe Succeed.n");
}
}
7.测试main
int main() {
MYSQL mysql = MYSQL(); //数据据库句柄
createConnection(&mysql, "root", "root", "class"); //我的mysql账号密码均为“root”, 数据库名为“class”
string sql01 = "SELECT * FROM student;"; //查询“student”表中的所有数据
query(&mysql, sql01);
string sql02 = "SELECt * FROM student WHERe sex='women';"; //查询“student”表中的女生数据
query(&mysql, sql02);
string sql03 = "INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);"; //向“student”表中插入一条记录
update(&mysql, sql03);
query(&mysql, sql01);
string sql04 = "UPDATE student SET age=17 WHERe name='e';"; //更改“student”表中的一条记录
update(&mysql, sql04);
query(&mysql, sql01);
string sql05 = "DELETE FROM student WHERe name='e';"; //删除名为e的学生记录
update(&mysql, sql05);
query(&mysql, sql01);
string sql06 = "ALTER TABLE student AUTO_INCREMENT=1;"; //重置主键AUTO_INCREMENT,保证新增记录id的连续性
update(&mysql, sql06);
closeConnection(&mysql); //关闭数据库连接
return 0;
}
- 调试结果
Connect succeed.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Exe Succeed.
Exe SQL: SELECt * FROM student WHERe sex='women';.
id name sex age
3 c women 19
4 d women 20
Exe Succeed.
Exe SQL: INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);.
Exe Succeed.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 23
Exe Succeed.
Exe SQL: UPDATe student SET age=17 WHERe name='e';.
Exe Succeed.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 17
Exe Succeed.
Exe SQL: DELETe FROM student WHERe name='e';.
Exe Succeed.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Exe Succeed.
Exe SQL: ALTER TABLE student AUTO_INCREMENT=1;.
Exe Succeed.
Disconnect succeed.
引用博客:使用C++实现MySQL数据库编程 作者:Liebeandy
四、Python 与 MySQL(Pycharm2021 with Python3.6.8 ) 安装包pymysql(此处使用Pycharm配合Anaconda环境进行安装,其他安装方式请自行搜索)
- 使用Pycharm的终端Terminal进行操作,进入工程配置的Python虚拟环境进行下载,输入一下命令
cd D:/Anaconda/envs/py36/scripts # 进入你的Python环境路径 pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple # 使用清华镜像源进行下载
- 如下显示表示安装成功
- 导入pymysql包
import pymysql as mysql
- 关闭MySQL连接
def close_connection(conn):
if conn:
# 关闭游标
cursor = conn.cursor()
cursor.close()
# 关闭连接
conn.close()
print('nSucceed to disconnect mysql.')
- 建立MySQL连接
def create_connection(usr, pwd, db, host='localhost'):
conn = None
try:
# 尝试建立连接
conn = mysql.connect(host='localhost', user=usr, passwd=pwd, db=db)
# conn.select_db(db=db) 可用此条语句选择指定的数据库
print('nSucceed to connect mysql.')
except:
print('nError: Failed to connect mysql.')
exit(-1)
return conn
- 执行SQL语句
def exe_sql(conn, sql):
print('nExe SQL: %s.' % sql)
# 获取数据库游标
cursor = conn.cursor()
try:
cursor.execute(sql)
except:
print('nError: Failed to exe SQL of '%s'.' % sql)
close_connection(conn)
exit(-1)
return cursor
- 查询
def query(conn, sql):
cursor = exe_sql(conn, sql)
# 获取查询结果集
res = cursor.fetchall()
print('nid', 'name', 'sex', ' age')
for row in res:
for item in row:
print(item, 't', end='')
print()
print('nSucceed to exe SQL.')
- 更新(增、删、改)
def update(conn, sql, commit=True):
cursor = exe_sql(conn, sql)
# update, delete, insert 操作需要手动 commit()
# 如果不加 commit() 则当程序结束后数据库真实数据将不会发生更新
# create, drop, alter 已内置 commit() 不需要手动commit
# 此处我们默认将该函数视作仅供进行 update, delete, insert 操作, 具体由 commit 参数控制
if commit:
conn.commit()
print('nSucceed to exe SQL.')
- 测试main
if __name__ == '__main__':
conn = create_connection('root', 'root', 'class') # 建立数据库连接
sql01 = 'SELECT * FROM student;' # 查询student表中的所有记录
query(conn, sql01)
sql02 = 'SELECt * FROM student WHERe sex='women';' # 查询student表中的女生信息
query(conn, sql02)
sql03 = 'INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);' # 向student表中插入一条记录
update(conn, sql03)
query(conn, sql01)
sql04 = 'UPDATE student SET age=17 WHERe name='e';' # 更新student表中的一条记录
update(conn, sql04)
query(conn, sql01)
sql05 = 'DELETE FROM student WHERe name='e';' # 删除student表中的一条记录
update(conn, sql05)
query(conn, sql01)
sql06 = 'ALTER TABLE student AUTO_INCREMENT=1;' # 重置主键AUTO_INCREMENT,保证新增记录id的连续性
update(conn, sql06, commit=False)
close_connection(conn) # 关闭数据库连接
- 测试结果
Succeed to connect mysql.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: SELECt * FROM student WHERe sex='women';.
id name sex age
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);.
Succeed to exe SQL.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 23
Succeed to exe SQL.
Exe SQL: UPDATe student SET age=17 WHERe name='e';.
Succeed to exe SQL.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 17
Succeed to exe SQL.
Exe SQL: DELETe FROM student WHERe name='e';.
Succeed to exe SQL.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: ALTER TABLE student AUTO_INCREMENT=1;.
Succeed to exe SQL.
Succeed to disconnect mysql.
引用博客:python3基础:操作mysql数据库 作者:小小小小人ksh
五、Java 与 MySQL(IDEA with JDBC) JDBC环境配置
jar包下载地址(选择Platform Independent版本):
打开Project Structure面板
进入Modules设置页面的Dependencies栏,点击+号添加jar包
选择你的jar包解压路径
勾选导入的jar包,并点击ok
配置完成
- 导入依赖包
import java.sql.*;
- 创建类
public class SQLMan {
// 数据库连接对象
private Connection conn = null;
private String user;
private String password;
private String database;
// 驱动名称(部分博客中的驱动名词为旧版本“com.mysql.jdbc.Driver”)
private String driver_name = "com.mysql.cj.jdbc.Driver";
// MySQL数据地址
private String url;
public SQLMan(String usr, String pwd, String db){
this.setUser(usr);
this.setPassword(pwd);
this.setDatabase(db);
String url = "jdbc:mysql://localhost:3306/"+this.database+"?characterEncoding=gbk";
this.setUrl(url);
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
- 关闭连接
public void closeConnection() throws SQLException {
if(this.conn!=null){
this.conn.close();
System.out.println("nSucceed to disconnect with mysql.");
}
}
- 建立连接
public void createConnection(){
try {
// 加载数据库驱动名
Class.forName(this.driver_name);
// 建立数据库连接
this.conn = DriverManager.getConnection(this.url, this.user, this.password);
System.out.println("nSucceed to connect mysql.");
}catch (Exception e){
System.out.println("nError: Failed to connect mysql.");
System.exit(-1);
}
}
- 查询
public void query(String sql) throws SQLException {
if(this.conn!=null){
System.out.format("nExe SQL: %s.n", sql);
// Statement 对象用于执行SQL语句
Statement stmt = null;
// ResultSet 结果集对象
ResultSet res = null;
try{
stmt = this.conn.createStatement();
// 执行查询语句
res = stmt.executeQuery(sql);
System.out.format("n%-15s%-15s%-15s%-15sn", "id", "name", "sex", "age");
while(res.next()){
int id = res.getInt("id");
String name = res.getString("name");
String sex = res.getString("sex");
int age = res.getInt("age");
System.out.format("%-15d%-15s%-15s%-15dn", id, name, sex, age);
}
res.close();
stmt.close();
}catch (Exception e){
System.out.format("nError: Failed to exe SQL: %s.n", sql);
this.closeConnection();
System.exit(-1);
}
System.out.println("nSucceed to exe SQL.");
}else{
System.out.println("nPlease create connect with mysql first.");
}
}
- 更新(增、删、改)
public void update(String sql) throws SQLException {
if(this.conn!=null){
System.out.format("nExe SQL: %s.n", sql);
Statement stmt = null;
try{
stmt = this.conn.createStatement();
// 执行update、delete、insert语句
stmt.executeUpdate(sql);
stmt.close();
}catch (Exception e){
System.out.format("nError: Failed to exe SQL: %s.n", sql);
this.closeConnection();
System.exit(-1);
}
System.out.println("nSucceed to exe SQL.");
}else{
System.out.println("nPlease create connect with mysql first.");
}
}
- 测试main
public static void main(String[] args) throws SQLException {
SQLMan sqlMan = new SQLMan("root", "root", "class"); // 创建类实例
sqlMan.createConnection(); // 建立数据库连接
String sql01 = "SELECT * FROM student;"; // 查询student表中的所有记录
sqlMan.query(sql01);
String sql02 = "SELECt * FROM student WHERe sex='women';"; // 查询student表中的女生信息
sqlMan.query(sql02);
String sql03 = "INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);"; // 向student表中插入一条记录
sqlMan.update(sql03);
sqlMan.query(sql01);
String sql04 = "UPDATE student SET age=17 WHERe name='e';"; // 更新student表中的一条记录
sqlMan.update(sql04);
sqlMan.query(sql01);
String sql05 = "DELETE FROM student WHERe name='e';"; // 删除student表中的一条记录
sqlMan.update(sql05);
sqlMan.query(sql01);
String sql06 = "ALTER TABLE student AUTO_INCREMENT=1;"; // 重置主键AUTO_INCREMENT,保证新增记录id的连续性
sqlMan.update(sql06);
sqlMan.closeConnection(); // 关闭数据库连接
}
- 测试结果
Succeed to connect mysql.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: SELECt * FROM student WHERe sex='women';.
id name sex age
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: INSERT INTO student (name, sex, age) VALUES ('e', 'man', 23);.
Succeed to exe SQL.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 23
Succeed to exe SQL.
Exe SQL: UPDATe student SET age=17 WHERe name='e';.
Succeed to exe SQL.
Exe SQL: SELECT * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
5 e man 17
Succeed to exe SQL.
Exe SQL: DELETe FROM student WHERe name='e';.
Succeed to exe SQL.
Exe SQL: SELECt * FROM student;.
id name sex age
1 a man 20
2 b man 19
3 c women 19
4 d women 20
Succeed to exe SQL.
Exe SQL: ALTER TABLE student AUTO_INCREMENT=1;.
Succeed to exe SQL.
Succeed to disconnect with mysql.
引用博客:Java中JDBC的使用详解 作者:盡盡



