如下,在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["列明"]等?初学,还请大家多多指教。
//查询数据并显示
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、试试mysql++
2、使用mysql_fetch_fields一类的函数,取出列名,然后匹配你需要的列
实在是没有办法了,我现在把"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 '车辆资料数据';建表语句是否有问题?
create table IF NOT EXISTS T_VEHICLE
(
VEHICLEID 要对应啊
(
VEHICLEID numeric not null comment '车辆ID',
CORPID numeric not null comment '对应企业数据表的表记录ID',
NUMBERRRPLATE VARCHAR(32) comment '车牌号码',
constraint PK_T_VEHICLE primary key (VEHICLEID)
)
comment '车辆资料数据';
constraint PK_T_VEHICLE primary key (VEHICLEID)
用了这些天的mysql,感觉很不爽,我主业是做Oracle的,不知道有没有人比较过Oracle和mysql。过几天再结贴。