java - 在ANDROID SQLite中,是否可以在不将其设置为主键的情况下进行自动增量

标签 java sqlite

我在 Android Sqlite 中创建表时尝试使用 INTEGER AUTOINCRMENT。但它显示错误。 但在提供 INTEGER PRIMARY KEY AUTOINCRMENT 时它工作得很好。

我的要求是,带有 AUTOINCRMENT 的列不应该是主键。

db.execSQL("CREATE TABLE " + Table_KOT_ITEMS_TEMP + "(" + col_Item_Name
                + " varchar(40) NOT NULL," + col_Ref_No
                + " int(11) NOT NULL DEFAULT '0'," + col_Table_No
                + " varchar(6) NOT NULL DEFAULT '0'," + col_Kot_No
                + " int(11) NOT NULL DEFAULT '0'," + col_Main_Item_Code
                + " varchar(10) NOT NULL," + col_Item_Type
                + " varchar(10) NOT NULL," + col_Item_Amount
                + " decimal(10,2) DEFAULT '0.00'," + col_Item_Qty
                + " decimal(9,3) NOT NULL DEFAULT '0.000'," + col_No_Of_Persons
                + " varchar(6) NOT NULL," + col_Dum_Unique
                + " varchar(25) NOT NULL," + col_CheckBox
                + " char(5) NOT NULL," + col_Item_Auto_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT)");

最佳答案

不直接。但您可以创建一个触发器来执行此操作。

 -- Create table
 CREATE TABLE testtbl (
     id INTEGER PRIMARY KEY,
     autoincr DEFAULT NULL,
     otherrow TEXT -- and maybe more
 );
 -- Create helper table
 CREATE TABLE sequence_helper (
     name TEXT PRIMARY KEY COLLATE NOCASE,
     seq INTEGER DEFAULT 1
 );
 -- Fill in the starting number
 INSERT INTO sequence_helper VALUES ('testtbl', 1);
 -- Create the trigger
 CREATE TRIGGER autoincr_testtbl AFTER INSERT ON testtbl FOR EACH ROW BEGIN
     UPDATE testtbl SET 
         autoincr = (SELECT seq FROM sequence_helper WHERE name = 'testtbl')
         WHERE rowid = new.rowid;
     UPDATE sequence_helper SET seq = seq+1 WHERE name = 'testtbl';
 END;

您可能可以通过检查 autoincr 列是否为 NULL 来改进这一点,但您应该了解基本概念。

关于java - 在ANDROID SQLite中,是否可以在不将其设置为主键的情况下进行自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609699/

相关文章:

java - 在java中的类之间共享更新数据的最佳方式

java - 如何设置 Android ActionBarCompat 标题文本的样式

java - 破解编码面试第五版,9.10

sql - 从 SQLITE 数据库中选择唯一的月份和年份

sqlite - sqlite中是否有任何类型的拦截器实现

iphone - 核心数据错误是指自反多对多关系的核心数据属性不存在

java - 使用eclipse将.xml文件转换为java中的.json文件?

c++ - Qt & Sqlite 向数据库中插入数据

iphone - 我的 iPhone 项目无法获取超过 5 行的 sqlite 表?

java - 在我停止执行 cURL 命令的 java 程序之前,cURL -o 命令不会输出到文件