您的位置:首页 > 数据库 > MySQL

VC 连接mysql, mysql 中午乱码问题

2012-09-26 14:41 393 查看
#include <stdio.h>

#include <stdlib.h>

#include <winsock2.h>

#pragma comment(lib, "ws2_32")

#pragma comment(lib, "libmysql")

#include "mysql.h" 

int main(int argc, char* argv[])

{

 int j;

 int res,sel;

 int selId,upd,del;

 char str[100];

 char  sql[100];

    MYSQL mysql;

    MYSQL_RES *resultset;

    MYSQL_ROW row; 

    mysql_init(&mysql);// 初始化mysql结构 

 //mysql_real_connect()函数的功能是连接一个MYSql数据库服务器,MYSQL结构地址是&mysql,host主机名或ip地址是localhost,用户名是root,密码是root,数据库是mydb,端口是3306

    if (!mysql_real_connect(&mysql, "localhost", "root", "root", "student", 3306, NULL,0))

    {

        printf("\n数据库连接发生错误!");

    }

    else

    {

        printf("\n数据库连接成功!\n");

  //插入一条数据到数据库

  //mysql_set_character_set(&mysql, "GB2312") ;//可以插入中文的

  

 //////////////////////////////

 
  res = mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8"); //很重要
 

 

  /////////////////////////////////////

strcpy((char*)str,"dd大大");

 // res = mysql_query(&mysql, "insert into mytable( username,age,score,id) values('"+str+"',33,3,18)");

  sprintf(sql,"insert   into   mytable( username,age,score,id)   values('%s',65,65,65) ",str);

res=mysql_real_query(&mysql,sql,strlen(sql));

//printf("strlen(sql)=%d\n",strlen(str));

        if(res)

        {  

   printf("插入数据失败!\n");

        }

        else

  {

   //mysql_affected_rows() -- 返回插入或者更新成功的行数。

   //printf("插入%d行数据成功!\n",(unsigned long)mysql_affected_rows(&mysql));

   printf("成功插入一行数据!\n");

  }

  

  //修改数据 

  upd = mysql_query(&mysql, "update mytable set username='l2222' where id=18");

  if(upd){

   printf("\n数据库更改发生错误\n");

  }

  else{

   printf("\n数据库更改数据成功\n");

  }

  

  //检索全部数据

  

  sel=mysql_query(&mysql,"select * from mytable");

        if(sel)

  {

   printf("数据库查询发生错误");

  }

  else

  {           

   printf("\n查询数据为:\n");        

   resultset = mysql_store_result(&mysql);// 获得结果集        

   if (mysql_num_rows(resultset) != NULL)

   {

    int numRows = mysql_num_rows(resultset); // 获得结果集中的记录数

    int numFields = mysql_num_fields(resultset);// 获得表中字段数

    printf("共 %d 行记录,每行 %d 个字段。", numRows, numFields);

    j = 1;

    //mysql_fetch_row()函数是查询成功后,把查询结果的一行取到一个数组中,以备使用.

    //每执行一次mysql_fetch_row(),将自动取到结果中的下一行记录。

                while (row = mysql_fetch_row(resultset))

                {

                    int i = 0;

                    printf("\n 第 %d 行:", j);

     for (i = 0; i < numFields; i++)

     {

      fprintf(stdout, " %s", row[i]); // 打印字段值

     }

                    j++;

    }

   }

   else

   {

    printf("\n无查询结果!");

   }   

   mysql_free_result(resultset);  // 释放结果集

        }

  

  del=mysql_query(&mysql,"delete from mytable where id=16");

  if(del){

   printf("\n数据库删除发生错误\n");

  }

  else{

   printf("\n数据库数据删除成功\n");

  }

    } 

    mysql_close(&mysql); // 释放数据库连接

 fgetchar();

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息