c连接 mysql问题 急!!!

而康 2009-10-26 06:16:32
看了半天也没看懂 语法基本懂了的是细节(尤其是编译 ,用DOS命令,连接)还是 感觉没明白 把书上的代码搬到编辑器上 也不好使
怎么连接?
说:把在安装目录下的mysql.h和include下的mysqlclient.lib 提取出 但我也没找到他们呀 没有这两个文件 我下的是5.1版是不是还少什么东西没下 还是安装的不对?
还有 有文件后连接的具体过程能不能给讲一下
一步一步的 希望不要给我网址让我看 我看半天了没看明白 谢谢好心人了!!
...全文
184 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyworld2288 2009-10-28
  • 打赏
  • 举报
回复
c我这里有现成例子可以参考:http://download.csdn.net/source/1761623
wbandzlhgod 2009-10-27
  • 打赏
  • 举报
回复
1 #include <mysql.h> /*注意要包含这个头文件*/
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5
6 /*定义了一些数据库连接需要的宏*/

7 #define HOST "localhost"
8 #define USERNAME "ABitNo"
9 #define PASSWORD "ABitNo"
10 #define DATABASE "abitno"
11
12 /*这个函数用来执行传入的sql語句*/
13 void exe_sql(char* sql) {
14
15 MYSQL my_connection; /*这是一个数据库连接*/
16 int res; /*执行sql語句后的返回标志*/
17
18 /*初始化mysql连接my_connection*/
19 mysql_init(&my_connection);
20
21 /*这里就是用了mysql.h里的一个函数,用我们之前定义的那些宏建立mysql连接,并
22 返回一个值,返回不为空证明连接是成功的*/
23 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
24 0, NULL, CLIENT_FOUND_ROWS)) {/*连接成功*/
25
26 printf("数据库执行exe_sql连接成功!\n");
27
28 /*这句话是设置查询编码为utf8,这样支持中文*/
29 mysql_query(&my_connection, "set names utf8");
30
31 /*下面这句话就是用mysql_query函数来执行我们刚刚传入的sql語句,
32 这会返回一个int值,如果为0,证明語句执行成功*/
33 res = mysql_query(&my_connection, sql);
34
35 if (res) {/*现在就代表执行失败了*/
36 printf("Error: mysql_query !\n");
37 /*不要忘了关闭连接*/
38 mysql_close(&my_connection);
39 } else {/*现在就代表执行成功了*/
40 /*mysql_affected_rows会返回执行sql后影响的行数*/
41 printf("%d 行受到影响!\n\n", mysql_affected_rows(&my_connection));
42 /*不要忘了关闭连接*/
43 mysql_close(&my_connection);
44 }
45
46 } else {
47 /*数据库连接失败*/
48 printf("数据库执行exe_sql连接失败!\n");
49 }
50 }
51
52 /*这个函数用来执行传入的sql語句,并打印出查询結果*/
53 void query_sql(char* sql) {
54 MYSQL my_connection; /*这是一个数据库连接*/
55 int res; /*执行sql語句后的返回标志*/
56 MYSQL_RES *res_ptr; /*指向查询结果的指针*/
57 MYSQL_FIELD *field; /*字段结构指针*/
58 MYSQL_ROW result_row; /*按行返回的查询信息*/
59
60 int row, column; /*查询返回的行数和列数*/
61 int i, j; /*只是控制循环的两个变量*/
62
63 /*初始化mysql连接my_connection*/
64 mysql_init(&my_connection);
65
66 /*这里就是用了mysql.h里的一个函数,用我们之前定义的那些宏建立mysql连接,并
67 返回一个值,返回不为空证明连接是成功的*/
68 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
69 0, NULL, CLIENT_FOUND_ROWS)) {/*Connection success*/
70
71 printf("数据库查询query_sql连接成功!\n");
72
73 /*这句话是设置查询编码为utf8,这样支持中文*/
74 mysql_query(&my_connection, "set names utf8");
75
76 /*下面这句话就是用mysql_query函数来执行我们刚刚传入的sql語句,
77 这会返回一个int值,如果为0,证明語句执行成功*/
78 res = mysql_query(&my_connection, sql);
79
80 if (res) { /*现在就代表执行失败了*/
81 printf("Error: mysql_query !\n");
82 /*不要忘了关闭连接*/
83 mysql_close(&my_connection);
84 } else { /*现在就代表执行成功了*/
85 /*将查询的結果给res_ptr*/
86 res_ptr = mysql_store_result(&my_connection);
87
88 /*如果结果不为空,就把结果print*/
89 if (res_ptr) {
90 /*取得結果的行数和*/
91 column = mysql_num_fields(res_ptr);
92 row = mysql_num_rows(res_ptr) + 1;
93 printf("查询到 %lu 行 \n", row);
94
95 /*输出結果的字段名*/
96 for (i = 0; field = mysql_fetch_field(res_ptr); i++)
97 printf("%s\t", field->name);
98 printf("\n");
99
100 /*按行输出結果*/
101 for (i = 1; i < row; i++) {
102 result_row = mysql_fetch_row(res_ptr);
103 for (j = 0; j < column; j++)
104 printf("%s\t", result_row[j]);
105 printf("\n");
106 }
107
108 }
109
110 /*不要忘了关闭连接*/
111 mysql_close(&my_connection);
112 }
113 }
114 }
115
116 int main(int argc, char *argv[]) {
117 /*测试下向里面插入数据*/
118 char *exe = "insert into abitno values('ABitNo','http://ABitNo.LinPie.com');";
119 exe_sql(exe);
120
121 /*测试下查询*/
122 char *query = "select * from abitno;";
123 query_sql(query);
124
125 return 0;
126 }
而康 2009-10-27
  • 打赏
  • 举报
