0

我想看看我的表中是否有东西更新它,如果没有插入一行。所以基本上我的桌子上总是有一排。

   public void createOrupdate(long id,String x, String y, String angle){
            String[] columns= new String[]{KEY_ROWID, KEY_X, KEY_Y, KEY_ANGLE};
            Cursor c= ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
            ContentValues editCon = new ContentValues();

            if (c!=null){
                editCon.put(KEY_X, x);
                editCon.put(KEY_Y, y);
                editCon.put(KEY_ANGLE, angle);
                ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + "=?", new String[]{String.valueOf(id)});
            }
            else{
                editCon.put(KEY_X, x);
                editCon.put(KEY_Y, y);
                editCon.put(KEY_ANGLE, angle);
                ourDatabase.insert(DATABASE_TABLE, null, editCon);
            }

        }

        public String getData() {
            // TODO Auto-generated method stub
            String[] columns= new String[]{KEY_ROWID, KEY_X, KEY_Y, KEY_ANGLE};
            Cursor c= ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
            String result= "";
            int iRow= c.getColumnIndex(KEY_ROWID);
            int iX= c.getColumnIndex(KEY_X);
            int iY= c.getColumnIndex(KEY_Y);
            int iAngle= c.getColumnIndex(KEY_ANGLE);
            int i= 0;

            for( c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
                result= result+ c.getString(iRow)+ " "+ c.getString(iX)+ " " +c.getString(iY)+ " "+ c.getString(iAngle)+"\n";

            }
            return result;
        }

但是当我entry.createOrupdate(1, Double.toString(db1), Double.toString(db2), Double.toString(db3));在我的代码中使用时,我的表中没有任何内容,也没有异常,也没有。当我单独使用更新或插入时,它可以工作..有什么问题?

4

1 回答 1

0

检查c!=null是不够的。即使查询结果为空,游标也不能为空。c.getCount()这意味着您需要通过使用并检查是否返回0或来获取行数1

PS:这for( c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){是一个非常丑陋的循环使用。您应该将其更改为类似while(c.moveToNext()).

moveToNext()将与moveToFirst()新创建的游标对象相同。

于 2013-04-01T14:49:41.357 回答