更新:我解决了旧问题并找到了新问题。它说我的光标位于第0行和第-1行,因此我的程序崩溃了。
我正在编写一个消息传递应用程序,我使用SQLite存储消息但是当我尝试选择它们时,我总是得到一个空集。这是相关的类和方法。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/b"]
}
]
}
}
当我发送消息时,我使用addNewMessage(消息消息)方法将Message的字符串内容记录到我的数据库中。这是消息的构造函数。
public class DBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="messages.db";
public static final String TABLE_MESSAGES="messages";
public static final String COLUMN_MESSAGE="message";
public static final String COLUMN_JID="jid";
public static final String COLUMN_ID="_id";
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query="CREATE TABLE " + TABLE_MESSAGES + "("+ COLUMN_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+ COLUMN_JID+ " TEXT, "+ COLUMN_MESSAGE +" TEXT " +" );";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS "+ TABLE_MESSAGES);
onCreate(sqLiteDatabase);
}
public void addnewMessage(Messages message){
ContentValues values = new ContentValues();
values.put(COLUMN_JID,message.get_jid());
values.put(COLUMN_MESSAGE,message.get_message());
SQLiteDatabase db=getWritableDatabase();
db.insert(TABLE_MESSAGES,null,values);
db.close();
}
public String displayMessage(){
SQLiteDatabase db=getWritableDatabase();
String returnthis="";
String query="SELECT * FROM "+ TABLE_MESSAGES + " WHERE 1" ;
Cursor c=db.rawQuery(query,null);
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getString(c.getColumnIndex("message"))!=null){
returnthis+=c.getString(c.getColumnIndex("message"));
returnthis+="\n";
}
}
db.close();
return returnthis;
}
}
我很确定在将它们添加到db之前我有有效的jid和消息值(它们不是null,我测试过)。当我尝试使用displayMessage方法显示它时,我认为我得到的只是null(程序没有崩溃,但没有给我一个字符串值)
答案 0 :(得分:0)
可能是您的插入不成功。当你执行db.insert()时,它将返回该行的long值。如果值> 0然后成功插入数据,如果返回-1,则不插入数据。请检查返回值。以下是样本
long result =db.insert(TABLE_MESSAGES,null,values);