回复
还有一个问题fp=fopen("expenses.conf","r"); 建个文件 .conf是什么文件 然后还有一句[user@host]$./expenses.bin
然后就输入了C语言命令了 不明白
wwwwb 2009-10-27
  • 打赏
  • 举报
回复
你最好到C版块去问吧,是语言方面的问题
而康 2009-10-27
  • 打赏
  • 举报
回复
我用的是C语言 C#的看不懂 大家是不是没理解我在说什么 我再解释一下
这是书上的小程序我取一部分基本功能:(查询数据库中的数据)
#include "stdio.h"
#include "mysql.h"
main()
{
FILE *fp;
char linebuffer[1000];
cnost char *sep=":";
char *prev_p;
long next_p;
char host[100];
char user[50];
char pass[50];
char db[50];
int choice;
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL_FIELD *field;
fp=fopen("expenses.conf","r");
if(fp!=NULL)
{
memset(linebuffer,'\0',sizeof(linebuffer));
memset(host,'\0',sizeof(host));
memset(user,'\0',sizeof(user));
memset(pass,'\0',sizeof(pass));
memset(db,'\0',sizeof(db));
fscanf(fp,"%s",linebuffer);
if(strlen(linebuffer)!=0)
{
prev_p=linbuffer;
strncpy(host,prev_p,next_p=strstr(prev_p,sep)-prev_p_);
prev_p=(char*)((long)prev_p+next_p+1);
strncpy(user,prev_p,next_p=strstr(prev_p,sep)-prev_p_);
prev_p=(char*)((long)prev_p+next_p+1);
strncpy(pass,prev_p,next_p=strstr(prev_p,sep)-prev_p_);
prev_p=(char*)((long)prev_p+next_p+1);
strcpy(db,prev_p);
}
fclose(fp);
}
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,host,user,pass,db,0,NULL,0))
{
exit();
}
printf("\n");
printf("[1] view expense totals\n");
printf("[2] add expense item\n");
printf("[3] quit\n");
printf("\n");
printf("select an option from the list above:");
scanf("%d",&choice);
printf("\n");
if(choice==1)
{
if(mysql_query(&mysql,"SELECT cname,SUM(amt) FROM cate,data WHERE care.cid=data.cid GROUP BY cname")!=0)
{
exit();
}
else
{
if(result=mysql_store_result(&mysql))
{
int numrecords=mysql_num_rows(result);
int i;
for(i=0;i<numrecords;i++)
{
row=mysql_fetch_row(result);
printf("%s=%s\n",row[0],row[1]);
}
printf("\n");
mysql_free_result(result);
}
}
}
mysql_close(&mysql);
exit();
}
我用的是GCC(1)写完了后运行不好使不显示错误也不给运行没反应怎么回事
书上让保存成a.c保存了(保存后自动是a.c了) 书上要用mysql.h和mysqlclient.lib 我也找到了问题(2) 然我编译[user@host]$/usr/bin/gcc a.c-o a.bin -i/usr/local/mysql/include -l/usr/local/mysql/lib -lmysclient -lz 问题来了!
意思我明白 但是我之前没用过编译编完C直接运行了 怎么编 用下什么软件吗?还是自带的软件 在哪找 是DOS吗?
问题(3)假如我编译完了后怎么做 他要的mysql.h和mysqlclient.lib和我编的a.c都放到哪 随便放哪都行吗?(4)一旦编译成功应该有个a.bin文件 在命令提示下输入[user@host]$./a.bin 如果正确就连上了 那么连上了后是不是就进入了C语言程序了然后用命令提示输入C语言所要输入的数据?
(5)最后 我上面的程序够吗 书上就给这个还要什么吗 或者头文件是不是少了什么
nianzhang747 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wwwwa 的回复:]
转:
新建一Win32 Console Application的Project,把“c:\mysql\include”添加到编

