2010-08-31 61 views
0

使用记事本教程并提出问题。当它使用字段rowid,title和body构建数据库时 - 所有这三个都是私有静态最终字符串。但是当像fetchnote()这样的方法运行时,它使用一个很长的id来获取音符。如果rowid是一个字符串,该方法如何获得该ID?我想稍微修改一下这个教程并让一个活动调用一个listactivity。列表活动将显示数据库中的所有内容,然后,当用户单击某个项目时,我想将该项目复制到新数据库中,并将行标识发送回调用活动。但我不知道如何让它将条目复制到新数据库中,因为本教程使用行ID进行调整,并且我的新数据库将为空。那有意义吗?我对此很陌生。关于记事本教程的问题

回答

1

我觉得public static final Strings你谈论这些是:

public class NotesDbAdapter { 
    public static final String KEY_TITLE = "title"; 
    public static final String KEY_BODY = "body"; 
    public static final String KEY_ROWID = "_id"; 
    ... 
} 

如果是这样,那么这些列名。列名称是字符串,而不是这些列中的值。如果你看得更深一点,你会看到:

private static final String DATABASE_CREATE = 
     "create table notes (_id integer primary key autoincrement, " 
     + "title text not null, body text not null);"; 

这是如何创建数据库。正如你所看到的那样,“_id”列的类型是“整数”,我猜是和long一样的(或至少兼容)。

(编辑)

下应使您能够将附注内容复制出来的原始表并将其插入到另一个。

mCursor = mDbHelper.fetchNote(rowId); 
    title = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.KEY_TITLE)); 
    body = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.KEY_BODY)); 

    // I'm using mDbHelper2 here to indicate that you're inserting it into 
    // a different table. 
    mDbHelper2.createNote(title, body); 

    // And if you want to remove it from the original table as well: 
    mDbHelper.deleteNote(rowId); 

    // I'm guessing you'd have to run this to square up all the rows in the display: 
    fillData(); 
+0

那么,我将如何去获取当前的数据库条目并将其复制到新的数据库中。我可以通过点击的rowId获取当前条目。我如何复制条目并将rowid更新为它应该包含的内容,而不是被点击的原始条目的rowid - 这就是我被卡住的地方。我无法让副本工作,然后将新的数据库rowid传递回调用活动。 – Will 2010-08-31 20:12:13

+0

NotesDbAdapter类具有一个fetchNote()函数,该函数接受一个rowId并返回一个指针,该指针指向数据库中具有该rowId的条目。然后,您可以获取数据字段(在本例中为标题和正文),并使用相同的值在新表中创建一个新条目。 – onlynone 2010-09-03 17:31:49

0

您可以使用与第一个列相同的列来设置新的数据库,但在id列上没有自动递增参数。然后,您只需添加一个新的条目,并使用与另一条相同的详细信息。

+0

因此,如果我建立了一个新的数据库,我会设置它与原始相同的列减去rowid。那么我将如何处理数据库呢? 现在,ListActivity打开并显示数据库条目。然后我有一个OnListItemClick方法,它接受被单击的条目的行ID - >然后我想将该条目复制到新的数据库中(通过记事本CreateNote方法修改以适合我的需要并减去rowid?)我不是确定如何去设置。 – Will 2010-08-31 18:27:41