嵌入式SQL应用

时间:2022-01-27 08:31:20

1、 实现对visual studio的MySql的配置

  1. 新建一个visual studio的Win32控制台应用程序
    嵌入式SQL应用
  2. 更改配置管理器,改为release和x64
    嵌入式SQL应用
  3. 打开属性管理器
    嵌入式SQL应用
    得到是下面的界面
    嵌入式SQL应用
  4. 点击C/C++目录下的常规,输入include的路径进去
    嵌入式SQL应用
    点击编辑,加入如下的路径:
    嵌入式SQL应用
  5. 在链接器的常规中输入以下路径:
    嵌入式SQL应用
    嵌入式SQL应用
    嵌入式SQL应用
  6. 在输入中输入两个附加依赖项
    嵌入式SQL应用
    嵌入式SQL应用
  7. 将dll添加到project的release的目录中
    将c盘的mysql的目录下的dll添加到下面的工程路径下的release中:
    嵌入式SQL应用
    嵌入式SQL应用
  8. 点击本地Windows调试器,运行代码

2、 实现create_sc_table()或create_course_table()

a) 实现create_course_table()
我们可以通过代码实现这个功能,首先是建立一个MYSQL的对象,然后初始化他:

MYSQL mysql;
mysql_init(&mysql);

然后,进行数据库的链接,我们可以查找端口号。

mysql_real_connect(&mysql, "localhost", "root", "password", "database", 3306, 0, 0)

所以,我们需要更改用户名和密码,以及端口号,不过端口号需要自己去查询:
嵌入式SQL应用
所以,我们还是按照3306来进行链接,链接好了之后,进行数据库的操作。

mysql_query(&mysql, "drop table course;")

这一句,类似于我们的直接在sql中输入drop table course;
然后,我们就可以进行数据的插入

mysql_query(&mysql, "create table course (cno char(1) NOT null primary key,cname char(10) null ,cpno char(1) null ,ccredit int null) engine=innodb;")

这一句话是进行表的建立,是新建一个表格。

mysql_query(&mysql, "insert into course values('1', 'C语言', '',3),('2', '数据库', '1',4),('3', '编译原理', '2',5),('4','数据结构', '3',2),('5', '操作系统','4',3) ;")

这一句是数据的插入。
然后就建立了表格。
可以看下输出为:
嵌入式SQL应用
这是初始界面,然后,我们输入2,课题看到的是
嵌入式SQL应用
我们可以看到,结果为:
嵌入式SQL应用
所以,我们插入的结果是正确的。实现了create_course_table;

3、 实现insert_rows_into_sc_table()或insert_rows_into_course_table()

我们进行对course的数据的插入:

char strquery[100] = "insert into course(cno,cname,cpno,ccredit) values('";

这一句话是我们进行数据的插入的前面的部分,后面要插入的内容是我们自己输入的
所以,我们后面要进行的是字符串的拼接。

printf("Please input cno(eg:1):");
scanf_s("%s", icno);
strcat_s(strquery, icno);
strcat_s(strquery, "','");
printf("Please input cname(eg:XXXX):");
scanf_s("%s", icname);
strcat_s(strquery, icname);
strcat_s(strquery, "','");
printf("Please input cpno(eg:1):");
scanf_s("%s", icpno);
strcat_s(strquery, icpno);
strcat_s(strquery, "','");
printf("Please input iccredit(eg:2):");
scanf_s("%s", iccredit);
strcat_s(strquery, iccredit);
strcat_s(strquery, "');");

这一部分是我们在输入了数据之后,就直接进行了数据的拼接,所以,最终就形成了下面的一句话

