1

我的问题是通过查看光标可以知道一个字段是表的主键。或者我们如何知道哪个字段是主键?

我想写一个这样的课。所以我必须以编程方式学习它

public class BO {

private HashMap<String, Object> data;
private String primaryKey="";


public BO() {
    data=new HashMap<String, Object>();
}

public String getUpdateQuery() {
    return null;
}

public String getInsertQusery() {
    return null;
}

public String getPrimaryKey() {
    return primaryKey;
}

public void setPrimaryKey(String primaryKey) {
    this.primaryKey = primaryKey;
}

public int getLogicalReference() {
    return logicalReference;
}

public void loadDataFromCursor(Cursor cur){
    String[] fields=cur.getColumnNames();
    for(int i=0;i<fields.length;i++){
        switch (cur.getType(i)) {
        case Cursor.FIELD_TYPE_INTEGER:
            data.put(fields[i], cur.getInt(i));
            break;

        default:
            break;
        }
    }
}

public void setLogicalReference(int logicalReference) {
    this.logicalReference = logicalReference;
}

}

4

2 回答 2

0

就像CL一样。在他的评论中说,我相信光标不持有这些信息。列是否持有主键与表结构有关,与表的内容不同。游标用于访问数据,而不是提供有关表结构的信息。

此外,Android 中的 Cursor 接口不一定与 SQLiteDatabase 相关,因此您应该无法从中获取此类信息。

但是,我想不出任何真正有用的好用例。也许是某种牵强附会的代码通用性;无论如何,你很有可能应该重新考虑你的设计(如果你真的认为它是正确的,或者解释它;在那种情况下,我很好奇!)

于 2013-05-23T08:49:25.597 回答
0

这是一个使用 Python 和 Mysql 的示例。

pkey = cursor.execute("SHOW KEYS FROM " + tablename + " WHERE Key_name = 'PRIMARY'")

和用例:

Query =  "INSERT INTO table " + str(tuple(table[0].keys()))
Query += "\nVALUES\n"
Query += str(tuple(table[0].values()))
Query += "\nON DUPLICATE KEY UPDATE\n"
for key in table[0].keys():
   if not key in pkey:
       Query += key + " = VALUES(" + key + "),\n"
Query = Query.rstrip(",")
cursor.execute(Query)

结果字符串将插入或更新表。如果您尝试将主键推送到表中,则会引发 Duplicate Primary 错误。我的程序正在解析 JSON 文件的目录并将它们作为 API 检索过程的一部分导入数据库。我从 3 个不同的 API 中提取数据,并希望保持代码通用,以便我可以重用它。

我对 SQLLite 不太熟悉,但是您可以通过使用表明它是主键的东西来命名您的主键:例如 pk_id 然后只解析字段的名称来查找它是否可以为您执行此操作包含 pk。

于 2019-10-06T19:26:54.207 回答