Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 向SQL lite删除函数添加AND语句-崩溃应用程序_Sqlite_Android Studio - Fatal编程技术网

Sqlite 向SQL lite删除函数添加AND语句-崩溃应用程序

Sqlite 向SQL lite删除函数添加AND语句-崩溃应用程序,sqlite,android-studio,Sqlite,Android Studio,出于明显的原因,我正试图删除输入名字和姓氏的记录。我的尝试如下(单击“我的删除侦听器”): 我收到的错误在第72行,这是光标 p> >你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除< /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号: String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getT

出于明显的原因,我正试图删除输入名字和姓氏的记录。我的尝试如下(单击“我的删除侦听器”):

我收到的错误在第72行,这是光标


<> p> >你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除< /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号:

String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getText();
sql += "' AND lname = '" + lname.getText() + "'";
Cursor c = db.rawQuery(sql, null);

<>你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除> /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号:

String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getText();
sql += "' AND lname = '" + lname.getText() + "'";
Cursor c = db.rawQuery(sql, null);

关于评论:-

对准备好的陈述不太确定,但不介意学习 如果您想为其中一个提供代码,请在此上下文中使用大约一个

下面是对代码的直接改编,它将使用
rawQuery
execSQL
方法转换为准备语句的
query
delete
方便方法

代码还修复了一个可能会让您困惑甚至是实际问题的问题,即您需要使用
toString
方法(如您之前所做的)来获取编辑文本中的数据

    String whereclause = "fname =? AND lname + =?"; //<<<< Where statement with ?'s for arguments
    String[] whereargs = new String[]{
            fname.getText().toString(), // First arg for first ?
            lname.getText().toString()  // Second arg for second ?
    };
    
    Cursor c = db.query(
            "customer", //<<<< table name
            null, //<<<< equates to * (all columns)
            whereclause, //<<<< the WHERE clause (less WHERE keyword)
            whereargs, //<<<< the argumnets to replace the ?'s (will be escaped/enclosed in quotes for you)
            null,
            null,
            null
    );

    //<<<<< REPLACED Cursor c = db.rawQuery("SELECT * FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''", null);
    if (c.moveToFirst()) {
        db.delete(
                "customer",
                whereclause,
                whereargs
        );
        //<<<<< REPLACED db.execSQL("DELETE FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''");
        showMessage("Success", "Record Deleted");
    } else {
        showMessage("Error", "Invalid First and Last Name");
    }
您可能希望考虑以下信息以获取更多信息:-

    • 注意,有4种查询方法(另外还有其他方便的方法,如
      insert
      update

关于评论:-

对准备好的陈述不太确定,但不介意学习 如果您想为其中一个提供代码,请在此上下文中使用大约一个

下面是对代码的直接改编,它将使用
rawQuery
execSQL
方法转换为准备语句的
query
delete
方便方法

代码还修复了一个可能会让您困惑甚至是实际问题的问题,即您需要使用
toString
方法(如您之前所做的)来获取编辑文本中的数据

    String whereclause = "fname =? AND lname + =?"; //<<<< Where statement with ?'s for arguments
    String[] whereargs = new String[]{
            fname.getText().toString(), // First arg for first ?
            lname.getText().toString()  // Second arg for second ?
    };
    
    Cursor c = db.query(
            "customer", //<<<< table name
            null, //<<<< equates to * (all columns)
            whereclause, //<<<< the WHERE clause (less WHERE keyword)
            whereargs, //<<<< the argumnets to replace the ?'s (will be escaped/enclosed in quotes for you)
            null,
            null,
            null
    );

    //<<<<< REPLACED Cursor c = db.rawQuery("SELECT * FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''", null);
    if (c.moveToFirst()) {
        db.delete(
                "customer",
                whereclause,
                whereargs
        );
        //<<<<< REPLACED db.execSQL("DELETE FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''");
        showMessage("Success", "Record Deleted");
    } else {
        showMessage("Error", "Invalid First and Last Name");
    }
您可能希望考虑以下信息以获取更多信息:-

    • 注意,有4种查询方法(另外还有其他方便的方法,如
      insert
      update

Ahhh,您对单一报价的看法是正确的。那个小家伙偷偷溜进去;非常感谢。事实上,在我看到你的评论之前,我只是注意到了报价差异!我在Android Studio中工作,在一个关于SQLite的非常基本的类中,所以对准备好的语句不太确定,但是如果您想为一个语句提供代码,我不知道您是如何连接到SQLite的,所以我不能推荐一个。虽然我做了一些Android的工作,但我从来没有在Android上使用过SQLite。啊,你说得对。那个小家伙偷偷溜进去;非常感谢。事实上,在我看到你的评论之前,我只是注意到了报价差异!我在Android Studio中工作,在一个关于SQLite的非常基本的类中,所以对准备好的语句不太确定,但是如果您想为一个语句提供代码,我不知道您是如何连接到SQLite的,所以我不能推荐一个。虽然我做了一些Android的工作,但我从未将SQLite与Android一起使用过。