0

我在将数据插入 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);

怎么了?为什么我不能插入一些数据?

4

0 回答 0