本文主要针对于Linux环境讲解,读者如果使用的是Windows,遇到问题可以一起交流。
C语言操作MySQL
mysql.h头文件提供了对MySQL操作的一些API,首先确保当前系统有该头文件,先执行下面命令
代码语言:javascript复制sudo apt-get install libmysqlclient-dev
一般情况下该头文件路径为/usr/include/mysql/mysql.h
,如果该路径下不存在,尝试用find命令全局搜索一下即可,确保该头文件是存在的
直接以代码样例给出常用的操作,其中讲解都在注释中,该程序做了cai_xxx
函数的封装
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#define HOST "localhost"
#define USER "root"
#define PASSWD "mysql"
#define DB_NAME "school"
/**
* 连接MySQL数据库
* @param host: 连接的主机ip user: 用户名 passwd: 密码 db_name:数据库名
* @return 成功返回连接指针, 失败返回NULL
*/
MYSQL *cai_connect(char *host, char *user, char *passwd, char *db_name)
{
// init
MYSQL *conn;
if ( !(conn = mysql_init(NULL)) ) {
printf("init errorn");
return NULL;
}
// connect
if ( !mysql_real_connect(conn, host, user, passwd, db_name, 0, NULL, 0) ) {
printf("connect errorn");
return NULL;
}
// 设置字符集编码
mysql_set_character_set(conn, "utf8");
return conn;
}
/**
* 执行sql语句
* @param conn: 连接指针 sql: 需要执行的sql语句
* @return 成功返回结果集, 失败返回NULL
*/
MYSQL_RES *cai_execute(MYSQL *conn, char *sql)
{
if (mysql_query(conn, sql) != 0) {
printf("query errorn");
exit(-1);
}
// 执行的select查询语句 mysql_store_result(conn)会返回查询的结果集
return mysql_store_result(conn);
}
/**
* 打印结果集
* @param result: 结果集指针
* @return
*/
void cai_show(MYSQL_RES *result)
{
// 打印表头
unsigned int field_cnt = mysql_num_fields(result);
MYSQL_FIELD *fields = mysql_fetch_fields(result);
for (int i = 0; i < field_cnt; i ) {
printf("%st", fields[i].name);
}
printf("n---------------------------------------------------------------------n");
// 遍历数据
MYSQL_ROW row = NULL;
while ( row = mysql_fetch_row(result) ) {
for (int i = 0; i < field_cnt; i ) {
printf("%st", row[i] ? row[i] : "NULL");
}
printf("n");
}
}
int main(void)
{
// 获取连接指针
MYSQL *conn = cai_connect(HOST, USER, PASSWD, DB_NAME);
if (!conn) {
exit(-1);
}
// insert
cai_execute(conn, "insert into students values(0, '王王', 17, 155.00, '女')");
// delete
cai_execute(conn, "delete from students where name = '王昭君'");
// select 获取结果集
MYSQL_RES *result = cai_execute(conn, "select * from students");
if (!result) {
exit(-1);
}
// 打印结果集
cai_show(result);
// 释放结果集
mysql_free_result(result);
// close
mysql_close(conn);
return 0;
}
执行以下命令来生成可执行程序
代码语言:javascript复制gcc test.c `mysql_config --cflags --libs` -o test.o # 注意: ``是反引号,而不是引号
Java操作MySQL
Java连接MySQL数据库采用的是面向接口编程,其中采用的是JDBC (Java Database Connectivity),即Java数据库驱动
JDBC
JDBC是sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
代码编写大致过程如下:
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象
4.获取执行sql语句的对象
5.执行sql, 接受返回结果并处理
6.释放资源
首先导入MySQL驱动jar包
以IDEA为例, 在工程目录下新建libs目录,复制mysql-connector-java-5.1.37-bin.jar到libs目录下
别忘了在libs上右键,单击Add as Library...
将其作为库添加到工程中
样例代码如下
代码语言:javascript复制package cn.caiyifan.jdbc;
import java.sql.*;
public class jdbc {
public static void main(String[] args) {
Connection conn = null;
Statement stat = null;
try {
// 1.注册驱动
//DriverManager.registerDriver(new Driver());
// 注册驱动最好的方法是利用反射
Class.forName("com.mysql.jdbc.Driver");
// 2.获得数据库连接
String url = "jdbc:mysql://localhost:3306/school";
String user = "root";
String pwd = "mysql";
// DriverManager驱动
conn = DriverManager.getConnection(url, user, pwd);
//System.out.println(conn);
// 3.获得语句执行平台,通过数据库连接对象获取到sql语句的执行者对象
stat = conn.createStatement();
// 4.执行sql语句 通过执行者对象调用方法来执行sql语句
// executeUpdate方法只能执行insert delete update sql语句
// 返回值int,表示成功操作数据表的行数
String sql = "insert ";
stat.executeUpdate(sql);
sql = "select * from students";
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
String res = rs.getInt("id") " " rs.getString("name") " "
rs.getInt("age") " " rs.getFloat("height") " " rs.getString("gender");
System.out.println(res);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5.释放资源
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
Python操作MySQL
python操作mysql使用的是PyMYSQL模块,本文以python3为例讲解,首先确保已经安装了PyMYSQL模块
代码语言:javascript复制sudo pip3 install PyMYSQL
python操作MySQL,相对而言比较简洁,而且默认开启了事务
python用PyMYSQL模块操作MySQL代码样例
代码语言:javascript复制from pymysql import *
def main():
# 创建connection对象
conn = connect(host='localhost', port=3306, database='school', user='root', password='mysql',charset='utf8')
# 获得cursor对象
cs = conn.cursor()
# cs.execute用来执行sql语句, 并返回受影响的行数
# insert
count = cs.execute("insert into students values(0, '王王', 17, 155.00, '女')")
# delete
count = cs.execute("delete from students where age = '王王'")
# update
count = cs.execute("update students set age=17 where name='小乔'")
# 提交之前的操作,如果之前已经之执行过多次的execute,那么就都进行提交
# 增删改操作真正生效需要进行提交 (python操作数据库默认开启了事务)
conn.commit()
# select
count = cs.execute('select * from students');
# cs.fetchone() 返回的是一个元组,取出的是一条记录
# cs.fetchall() 返回的是一个元组,取出的是所有记录,元组的每一个元素也是元组, 表示一条记录
result = cs.fetchall()
for r in result:
print(r)
# 关闭cursor对象
cs.close()
# 关闭connection对象
conn.close()
if __name__ == '__main__':
main()
上文还未完善, 还有其他语言待加上,笔者正在偷懒中emmm~
本文作者: Ifan Tsai (菜菜)
本文链接: https://cloud.tencent.com/developer/article/2164572
版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!