我在C(mysql)和我的代码的某处写了一个linux数据库应用程序,我需要执行一些插入语句。假设(出于任何原因)某些插入在此过程中失败。有没有简单的方法回滚?或者唯一的方法是保持插入语句的轨道。需要关于多个数据库插入操作的建议
谢谢
的方式,简化的代码和支持结构如下:
#include <my_global.h>
#include <mysql.h>
#define MAX_RECORDS_FIELD_SIZE 150
#define MAX_RECORDS_VALUES_SIZE 300
typedef struct
{
char connectionString[100];
char username[30];
MYSQL *conn;
}connection;
typedef struct
{
char table_name[30];
int nof_fields;
void * fields;
void * values;
}record;
typedef struct
{
int nof_records;
record *_record;
}records;
//this function can insert value into various records
int insert(connection _connection, records _records,void * _other)
{
int i=0,j=0,m=0,n;
char *str[100],fields[MAX_RECORDS_FIELD_SIZE],values[MAX_RECORDS_VALUES_SIZE];
for(i=0;i<_records.nof_records;i++)
{
m=_records._record[i].nof_fields;
if(m>0) sprintf(fields,"%s",_records._record[i]->fields[0]);
if(m>0) sprintf(fields,"%s",_records._record[i]->values[0]);
for(j=1;j<m;j++)
{
sprintf(fields,"%s,%s",fields,_records._record[i]->fields[j]);
sprintf(values,"%s,%s",fields,_records._record[i]->values[j]);
}
str[i]=calloc(1,sizeof(char)*(strlen(fields)+strlen(values)));
sprintf(str[i],"insert into %s (%s) values(%s)",_records._record[i]->table_name,fields,values);
}
for(i=0;i<_records.nof_records;i++)
{
//do the insertion of str[i]
// **error! what to do? how to roll back?**
//free str[i]
}
}
多德 - 接受你得到了一些答案 - 显示一些爱的人,都有助于你 –
我很抱歉,但我没有得到你!我非常感谢回答我的人。并给出了一些意见。我做错什么了吗?或...是我应该做别的事情,我没有?如果是这样,请让我知道因为我是一个新的计算器用户。 – rahman
你是在谈论投票下来/投票并接受?我刚刚来到现在关于他们:) – rahman