我用的是dev-c++ 4.9.9.2 with
Mingw/GCC 3.4.2加C语言连接mySQL
如果使用的是msvc的编译器,那么使用的libmysql.lib是没问题的,但是如果使用的是mingw编译器,那就会出错,有undefined
reference....等类错误字样。这是因为mingw使用的库和msvc使用的不同格式的库而引起的。而mysql只提供了msvc可使用的库。mingw要想编译出qsqlmysql库来,我们先得编译出mingw需要的libmysql.a这个文件来,可以使用mingw工具来生成。
mingw-utils包里的reimp命令(如果没有这个命令的话,可从
然后运行:
cd c:\mysql\lib\opt //进入c:\mysql\lib\opt
c:\mysql\lib\opt> c:\dev-c++\mingw32\bin\reimp
-d libmysql.lib
此时在c:\mysql\lib\opt下生成了
libmysql.def文件
然后运行:
c:\mysql\lib\opt>
c:\dev-c++\mingw32\bin\dlltool -k -d libmysql.def -l
libmysql.a
一切ok!在 c:\mysql\lib\opt下生成了
libmysql.a文件
libmysql.lib文件就转换成了libmysql.a文件,就可以应用了
记得在"工程"-->"工程属性"-->"参数"里面,加入库或者对象,把你生成的libmysql.a添加进去,然后编译执行,就ok了!
下面是我从网上copy
的别人的代码,用上面的方法,加上下面这段代码就可以成功实现c连接mysql!代码如下:
#include
#include
#include
#include
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", "root",
szTargetDSN,MYSQL_PORT, NULL, 0 ) )
{
if(bCreate)
{
//构造SQL语句//新建一张表
sprintf(szSqlText, "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 ;
}