【问题标题】:Can't save or select the values to/from SQLITE无法从 SQLITE 保存或选择值
【发布时间】:2016-12-09 03:48:43
【问题描述】:

更新:我已经解决了旧问题并找到了新问题。它说我的光标位于第 0 行和 col -1 上,因此我的程序崩溃了。

我正在编写一个消息传递应用程序,我使用 SQLite 存储消息,但是当我尝试选择它们时,我总是得到一个空集。这是相关的类和方法。

    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;
        }

}

当我发送消息时,我使用 addNewMessage(Message message) 方法将消息的字符串内容记录到我的数据库中。这是消息的构造函数。

public Messages(String jid, String message){
      this._message=message;
      this._jid=jid;
  }

我很确定在将它们添加到 db 之前我有有效的 jid 和消息值(它们不为空,我测试过)。当我尝试使用 displayMessage 方法显示它时,我认为我得到的只是空(程序不会崩溃但没有给我一个字符串值)

【问题讨论】:

  • 尝试删除+ " WHERE 1",这不仅完全没用,而且有潜在危险

标签: android sqlite android-sqlite


【解决方案1】:

可能是您的插入不成功。当您执行 db.insert() 时,它将返回该行的 long 值。如果值 > 0,则数据插入成功,如果返回 -1,则不插入。请检查返回值。下面是示例

long result =db.insert(TABLE_MESSAGES,null,values);

【讨论】:

  • 它添加正确。问题似乎出在光标中,我得到类似你无法读取第 0 行 col -1 的信息
  • 你能告诉我为什么你的查询中有 WHERE 1 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2018-11-28
  • 2019-07-03
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多