insert into course(cno,cname,cpno,ccredit) values('icno’,’icname’,’icpno’,’iccredit’);

所以,我们就可以直接进行数据的插入了
我们可以看下结果为:
嵌入式SQL应用
插入成功
看下表中的数据为:
嵌入式SQL应用
所以,我们就完成了这次的实验。

4、工程代码

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <winsock.h>
#include "mysql.h"
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields;
int create_student_table();//
int create_sc_table();//
int create_course_table();//
int insert_rows_into_student_table();//
int insert_rows_into_sc_table();//
int insert_rows_into_course_table();//

void pause();
int main(int argc, char** argv)
{
int num = 0;
char fu[2];
mysql_init(&mysql);
if (mysql_real_connect(&mysql, "localhost", "root", "password", "database", 3306, 0, 0))
{
for (;;){
printf("Sample Embedded SQL for C application\n");
printf("Please select one function to execute:\n\n");
printf(" 0--exit.\n");
printf(" 1--创建学生表 6--添加成绩记录 b--删除课程记录 h--学生课程成绩表 \n");
printf(" 2--创建课程表 7--修改学生记录 c--删除成绩记录 j--学生成绩统计表 \n");
printf(" 3--创建成绩表 8--修改课程记录 e--显示学生记录 k--课程成绩统计表 \n");
printf(" 4--添加学生记录 9--修改成绩记录 f--显示课程记录 m--数据库表名 \n");
printf(" 5--添加课程记录 a--删除学生记录 g--显示成绩记录 \n");
printf("\n");
fu[0] = '0';
scanf_s("%s", &fu);
if (fu[0] == '0') exit(0);
if (fu[0] == '1') create_student_table();
if (fu[0] == '2') create_course_table();
if (fu[0] == '3') create_sc_table();
if (fu[0] == '4') insert_rows_into_student_table();
if (fu[0] == '5') insert_rows_into_course_table();
if (fu[0] == '6') insert_rows_into_sc_table();
if (fu[0] == '7') current_of_update_for_student();
if (fu[0] == '8') current_of_update_for_course();
if (fu[0] == '9') current_of_update_for_sc();
if (fu[0] == 'a') current_of_delete_for_student();
if (fu[0] == 'b') current_of_delete_for_course();
if (fu[0] == 'c') current_of_delete_for_sc();
if (fu[0] == 'e') using_cursor_to_list_student();
if (fu[0] == 'f') using_cursor_to_list_course();
if (fu[0] == 'g') using_cursor_to_list_sc();
if (fu[0] == 'h') using_cursor_to_list_s_sc_c();
if (fu[0] == 'j') using_cursor_to_total_s_sc();
if (fu[0] == 'k') using_cursor_to_total_c_sc();
if (fu[0] == 'm') using_cursor_to_list_table_names();
pause();
}

}
else
{
printf("数据库不存在!");
}
system("pause");
/*关闭数据库*/
mysql_close(&mysql);
return 0;
}
int create_student_table()
{
char yn[2];

char tname[21] = "xxxxxxxxxxx";
if (mysql_list_tables(&mysql, "student"))//删除表student
{
printf("The student table already exists,Do you want to delete it?\n");
printf("Delete the table?(y--yes,n--no):");
scanf_s("%s", &yn);
if (yn[0] == 'y' || yn[0] == 'Y'){
if (mysql_query(&mysql, "delete from student;") == 0)//删除student表格
{
printf("Drop table student successfully!\n\n");
}
else
{
printf("ERROR: drop table student \n\n");
}
}
}
mysql_query(&mysql, "SET NAMES GBK;");
/*插入数据*/
if (mysql_query(&mysql, "insert into student values('95001','李斌','16','男','CS'),('95002','赵霞','18','女','IS'),('95003','周淘','17','男','CS'), ('95004', '钱乐','18','女','IS') ,('95005','孙力','16','男','MA');") == 0)
{
printf("Success to insert rows to student table!\n\n");
}
else
{
printf("ERROR: insert rows \n\n");
}

return(0);
}
int create_course_table()
{
char yn[2];

char tname[21] = "xxxxxxxxxxx";
if (mysql_list_tables(&mysql, "course"))//删除表course
{
printf("The course table already exists,Do you want to delete it?\n");
printf("Delete the table?(y--yes,n--no):");
scanf_s("%s", &yn);
if (yn[0] == 'y' || yn[0] == 'Y'){
if (!mysql_query(&mysql, "drop table course;"))
{
printf("Drop table course successfully!\n\n");
}
else
{
printf("ERROR: drop table course \n\n");
}
}
}

//创建表course
//插入数据
if (mysql_query(&mysql, "create table course (cno char(1) NOT null primary key,cname char(10) null ,cpno char(1) null ,ccredit int null) engine=innodb;") == 0)
{
printf("create table course successfully!\n\n");
}
else
{
printf("ERROR: create table course \n\n");
}
mysql_query(&mysql, "SET NAMES GBK;");
if (mysql_query(&mysql, "insert into course values('1', 'C语言', '',3),('2', '数据库', '1',4),('3', '编译原理', '2',5),('4','数据结构', '3',2),('5', '操作系统','4',3) ;") == 0)
{
printf("Success to insert rows to course table!\n\n");
}
else
{
printf("ERROR: insert rows \n\n");
}
return(0);

}
int insert_rows_into_student_table()
{
char csage[] = "18";
char issex[] = "男";
char isno[] = "95002";
char isname[] = "xxxxxx";
char isdept[] = "CS";
char strquery[100] = "insert into student(sno,sname,sage,ssex,sdept) values('";
char yn[2];
while (1){
/*信息的采集,并进行字符串的粘连*/
printf("Please input sno(eg:95001):");
scanf_s("%s", isno);
strcat_s(strquery, isno);
strcat_s(strquery, "','");
printf("Please input name(eg:XXXX):");
scanf_s("%s", isname);
strcat_s(strquery, isname);
strcat_s(strquery, "','");
printf("Please input age(eg:18):");
scanf_s("%s", csage);
strcat_s(strquery, csage);
strcat_s(strquery, "','");
printf("Please input sex(eg:男):");
scanf_s("%s", issex);
strcat_s(strquery, issex);
strcat_s(strquery, "','");
printf("Please input dept(eg:CS、IS、MA...):");
scanf_s("%s", isdept);
strcat_s(strquery, isdept);
strcat_s(strquery, "');");

if (mysql_query(&mysql, strquery) == 0)
{
printf("execute successfully!\n\n");
}
else
{
printf("ERROR: execute \n");
}
printf("Insert again?(y--yes,n--no):");
scanf_s("%s", &yn);
if (yn[0] == 'y' || yn[0] == 'Y'){
continue;
}
else break;
}
if (mysql_errno(&mysql)) // mysql_fetch_row() failed due to an error
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}

return (0);
}

