如何检查表中是否存在行?

时间:2011-02-11 15:22:28

标签: android sql

我正在尝试做什么:ListView活动A,我触摸一个项目,它会打开一个新的listview活动。我从列表A中选择的数据库行中获取主键并使用putExtra。在活动B中,在onCreate中我想检查并查看表B中是否有任何行,其中列TOPIC_CONTENT_TOPIC_ID的值等于表A中putExtra的主键。如果表是空的,或者没有匹配的ID,我想创建一个新行,其中列TOPIC_CONTENT_TOPIC_ID现在等于表A中的主键。这是我的代码。它在db.query();

上崩溃
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.topic_content);

    dbMaker = new DatabaseMaker(this);
    SQLiteDatabase db = dbMaker.getReadableDatabase();

    Intent myIntent = getIntent();
    int topicIDInt = (int) myIntent.getLongExtra("com.spentakapps.ScripturalConcordance.Topics", -1);
    String topicID = Long.toString(myIntent.getLongExtra("com.spentakapps.ScripturalConcordance.Topics", -1));

    String WHERE = DatabaseStructure.TOPICS_CONTENT_TOPIC_ID + " = " + topicID;
    Cursor cur = db.query(DatabaseStructure.TABLE_TOPICS_CONTENT, new String[] {DatabaseStructure.TOPICS_CONTENT_CONTENT},WHERE, null, null, null, null);

    if (cur.getCount() <= 0)
    {
        ContentValues values = new ContentValues();
        values.put(DatabaseStructure.TOPICS_CONTENT_TOPIC_ID, topicIDInt);
        db = dbMaker.getWritableDatabase();
        db.insert(DatabaseStructure.TABLE_TOPICS_CONTENT, null, values);
        db = dbMaker.getReadableDatabase();
        cur = db.query(DatabaseStructure.TABLE_TOPICS_CONTENT, new String[] {DatabaseStructure.TOPICS_CONTENT_TOPIC_ID},WHERE, null, null, null, null);
    }

    View addContentButton = findViewById(R.id.content_button_add);
    addContentButton.setOnClickListener(this);

    //Set up data binding
    SimpleCursorAdapter  adapter = new SimpleCursorAdapter(this,R.layout.topiccontentlineitem,cur, FROM,TO);
    setListAdapter(adapter);

}

1 个答案:

答案 0 :(得分:0)

我对这些问题的建议始终是使用以下方式登录模拟器:

adb shell

然后直接打开sqlite db

# cd /data/data/<your application package>/databases/
# ls
# sqlite3 <your database file>

一旦进入,你应该能够尝试手动运行你的sql以确保它有效:

select id from TABLE_TOPICS_CONTENT where id='someidvalue' limit 1

当你说它在db.query上崩溃时,上面的代码中有两个db.query状态网。我的猜测是,由于您多次呼叫dbMaker.getReadableDatabase();,因此遇到了重大问题。尝试在开始时将其称为runnable,并尝试使用这些来验证您的sql是否有效。如果失败,请附上您的错误日志。