【问题标题】:insert if not present else update on user's choice android如果不存在则插入,否则更新用户选择的android
【发布时间】:2014-11-30 10:03:54
【问题描述】:

我已经为经典的“我如何插入新记录或更新一个已存在的记录”找到了一些“将成为”解决方案,但我无法让其中任何一个解决用户在 android 中的选择

我有一张如下表: mytable(Name text,Longitude double, Latitude double)

我想要做的是添加一个具有唯一名称的记录。如果名称已经存在,我希望用户选择修改字段或在 android 中忽略它。

谁能告诉我怎么做?

我的插入按钮代码:

public void insert(View v) {
        final String nm = name.getText().toString();
        final String longitude = ln.getText().toString();
        final String latitude = lt.getText().toString();
        // ln.setText("");
        // lt.setText("");
        // insert data into able
        try {
            Cursor c = db.rawQuery("select count(*) from mytable ", null);

            if (c.getCount() > 0) {
                c = db.rawQuery("select (*) from mytable where Name=" + nm, null);
                if (c.getCount() > 0) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);

                    builder.setTitle("Confirm");
                    builder.setMessage("Record Already Exists Want to overwrite?");

                    builder.setPositiveButton("YES",
                            new DialogInterface.OnClickListener() {

                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // Do nothing but close the dialog
                                    ContentValues updatedValues = new ContentValues();
                                    updatedValues.put("Longitude", longitude);
                                    updatedValues.put("Latitude", latitude);
                                    db.update("mytable", updatedValues, "Name="
                                            + nm, null);
                                    Toast.makeText(getApplicationContext(),
                                            "updated", Toast.LENGTH_LONG)
                                            .show();
                                    dialog.dismiss();
                                }

                            });

                    builder.setNegativeButton("NO",
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // Do nothing
                                    dialog.dismiss();
                                }
                            });

                    AlertDialog alert = builder.create();
                    alert.show();
                    // Toast.makeText(this, "values updated successfully.",
                    // Toast.LENGTH_LONG).show();
                    /* record exist */
                } else {
                    db.execSQL("insert into mytable values('" + nm + "','"
                            + longitude + "','" + latitude + "')");
                    /* record not exist */
                    // display Toast
                    Toast.makeText(this, "values inserted successfully.",
                            Toast.LENGTH_LONG).show();
                }
            }
        } catch (Exception e) {
            db.execSQL("insert into mytable values('" + nm + "','" + longitude
                    + "','" + latitude + "')");
            /* record not exist */
            // display Toast
            Toast.makeText(this, "values inserted successfully.",
                    Toast.LENGTH_LONG).show();

        }

    }

当我插入具有相同名称的值时,它会被添加。但是我所做的是当用户输入已经存在的相同名称时,会发出警报来询问用户是要更新还是忽略。 如果他点击是,记录就会更新,如果不是,那么什么也不会发生......

【问题讨论】:

  • 带有queryinsertupdate。究竟是什么问题?
  • 邮政编码你到目前为止所做的事情。
  • @CL。当用户单击插入时,如果数据库有同名记录,则会形成警报以询问用户是否要更新或关闭。
  • @Neo 我已插入代码
  • 看看我在下面发布的查询是否有帮助

标签: java android sqlite development-environment


【解决方案1】:

先查询是否有这样的同名记录:

SELECT * FROM mytable WHERE name='*text*'

在这里,name 是您的用户的输入。然后检查该查询是否返回记录。如果是这样,请向您的用户提供反馈以设置另一个名称或通过更新返回的记录来忽略它。 如果它没有返回记录,您可以将记录插入到您的数据库中。

【讨论】:

    【解决方案2】:

    使用rawQuery 的正确方法是

    c = db.rawQuery("select * from mytable where Name = ?", new String[] { nm });
    

    【讨论】:

    • 谢谢,但如果记录存在,我想根据用户的选择更新数据库。
    • 这很好,但我上面给出的是使用rawQuery 方法的正确语法。整个前提是避免参数的 where 子句的字符串连接。您发送为空的第二个参数背后有一个原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2014-10-23
    • 2013-04-19
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多