我是否必须使用_ID作为SQlite的主键?它是否必须是INT类型?(Android开发者)

8 浏览
0 Comments

我是否必须使用_ID作为SQlite的主键?它是否必须是INT类型?(Android开发者)

这可能是一个愚蠢的问题,但我还没有找到答案。

我想在表中使用一个TEXT列作为主键,并使用自己的唯一名称。

在我的项目中,定义这个的代码片段大致如下:

...blahblah..."CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + "_ID TEXT PRIMARY KEY, "...blahblah..

这样会按照我的意图工作吗?或者也许我需要使用"AS ID"?我只在单个表中看到了_ID作为自增整数的情况。此外,这原本是另一个表中的外键,但自从我设计了数据库后,我读到了更多的信息,我不确定在使用Android和SQLite时这是否真的重要?

非常感谢下面的帖子,但我有点慢,不确定我是否正确应用了信息,你能检查一下吗?

所以,如果我有一个像这样的创建语句:

"CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + " TEXT PRIMARY KEY, " + 
    IN_OUT + " TEXT, " + BUDGET_AMOUNT + " REAL, " + ACTUAL_AMOUNT_SPENT + " REAL, "
    + AMOUNT_STRAYED + " REAL, " + OVERBUDGET_TF + " INTEGER, " + AUTOSPEND_TF + 
    " INTEGER);"

然后有:

db.execSQL("SELECT ID, ID AS CAT_ITEM_ID")

我能够互换使用它们吗?我离正确还差得远吗?哈哈,对不起,我在尽力!

0
0 Comments

在Android开发中,当使用SQLite数据库时,我们经常会遇到一个问题:在表的主键中,是否必须使用名为"_id"的列,并且这个列必须是整数类型。

问题出现的原因是,Android提供的CursorAdapter类在使用数据库表时,要求表中必须包含一个名为"_id"的列,否则CursorAdapter无法正常工作。为了解决这个问题,我们需要在查询数据时,使用别名将主键列的名称修改为"_id"。

解决方法是,在创建表时,将主键列定义为"_id",或者在查询数据时,使用别名将主键列的名称修改为"_id"。具体的代码示例如下:

// 创建表时,将主键列定义为"_id"
String createTableQuery = "CREATE TABLE myTable (_id INTEGER PRIMARY KEY, name TEXT);";
// 查询数据时,使用别名将主键列的名称修改为"_id"
String selectQuery = "SELECT id AS _id, name FROM myTable;";
Cursor cursor = db.rawQuery(selectQuery, null);
// 使用CursorAdapter时,需要确保Cursor中包含"_id"列
String[] from = {"_id", "name"};
int[] to = {R.id.textViewId, R.id.textViewName};
CursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, from, to);

总结一下,为了解决Android开发中使用SQLite数据库时的主键问题,我们需要在表的主键列中使用名为"_id"的列,并且这个列必须是整数类型。如果想要使用其他名称,可以通过使用别名在查询数据时将主键列的名称修改为"_id"。

0
0 Comments

问题的原因是在使用CursorAdapter时,需要在表中有一个名为"_ID"的整数列作为主键。如果不打算使用CursorAdapter,则可以自由选择主键的类型和名称。

解决方法是在表中添加一个整数列"_ID"作为主键,即使不打算使用它,也不会产生影响。可以使用其他列作为条件进行查询。

以下是整理后的

您可以自由选择主键的类型和名称。但是,如果您打算使用CursorAdapter自动显示Cursor查询结果的项,您需要在表中添加一个名为"_ID"的整数列作为主键。

如果您不打算使用CursorAdapter,那么您可以按照自己的需求选择主键的类型和名称。

谢谢!但是我觉得我会需要一个CursorAdapter,所以我必须要有一个整数主键,对吗?好的,谢谢。那么我可以有一个INT类型的"_ID"列,但实际上不使用它,也就是说,我可以通过条件"检索该TEXT列等于"Food"的整个记录吗?无论如何,感谢您的帮助!

0
0 Comments

在SQLite中,_id必须是int类型(在Java中为long类型)。这是因为许多类都默认假设_id是int类型的。因此,不能使用UUID作为主键。

解决方法:

要解决这个问题,可以使用INTEGER类型的_id作为主键。例如,在创建SQLite表时,可以将_id列的类型设置为INTEGER:

CREATE TABLE table_name (

_id INTEGER PRIMARY KEY,

column_name1 data_type1,

column_name2 data_type2,

...

);

这样,_id将会作为主键,并且满足SQLite的要求。

0