Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite自动增量不工作_Android_Database_Sqlite_Auto Increment - Fatal编程技术网

Android SQLite自动增量不工作

Android SQLite自动增量不工作,android,database,sqlite,auto-increment,Android,Database,Sqlite,Auto Increment,好吧,这不是垃圾邮件,应该很简单,我不知道为什么它不起作用 这是我的代码: gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null); gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY, Name VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore

好吧,这不是垃圾邮件,应该很简单,我不知道为什么它不起作用 这是我的代码:

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null);
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY, Name
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));");

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore ) VALUES ( NULL, 'TAWLA',2,0,0 );");

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore ) VALUES ( NULL, 'DOMANA',4,0,0 );");


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null);
c.moveToFirst();
while (c.isAfterLast() == false) {
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("ID"))));
c.moveToNext();
}

这个怎么了?日志显示所有记录的0,因为您没有将其设置为自动递增。主键是不够的

CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY AUTOINCREMENT, Name VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));

您想告诉它列是自动递增的

ID整数主键自动增量不为空

相反。

SQLite表的主键称为_id。它是自动递增的,您不应该尝试向其中插入值

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null);
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (_id INTEGER PRIMARY KEY, Name
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));");

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore ) VALUES ('TAWLA',2,0,0 );");

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore ) VALUES ('DOMANA',4,0,0 );");


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null);
c.moveToFirst();
while (c.isAfterLast() == false) {
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("_id"))));
c.moveToNext();
}
c.getColumnIndex(“ID”)
获取列的索引,该列的ID为0索引列,名称为1等

你想要

c.getInt(c.getColumnIndex(“ID”))
您可以看到 示例 克瑞泰欧表

  CREATE TABLE salespeople (
  id INTEGER PRIMARY KEY,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  commission_rate REAL NOT NULL
);
插入数据

 INSERT INTO salespeople VALUES (null, 'Fred', 'Flinstone', 10.0);
---或---


对我起作用的是将我的创建类型从INT重命名为INTEGER,它开始工作

由此:

CREATE TABLE IF NOT EXISTS foo (id INT PRIMARY KEY, bar INT)
为此:

CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY, bar INT)

自动增量工作。你只需要实际使用它。你在光标值之间循环的方式太复杂了。看,我确实设置了自动增量,但不起作用,然后我读到主键不止一个,我写的还不够。您需要主键和自动递增。@Gustek,sqlite为使用主键指定的字段假设自动递增根据sqlite文档,PK足以获得唯一的id,通常它们是单调的(除非您自己设置了一些奇怪的id)就像在代码中,复制它时是我的错,它不起作用。这回答了我在代码中遇到的一个问题。谢谢它不起作用,但无论如何还是要感谢你,诀窍在于将ID重命名为_ID,当你使用integer主键时,不需要自动递增实际上列名不需要命名为“_ID”。你可能是对的,但你是在评论我8年前给出的答案。为什么接受这个答案?
CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY, bar INT)