译选项的包含路径中(在Project Options中加入 /I "d:\mysql\include&quounter.cgol.net 魈迦缦拢?

#include <windows.h>

#include <stdio.h>

#include <string.h>

#include <mysql.h>

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

{

char szTargetDSN[] = "test";

char szSqlText[500]="";

char aszFlds[ 25 ][ 25 ];

MYSQL * myData ;

MYSQL_RES * res ;

MYSQL_FIELD * fd ;

MYSQL_ROW row ;

int i,j,k;

BOOL bCreate = TRUE;

if ( (myData = mysql_init((MYSQL*) 0))

//初始化数据结构

&& mysql_real_connect( myData, NULL,

//连接数据库

"root", " your_password ", szTargetDSN,

MYSQL_PORT, NULL, 0 ) )

{

if(bCreate)

{

sprintf(szSqlText, //构造SQL语句

"create table mytable "

//新建一张表

"(time datetime, s1 char(6), "

"s2 char(11), s3 int, s4 int)");

if (mysql_query( myData, szSqlText))

//执行SQL语句

{//执行SQL语句出错

ErrLog( "Can't create table") ;

mysql_close( myData ) ;

return FALSE ;

}



sprintf(szSqlText,

"insert into mytable "

//向表中插入数据

"values('2000-3-10 21:01:30',"

//注意时间的格式

"'Test','MySQLTest',2000,3)");

if (mysql_query( myData, szSqlText))

{//执行SQL语句出错

ErrLog( "Can't insert data to table") ;

mysql_close( myData ) ;

return FALSE ;

}

sprintf(szSqlText, "select * from mytable ");

if (mysql_query( myData, szSqlText))

//进行数据检索

{

//执行SQL语句出错

mysql_close( myData ) ;

return FALSE ;

}

else

{

res = mysql_store_result( myData ) ;

//取得查询结果

i = (int) mysql_num_rows( res ) ;

//取得有效记录数

printf( "Query: %s\n%ld records found:

\n", szSqlText, i ) ;

for ( i = 0 ; fd = mysql_fetch_field( res ) ;

i++ )

strcpy( aszFlds[ i ], fd->name ) ;

//取得各字段名

for (i=1; row = mysql_fetch_row( res ); )

//依次读取各条记录

{j = mysql_num_fields( res ) ;

//取得记录中的字段数

printf( "Record #%ld:-\n", i++ ) ;

for ( k = 0 ; k < j ; k++ )

//输出各字段的值

printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],

(((row[k]==NULL)||

(!strlen(row[k])))?"NULL":row[k])) ;

puts( "==============================\n" ) ;

}

mysql_free_result( res ) ;

}

}

else

{//连接数据库出错

ErrLog( "Can't connect to the mysql server ") ;

mysql_close( myData ) ;

return FALSE ;

}

mysql_close( myData ) ;

return TRUE ;

}

---- 对其中几个函数作简单说明,详细说明,可参考MySQL文档:

---- 1. MYSQL *mysql_init(MYSQL *mysql)

---- 初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数

mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。

新建的结构将在mysql_close()中释放。

---- 若成功,返回初始化的MYSQL数据结构的指针,否则返回NULL。

---- 2. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,

---- const char *user, const char *passwd, const char *db,

---- unsigned int port, const char *unix_socket, unsigned int client_flag)

---- 与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_re

al_connect()成功返回。

---- 参数mysql是mysql_init()的返回值;

---- 参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为“lo

calhost”;

---- 参数user和passwd是MySQL数据库的合法用户和口令;
[/Quote]
------------------
经典
WWWWA 2009-10-27
  • 打赏
  • 举报
回复
转:
新建一Win32 Console Application的Project,把“c:\mysql\include”添加到编

