C言語を使用してmysqlデータベースに接続し、データをバッチで挿入します

C++ を使用してデータベースに接続するには、データベースをローカルにインストールするか、データベースが配置されているホストの IP アドレスを取得する必要があります。最初に、mysql8.0 64 ビット データベースを使用しており、vs は vs2019 であることを説明させてください。

1. 環境を構成する

   最初にvs2019を開き、空のプロジェクトを作成し、下図に示す位置を右クリックして、一番下のプロパティを見つけ、クリックして入力します

 以下のページに移動し、VC++ ディレクトリをクリックし、コンピュータ ファイル C ディスクで Program Files を見つけ、MySQL を見つけ、MySQL Server 8.0 を見つけ、インクルード フォルダに入り、ファイル アドレス C:\Program Files\MySQL\MySQL Server を入力します。 8.0\include 以下の図の位置 2 にコピーし、前のレベルに戻ってフォルダ lib に入り、ファイル アドレス C:\Program Files\MySQL\MySQL Server 8.0\lib を下の図 3 の位置にコピーします。 .

リンカーを開き、Enter をクリックし、Additional Dependencies をクリックして、フォルダー内の lib フォルダーに移動します。

libmysql.lib を見つける

 

 libmysql.lib の名前を以下に示す場所にコピーします。

最後に適用をクリックします。

     次に lib フォルダに入り、下図の libmysql.lib を C ドライブの C:\Windows\System32 にコピーします。

 

2. c言語リンクデータベース

    コード表示

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<mysql.h>//数据库包含的头文件
#include<time.h>

int main()
{
	//固定不变的
	MYSQL mysql;    //一个数据库结构体  
	MYSQL_RES* res; //一个结果集结构体
	MYSQL_ROW row; //char** 二维数据,存放一条条记录
	//初始化数据库
	mysql_init(&mysql);
	//设置编码方式
	mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");

	//连接数据库                       
	if (mysql_real_connect(&mysql, "ip地址", "数据库的用户名 ", "数据库密码", "使用的数据库名", 3306, NULL, 0) == NULL)
	{
		printf("错误原因:%s\n", mysql_error(&mysql));
		printf("连接失败\n");
		exit(-1);
	}
	char* str1 = "insert into rand values(";//这里使用的表是事先创建好的
	char sql_insert[200];
	sprintf(sql_insert, "%s%d,'%s','%s',%d%s", str1, 3, "xiaoli", "1234a", 3, ")");//批量插入数据
	mysql_query(&mysql, sql_insert);
	//查询数据
	mysql_query(&mysql, "select * from rand");
	//获取结果集
	res = mysql_store_result(&mysql);
	//给ROW赋值,判断ROW是否为空,不为空就打印数据
	while (row = mysql_fetch_row(res))
	{
		printf("%s \n", row[0]);
	}
	//释放结果集
	mysql_free_result(res);
	//关闭数据库
	mysql_close(&mysql);
	//停留等待
	system("pause");
	return 0;

}

    3. クラス紹介

  1. MYSQL ハンドル クラス

1. MYSQL の mysql;

これは、すべてのデータベース操作に必要なデータベース ハンドル クラスです。

   2.MYSQL_RES

2.MYSQL_RES* レス;

これはクエリ結果セットで、データベースにクエリを実行した後に値を格納するために使用されます

  3.MYSQL_ROW

2.MYSQL_ROW行

これは本質的にクラスではなく、本質的に文字列配列へのポインター、つまり二次ポインター char** と同等です。このステートメントの機能は、MYSQL_RES クエリ結果セットの内部使用を 1 行ずつ読み取ることです。テーブル内の列は、2 次ポインターに相当する要素であり、テーブル内の列と同じ数のポインターがいくつかあります。

    ブログを書くのはこれが初めてで、間違いがあります。皆さんに訂正していただければ幸いです。

おすすめ

転載: blog.csdn.net/weixin_62859191/article/details/125663580