【问题标题】:Too many bind arguments. 5 arguments were provided but the statement needs 3 arguments绑定参数太多。提供了 5 个参数,但该语句需要 3 个参数
【发布时间】:2020-10-25 06:04:40
【问题描述】:

当我尝试更新数据库中的一行时,它说只需要 3 个参数,但你有 5 个。我真的不知道为什么会这样,因为我给了它 3 个参数。这是我的代码:

 public void editdata(int id,String name,String Phonenumber){
        SQLiteDatabase sqLiteDatabase=this.getWritableDatabase();
        ContentValues cv=new ContentValues();
        cv.put(COLIMN_NAME,name);
        cv.put(COLUMN_PHONENUMBER,Phonenumber);
        sqLiteDatabase.update(TB_NAME,cv,"id=?",new String[id]);
    }

这是我的警告对话:

 holder.btn_edit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflater=LayoutInflater.from(context);
                View add_view=inflater.inflate(R.layout.dialog_addcontacts,null);
               AlertDialog alertDialog=new AlertDialog.Builder(context).create();
                alertDialog.setView(add_view);
                final TextInputEditText edt_name=add_view.findViewById(R.id.edt_name);
                final TextInputEditText edt_phonenumber=add_view.findViewById(R.id.edt_number);
                Button btn_add=add_view.findViewById(R.id.btn_add);
                btn_add.setText("change");
                edt_name.setText(phonebookModel.getName());
                edt_phonenumber.setText(phonebookModel.getPhonenumber());
                btn_add.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (!edt_name.getText().toString().isEmpty()&&!edt_phonenumber.getText().toString().isEmpty()) {
                            phoneBookDB.editdata(phonebookModel.getId(),edt_name.getText().toString(), edt_phonenumber.getText().toString());
                            ((Activity)context).finish();
                            context.startActivity(((Activity) context).getIntent());
                        }else {
                            Toast.makeText(context, "please fill in the requested fields", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                alertDialog.show();
            }
        });

【问题讨论】:

    标签: java android sqlite android-studio android-sqlite


    【解决方案1】:

    update() 方法的最后一个参数必须是非null 字符串的数组,与? 占位符一样多:

    sqLiteDatabase.update(TB_NAME,cv,"id=?",new String {String.valueOf(id)});
    

    我猜在你的代码中你传递了5 的 id 和你得到了什么:

    new String[id]
    

    是一个由 5 个null 字符串组成的数组。

    【讨论】:

    • 从技术上讲,new String[id] 是一个字符串数组。当然,他们都是null,并且有id个数,但仍然...... ---错误消息将表明id5
    • 是一个空字符串数组。
    • 但是您的回答认为它“必须是字符串数组”,并且传递给update() 的类型是字符串数组。我要说的是你应该澄清答案的措辞,例如“必须是长度等于? 标记数的字符串数组”,或类似的东西。
    • 字符串数组的值允许为null,所以说“必须非空”是错误的。
    • where子句的参数为id=?,如果传入的值为null则失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多