O_Casper_ne 2013-09-29 05:40 采纳率: 7.7%
浏览 923

当 string 中包含“-”时,不能删除 sqlite 中的指定行

在下面的 listview 中显示名字和号码,这些数据都是从数据库中获取。当我删除比如数字区域是 "123456"时,能正常运行。但是问题是不能删除一些 list items ,比如它的数字区域是 "888-888-00"。
我使用的代码 :
DatabaseHelpher.java

private static final String KEY_NAME = "name";
private static final String KEY_NUMBER = "number";

public void deleteContacts(String name, String number){
    //Raw Query wont work for Deletion
    db = this.getWritableDatabase();
    System.out.println("deleted number: "+number+"name: "+name);
    String deleteQuery = "Delete from "+CONTACTS_TABLE_NAME+" where "+KEY_NUMBER+" = "+number;
    //db.rawQuery("Delete from "+CONTACTS_TABLE_NAME+" where "+KEY_NUMBER+" = "+number, null);
    db.execSQL(deleteQuery);
    db.close();
}

MainActivity.java
在 oncreate() method 方法中包括:

selectedListView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            final HashMap<String, String> toDelete = (HashMap<String, String>) selectedListView.getItemAtPosition(position);

            AlertDialog.Builder deleteDialog = new AlertDialog.Builder(MainActivity.this);
            deleteDialog.setTitle("Confirm Delete...");
            deleteDialog.setMessage("Are you sure you want delete this '"+toDelete.get("name")+"' Contact?");

            deleteDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {

                    dataBaseHelpher.deleteContacts(toDelete.get("name"), toDelete.get("number"));
                    dialog.dismiss();
                    updateList();
                }
            });
            deleteDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                }
            });
            deleteDialog.show();
        }
    });
  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-25 17:04
    关注

    该回答引用ChatGPT

    问题可能出现在 SQL 查询语句中。在 deleteContacts() 方法中,您正在使用以下语句:

    String deleteQuery = "Delete from "+CONTACTS_TABLE_NAME+" where "+KEY_NUMBER+" = "+number;
    

    如果 number 值包含字符(如 “-”),则此语句将会出错。为了解决这个问题,您需要将 number 值用引号括起来,以使 SQL 引擎将其识别为字符串。修改上述代码如下:

    String deleteQuery = "Delete from "+CONTACTS_TABLE_NAME+" where "+KEY_NUMBER+" = '"+number+"'";
    

    这将确保您的 deleteQuery 语句可以正确地删除包含字符的电话号码。


    请注意,这里只是一个可能的解决方案。如果这个修改没有解决您的问题,那么问题可能出现在其他地方。

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)