我在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