int insert_rows_into_course_table()
{
char icno[2];
char icname[20];
char icpno[2];
char iccredit[2];
char strquery[100] = "insert into course(cno,cname,cpno,ccredit) values('";
char yn[2];
while (1){
/*信息的采集,并进行字符串的粘连*/
printf("Please input cno(eg:1):");
scanf_s("%s", icno);
strcat_s(strquery, icno);
strcat_s(strquery, "','");
printf("Please input cname(eg:XXXX):");
scanf_s("%s", icname);
strcat_s(strquery, icname);
strcat_s(strquery, "','");
printf("Please input cpno(eg:1):");
scanf_s("%s", icpno);
strcat_s(strquery, icpno);
strcat_s(strquery, "','");
printf("Please input iccredit(eg:2):");
scanf_s("%s", iccredit);
strcat_s(strquery, iccredit);
strcat_s(strquery, "');");

if (mysql_query(&mysql, strquery) == 0)
{
printf("execute successfully!\n\n");
}
else
{
printf("ERROR: execute \n");
}
printf("Insert again?(y--yes,n--no):");
scanf_s("%s", &yn);
if (yn[0] == 'y' || yn[0] == 'Y'){
continue;
}
else break;
}
if (mysql_errno(&mysql)) // mysql_fetch_row() failed due to an error
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}

return (0);
}