我在将数据插入 sqlite3 数据库时遇到问题。数据库权限设置为 777(仅用于开发环境),目录也是如此。
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sqlite3.h>
#include <string.h>
#define MAXLENGTH 255
int random_add(int base, int mod, int interval)
{
int addend;
struct timeval tv;
gettimeofday(&tv, NULL);
srand((unsigned)tv.tv_usec);
addend = base + rand() % mod + (interval);
return addend;
}
int random_wlvl(int own_lvl)
{
int wlvl = random_add(own_lvl, 7, -3);
return wlvl;
}
int random_wstat(int pstat, int wlvl, int mod, int interval)
{
int wstat = random_add(pstat,11,-5);
while(--wlvl) {
wstat = random_add(wstat,mod,interval);
}
return wstat;
}
int main(void)
{
int own_id = 2;
int error = 0;
sqlite3 *conn;
sqlite3_stmt *res;
error = sqlite3_open("whorl.sl3", &conn);
if (error) {
puts("Cannot open database");
exit(0);
}
char temp[MAXLENGTH];
int i,battle_id;
// Start of Wild Nemesis Selection
int wlvl,whp,watk,wdef; //wild nemesis stats
int wpid = random_add(0,13,1);
int own_lvl,nem_id, own_hp;
sprintf(temp, "select nem_hp,nem_atk,nem_def from nemesis where nem_id = %d union all select own_lvl,nem_id, own_hp from owned where own_id = %d;",wpid,own_id);
error = sqlite3_prepare_v2(conn, temp, MAXLENGTH, &res, NULL);
if (error != SQLITE_OK) {
puts("Did not receive data from nemesis,owned");
exit(0);
}
i = 0;
while (sqlite3_step(res) == SQLITE_ROW) {
if (i == 0){
whp = sqlite3_column_int(res,0);
watk = sqlite3_column_int(res,1);
wdef = sqlite3_column_int(res,2);
} else {
own_lvl = sqlite3_column_int(res,0);
nem_id = sqlite3_column_int(res,1);
own_hp = sqlite3_column_int(res,2);
}
i++;
}
sqlite3_finalize(res);
//randomize wstats
wlvl = random_wlvl(own_lvl);
whp = random_wstat(whp,wlvl,5,6);
watk = random_wstat(watk,wlvl,5,1);
wdef = random_wstat(wdef,wlvl,5,1);
//create battle
sprintf(temp,"insert into battles(own_id,nem_id,own_hp,wpid,wlvl,whp,watk,wdef,wmaxhp) values(%d,%d,%d,%d,%d,%d,%d,%d,%d);",own_id,nem_id,own_hp,wpid,wlvl,whp,watk,wdef,whp);
error = sqlite3_exec(conn,temp,0,0,0);
if (error) {
puts("Cannot insert into battles");
exit(0);
}
sprintf(temp,"select battle_id from battles where own_id = %d;",own_id);
error = sqlite3_prepare_v2(conn,temp,MAXLENGTH,&res,NULL);
if (error != SQLITE_OK) {
puts("Cannot get battle_id");
}
while(sqlite3_step(res) == SQLITE_ROW) {
battle_id = sqlite3_column_int(res,0);
}
sqlite3_finalize(res);
sqlite3_close(conn);
printf("battle_id = %d\n", battle_id);
return 0;
}
编译,然后运行会产生以下结果:
$ ./a.out
Cannot insert into battles
这是我的战斗模式
sqlite> .schema battles
CREATE TABLE battles(battle_id integer primary key autoincrement, own_id integer, pok_id integer, wpid integer, wlvl integer, whp integer, watk integer, wdef integer, wmaxhp integer);
怎么了?为什么我不能插入一些数据?