1. 程式人生 > >用C語言連結mysql資料庫

用C語言連結mysql資料庫

第一步,安全 mysql資料庫,包括伺服器和客服端,另外C語言還需安裝底層mysql介面:

 sudo apt-get install libmysqlclient-dev

第二步,在Ubuntu輸入命令列判斷資料庫是否正常開啟:
mysql -u root -p

第三步,需要通過命令列建立資料庫,便於以後連結
CREATE DATABASE Sign_db
當然可以可以通過C程式碼建立
#include <mysql.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{  
  MYSQL *con = mysql_init(NULL);

  if (con == NULL) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "123456", 
          NULL, 0, NULL, 0) == NULL) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }  

  if (mysql_query(con, "CREATE DATABASE Sign_db")) 
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}

第四步,連結資料庫,並新增資料
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void finish_with_error(MYSQL *con)
{
  fprintf(stderr, "%s\n", mysql_error(con));
  mysql_close(con);
  exit(1);        
}


int keep_sign(char **sign,int number)  
{  
	MYSQL *conn= mysql_init(NULL);
	if (conn == NULL){
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
    }
	int res,i;
	int len = strlen(sign[0]);

	char *st = "INSERT INTO Signature(id,sign_value) VALUES(%d,'%s')";
	size_t str_len = strlen(st);
	char *query = (char *)malloc(str_len+2*len + 1) ;
	//string 
	char * data = (char * )malloc(len*2 + 1);
	int length;

	if(mysql_real_connect(conn, "localhost", "root", "123456", "Sign_db", 0, NULL, 0) == NULL){
		fprintf(stderr, "%s\n", mysql_error(conn));
		mysql_close(conn);
		exit(1);
	} 
	
	printf("Connection success\n"); 
	
	if(mysql_query(conn,"DROP TABLE IF EXISTS Signature")){
		finish_with_error(conn);
	}
	
	if (mysql_query(conn, "CREATE TABLE Signature(Id INT, sign_value TEXT)")) {      finish_with_error(conn);
	}
	
	for(i = 0;i < number;i++){
		mysql_real_escape_string(conn, data, sign[i], len);
		length = snprintf(query, str_len + 2*len+ sizeof(int)+1, st,i,data);
			//printf("query = %s\n",query);
		res = mysql_real_query(conn,query,length); 
	}		
	if(!res)
		printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(conn)); 
	else
		finish_with_error(conn);
  
	mysql_close(conn); 
	free(query);
	free(data);
	return 1;  
}

void main(){
	char *p[]={"afdfdsafdskfjkdsfjds","12345674566732165434","84234399787483246614"};
	keep_sign(p,3);
}

編譯:

gcc -o test_mysql test_mysql.c -I.... -lmysqlclient -g