SQLite,主键列约束失败



我有问题,而使用expo-sqlite。每当我试图向表插入值(不包括id)时,它总是抛出NOT NULL约束错误。如果我没有弄错,主键将自动auto_increment意味着我不需要为插入新行提供id,这是对的吗?

编辑:试图测试SQL命令在SQLite操场和它的工作。我想这可能与我的语法有关,或者我使用的包有问题(expo-sqlite)

以下是我的代码:

useEffect(() => {
// Create new tables if no database exist
db.transaction((tx) => {
tx.executeSql(
'create table if not exists categories (id integer, name varchar(255), primary key (id));',
[],
() => {},
(tx, err) => {
console.log('this is the error beginning', err);
return true;
}
);
tx.executeSql(
'create table if not exists transactions (id integer, tx_datetime datetime, tx_value varchar(255), note varchar(255), tx_day integer, tx_month integer, tx_year varchar(255), category integer, tx_type integer default 0, primary key (id), foreign key (category) references test_categories (id));',
[],
() => {},
(tx, err) => {
console.log('this is the error beginning two', err);
return true;
}
);
});
}, []);
db.transaction((tx) => {
// tx.executeSql(
//   'insert into transactions (tx_datetime, tx_value, note, tx_day, tx_month, tx_year, tx_type, category) values (?,?,?,?,?,?,?,?);',
//   [
//     data.tx_datetime,
//     data.tx_value,
//     data.note,
//     data.tx_day,
//     data.tx_month,
//     data.tx_year,
//     data.tx_type,
//     data.category,
//   ],
//   () => {},
//   (tx, err) => {
//     console.log('add error', err);
//     return true;
//   }
// );
tx.executeSql(
'insert into categories(name) values("testing");',
[],
() => {},
(tx, err) => {
console.log('errro again', err);
return true;
}
);
});

老实说,我真的不知道怎么解决这个问题。这里是我使用的新代码。也许删除和创建一个新的表,并使用正确的查询,就像@forpas在评论中所说的那样。

db.transaction((tx) => {
tx.executeSql(
'create table if not exists categories (id integer primary key not null , name varchar(255));',
[],
() => {
console.log('this is created');
},
(tx, err) => {
console.log('this is the error beginning', err);
return true;
}
);
tx.executeSql(
'create table if not exists transactions (id integer primary key, tx_datetime datetime, tx_value varchar(255), note varchar(255), tx_day integer, tx_month integer, tx_year varchar(255), category integer, tx_type integer default 0, foreign key (category) references test_categories (id));',
[],
() => {
console.log('table two created');
},
(tx, err) => {
console.log('this is the error beginning two', err);
return true;
}
);
});

这是第二个

tx.executeSql(
'insert into categories (name) values (?)',
['testing'],
() => {},
(tx, err) => {
console.log('errro again', err);
return true;
}
);

最新更新