译选项的包含路径中(在Project Options中加入 /I "d:\mysql\include&quounter.cgol.net 魈迦缦拢?

#include <windows.h>

#include <stdio.h>

#include <string.h>

#include <mysql.h>

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

{

char szTargetDSN[] = "test";

char szSqlText[500]="";

char aszFlds[ 25 ][ 25 ];

MYSQL * myData ;

MYSQL_RES * res ;

MYSQL_FIELD * fd ;

MYSQL_ROW row ;

int i,j,k;

BOOL bCreate = TRUE;

if ( (myData = mysql_init((MYSQL*) 0))

//初始化数据结构

&& mysql_real_connect( myData, NULL,

//连接数据库

"root", " your_password ", szTargetDSN,

MYSQL_PORT, NULL, 0 ) )

{

if(bCreate)

{

sprintf(szSqlText, //构造SQL语句

"create table mytable "

//新建一张表

"(time datetime, s1 char(6), "

"s2 char(11), s3 int, s4 int)");

if (mysql_query( myData, szSqlText))

//执行SQL语句

{//执行SQL语句出错

ErrLog( "Can't create table") ;

mysql_close( myData ) ;

return FALSE ;

}



sprintf(szSqlText,

"insert into mytable "

//向表中插入数据

"values('2000-3-10 21:01:30',"

//注意时间的格式

"'Test','MySQLTest',2000,3)");

if (mysql_query( myData, szSqlText))

{//执行SQL语句出错

ErrLog( "Can't insert data to table") ;

mysql_close( myData ) ;

return FALSE ;

}

sprintf(szSqlText, "select * from mytable ");

if (mysql_query( myData, szSqlText))

//进行数据检索

{

//执行SQL语句出错

mysql_close( myData ) ;

return FALSE ;

}

else

{

res = mysql_store_result( myData ) ;

//取得查询结果

i = (int) mysql_num_rows( res ) ;

//取得有效记录数

printf( "Query: %s\n%ld records found:

\n", szSqlText, i ) ;

for ( i = 0 ; fd = mysql_fetch_field( res ) ;

i++ )

strcpy( aszFlds[ i ], fd->name ) ;

//取得各字段名

for (i=1; row = mysql_fetch_row( res ); )

//依次读取各条记录

{j = mysql_num_fields( res ) ;

//取得记录中的字段数

printf( "Record #%ld:-\n", i++ ) ;

for ( k = 0 ; k < j ; k++ )

//输出各字段的值

printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],

(((row[k]==NULL)||

(!strlen(row[k])))?"NULL":row[k])) ;

puts( "==============================\n" ) ;

}

mysql_free_result( res ) ;

}

}

else

{//连接数据库出错

ErrLog( "Can't connect to the mysql server ") ;

mysql_close( myData ) ;

return FALSE ;

}

mysql_close( myData ) ;

return TRUE ;

}

---- 对其中几个函数作简单说明,详细说明,可参考MySQL文档:

---- 1. MYSQL *mysql_init(MYSQL *mysql)

---- 初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数

mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。

新建的结构将在mysql_close()中释放。

---- 若成功,返回初始化的MYSQL数据结构的指针,否则返回NULL。

---- 2. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,

---- const char *user, const char *passwd, const char *db,

---- unsigned int port, const char *unix_socket, unsigned int client_flag)

---- 与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_re

al_connect()成功返回。

---- 参数mysql是mysql_init()的返回值;

---- 参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为“lo

calhost”;

---- 参数user和passwd是MySQL数据库的合法用户和口令;
wwwwb 2009-10-27
  • 打赏
  • 举报
回复
简单示例:
C#连接MySql数据库的方法-用MySQLDriverCS连接MySQL数据库。

先下载和安装MySQLDriverCS,在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中。

注:我下载的是版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe

C#连接MySql数据库代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.Odbc;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingMySQLDriverCS;
namespacemysql{
publicpartialclassForm1:Form{
publicForm1(){
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse){
MySQLConnectionconn=null;
conn=newMySQLConnection(newMySQLConnectionString
("localhost","inv","root","831025").AsString);
conn.Open();
MySQLCommandcommn=newMySQLCommand("setnamesgb2312",conn);
commn.ExecuteNonQuery();
stringsql="select*fromexchange";
MySQLDataAdaptermda=newMySQLDataAdapter(sql,conn);
DataSetds=newDataSet();
mda.Fill(ds,"table1");
this.dataGrid1.DataSource=ds.Tables["table1"];
conn.Close();
}
}
}
而康 2009-10-26
  • 打赏
  • 举报
回复
是呀 就那么几个步骤我也知道 但是没人告我具体怎么做
我现在 把mysql.h和mysqlclient.lib 找到了
有人能告我一下怎么做吗 楼上的注册驱动 获得链接 准备语句 执行查询 关闭链接
怎么整的?
nianzhang747 2009-10-26
  • 打赏
  • 举报
回复
c链接 就那么几个步骤 搞清楚就好了

注册驱动 获得链接 准备语句 执行查询 关闭链接
nianzhang747 2009-10-26
  • 打赏
  • 举报
回复
mysql源代码 汗

估计得研究会了
ACMAIN_CHM 2009-10-26
  • 打赏
  • 举报
回复
而康 2009-10-26
  • 打赏
  • 举报
回复
看了半天还是不知道下什么 全是英文还一堆下载项 下哪个呀?
而康 2009-10-26
  • 打赏
  • 举报
回复
我英语不太好 英文网站看不太懂下什么呀?
ACMAIN_CHM 2009-10-26
  • 打赏
  • 举报
回复
C API代码是与MySQL一起提供的。它包含在mysqlclient库中,并允许C程序访问数据库。

MySQL源码分发版的很多客户端是用C语言编写的。如果你正在寻找能演示如何使用C API的示例,可参看这些客户端程序。你可以在MySQL源码分发版的客户端目录下找到它们。
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