如下,在C客户端获取mysql数据库
//查询数据并显示
s_sql = "select * from t_vehicle";
if(mysql_query(&mydata,s_sql.c_str()) != 0)
{
//执行SQL语句出错 
mysql_close(&mydata);
std::cout<<"execute sql syntax fail"<<
endl<<mysql_error(&mydata)<<endl;
return -1;
}
MYSQL_RES *result = mysql_store_result(&mydata); //依次读取各条记录
MYSQL_ROW currrow = NULL;
while((currrow = mysql_fetch_row(result)) != NULL)
{
//读行的记录
for(unsigned int i = 0; i < mysql_num_fields(result); i++)
{
std::cout<<(currrow[i] ? currrow[i] : "NULL")<<"\t";
}
std::cout<<endl;
}在取得每一列数据的时候,是通过列位置顺序索引来取得数据的(currrow[i]),由于数据库表的字段可能会经常有变换,这样势必引起程序也跟着变化,有没有办法通过表的列名去索引数据呢,如currrow["列明"]等?初学,还请大家多多指教。

解决方案 »

  1.   

    使用select *本身就是缺乏扩展的意识,应该列出来要使用的字段,这样将来表结构变了,程序不会出现莫名其妙的问题。mysql的原生接口是C的,所以你需要的方式不太可能实现,你可以:
    1、试试mysql++
    2、使用mysql_fetch_fields一类的函数,取出列名,然后匹配你需要的列
      

  2.   

    C 中没有办法象C#或VB那样,直接用 row["fieldName"] 来操作。楼上的第二种方法可行,你可以先遍历一下所有的 fields 以确定位置。
      

  3.   


    实在是没有办法了,我现在把"select * "改成 "select VEHICLEID,CORPID,NUMBERRRPLATE"了,不过报错ERROR 1054 (42S22): Unknown column 'vehicle_id' in 'field list'建表语句如下
    create table IF NOT EXISTS T_VEHICLE
    (
      VEHICLEID            numeric not null comment '车辆ID',
      CORPID               numeric not null comment '对应企业数据表的表记录ID',
      NUMBERRRPLATE        VARCHAR(32) comment '车牌号码'
      constraint PK_T_VEHICLE primary key (VEHICLEID)
    )
    comment '车辆资料数据';建表语句是否有问题?
      

  4.   

    Unknown column 'vehicle_id' in 'field list' 
    create table IF NOT EXISTS T_VEHICLE 

      VEHICLEID 要对应啊
      

  5.   

    create table IF NOT EXISTS T_VEHICLE 

      VEHICLEID            numeric not null comment '车辆ID', 
      CORPID              numeric not null comment '对应企业数据表的表记录ID', 
      NUMBERRRPLATE        VARCHAR(32) comment '车牌号码'
      constraint PK_T_VEHICLE primary key (VEHICLEID) 

    comment '车辆资料数据'; 
      

  6.   

    还有这里漏了 ,  NUMBERRRPLATE        VARCHAR(32) comment '车牌号码', 
      constraint PK_T_VEHICLE primary key (VEHICLEID) 
      

  7.   

    用MySQL Connector/C++非常方便的
      

  8.   

    非常感谢楼上的各位
    用了这些天的mysql,感觉很不爽,我主业是做Oracle的,不知道有没有人比较过Oracle和mysql。过几天再结贴。