数据库更新失败

时间:2017-11-27 06:58:22

标签: java android android-sqlite

我对Android应用程序开发很新。在我的应用程序中,我正在尝试将钱添加到钱包中,这是不成功的。 logcat在执行时不会显示任何错误。

我在这里发布myDbAdapter.java(数据库),add_amount.java和activity_add_amount.xml。

add_amount.java如下:

public class Add_Amount extends AppCompatActivity {
    TextView amount;
    String total;
    TextView up;
    private no.nordicsemi.android.nrftoolbox.myDbAdapter mydb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add__amount);
        up=(TextView)findViewById(R.id.textView_wallet);
        amount=(TextView)findViewById(R.id.editText_amount);
        String Amount=(String)amount.getText().toString();
        mydb = new no.nordicsemi.android.nrftoolbox.myDbAdapter(this);
        Cursor rs = mydb.getData(1);
        rs.moveToFirst();
        String wall=rs.getString(rs.getColumnIndex(no.nordicsemi.android.nrftoolbox.myDbAdapter.CONTACTS_COLUMN_WALLET));
        total=Amount+wall;

    }
    public void addamt(View v){
        boolean b=mydb.updateWallet(total,1);
        if(b==true)
            message(getApplicationContext(),"updated");
        else
            message(getApplicationContext(),"not updated");
    }
}

myDbAdapter.java中的updateWallet函数如下:

    public boolean updateWallet(String amount,Integer id)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("wallet",amount);
        db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(id)});
        return true;
    }
}

当我在输入任何金额后点击按钮(添加金额),吐司消息"更新"被展示。但它没有得到更新。

可能的错误在哪里?

2 个答案:

答案 0 :(得分:0)

<强>问题

new String[] { Integer.toString(1)} 。因此,行已更新 WHERE ID=1

您应该传递 DYNAMIC 值,而不是 静态 1 。 您可以传递 email

public boolean updateWallet(String amount,final int _id)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("wallet",amount);
        db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(_id)});
        return true;
    }

答案 1 :(得分:0)

只要没有SQL问题(例如找不到列/表,即引发异常),那么无论是否发生更新都将由您当前拥有的代码返回。

但是,仅仅因为List没有因例外而失败(例如找不到列/表名称),它并不代表更新。

例如;如果你传递了一个不存在 id 的号码,则更新不会发出异常,而是没有任何内容会更新,因为没有要更新的行。

由于update方法将更新的行数作为int返回,您可以通过替换: -

来使用它
update

有以下几点: -

    db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(id)});
    return true;

这样做会将您的问题分成两部分: -

  • 如果返回 0 且Toast为 return (db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(_id)}) > 0); ;然后由于某种原因,更新没有发生(例如,不存在具有指定id的行)。

  • 如果&gt;返回0 ,Toast显示 not updated ;然后问题可能与您使用的任何方法有关,以确定没有任何行似乎已更新。

也许您可以使用可用于向日志显示数据库/表信息的方法found here