gpt4 book ai didi

android - 在 SQLite 中获取列的类型

转载 作者:IT王子 更新时间:2023-10-29 06:23:07 27 4
gpt4 key购买 nike

我的伙伴为我的 Android 应用制作了数据库。例如,其中一个表是这样创建的:

CREATE TABLE table1(
id_fields_starring INTEGER PRIMARY KEY AUTOINCREMENT
, fields_descriptor_id INTEGER NOT NULL
, starring_id INTEGER NOT NULL
, form_mandatory INTEGER NOT NULL DEFAULT 1
, form_visible INTEGER NOT NULL DEFAULT 1
, FOREIGN KEY(fields_descriptor_id) REFERENCES pr_fields_descriptor(id_fields_descriptor) ON DELETE CASCADE ON UPDATE CASCADE
, FOREIGN KEY(starring_id) REFERENCES starring(id_starring) ON DELETE CASCADE ON UPDATE CASCADE
)

我需要从表的字段中知道哪些是INTEGER NOT NULL,哪些是INTEGER NOT NULL DEFAULT 1,因为对于第一种情况我必须动态创建一个 EditText,对于第二种情况,我必须创建一个 CheckBox。有什么想法吗?

最佳答案

调用:

PRAGMA table_info(table1);

将转储表信息,例如

cid|name                 |type    |notnull |dflt_value |pk
0 |id_fields_starring |INTEGER |0 | |1
1 |fields_descriptor_id |INTEGER |1 | |0
2 |starring_id |INTEGER |1 | |0
3 |form_mandatory |INTEGER |1 |1 |0
4 |form_visible |INTEGER |1 |1 |0

然后简单地找到游标中带有 notnull=1dflt_value=1 的行


编辑:

要列出定义为 INTEGER NOT NULL DEFAULT 1 的所有列,这会起作用(helper 是您的 SQLiteOpenHelper 实例):

SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA table_info(table1)", null);
try {
int nameIdx = cursor.getColumnIndexOrThrow("name");
int typeIdx = cursor.getColumnIndexOrThrow("type");
int notNullIdx = cursor.getColumnIndexOrThrow("notnull");
int dfltValueIdx = cursor.getColumnIndexOrThrow("dflt_value");
ArrayList<String> integerDefault1NotNull = new ArrayList<String>();
while (cursor.moveToNext()) {
String type = cursor.getString(typeIdx);
if ("INTEGER".equals(type)) {
// Integer column
if (cursor.getInt(notNullIdx) == 1) {
// NOT NULL
String defaultValue = cursor.getString(dfltValueIdx);
if ("1".equals(defaultValue)) {
integerDefault1NotNull.add(cursor.getString(nameIdx));
}
}
}
}
System.out.println("integerDefault1NotNull now contains a list of all columns " +
" defined as INTEGER NOT NULL DEFAULT 1, " + integerDefault1NotNull);
} finally {
cursor.close();
}

关于android - 在 SQLite 中获取列的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com