android数据库按内容删除行

时间:2013-07-06 20:42:06

标签: android sql

Hey Guys我的数据库出了问题。 我在textview中显示我的数据库,如下所示:

 hh:mm dd:MM:yyyy text
 12:14 12.12.2014 awdawdawd
 13:12 13:12:2015 awdaw awdw

通过以下方式获取文字:

StringBuilder ortsplit = new StringBuilder();
String item = ((TextView) view).getText().toString();
            String[] itemsplit = item.split("\\s+");
            String uhrsplit = itemsplit[0].toString();
            String datumsplit = itemsplit[1].toString();
            ortsplit.setLength(0);
            for (int i = 2; i < itemsplit.length; i++) {
                ortsplit.append(" " + itemsplit[i].toString());
            }
            String sortsplit = String.valueOf(ortsplit);
然后打开我的数据库:

datasource.open();
                datasource.findedel(uhrsplit,datumsplit,sortsplit);
                datasource.close();

我的datasource.findedel:     public void findedel(String pZeit,String pDatum,String pOrt){

    database.delete("TABELLE", "UHRZEIT="+Zeit +"AND DATUM="+Datum+"AND ORT="+Ort,null);

}

我没有在行中显示“id”,之前它看起来像:

 1    hh:mm dd:MM:yyyy text
 2    12:14 12.12.2014 awdawdawd
 3    13:12 13:12:2015 awdaw awdw

并且我刚拿了“id”并搜索了我的条目id = id并删除了该行,但是因为我删除了第一行,我想按内容搜索该行。

any1解决了我的问题?

1 个答案:

答案 0 :(得分:1)

您有多个错误,并且您也很容易进行SQL注入。

您必须使用预准备语句,或者必须在字符串中添加引号并转义字符串所具有的引号,例如,在代码中:

database.delete("TABELLE", "UHRZEIT="+Zeit +"AND DATUM="+Datum+"AND ORT="+Ort,null);

这个:DATUM="+Datum+"AND编码错误,DatumAND之间没有空格,所以,如果数据等于test,那么你的字符串将是这样的:DATUM=testAND。这将返回mysql中的语法错误,并且字符串必须引用如下:DATUM='test' AND

引用这种方式的主要问题是如果Datum本身有引号,那么你也会有错误。例如,如果Datum等于te'st,则您的字符串将如下所示:DATUM='te'st' AND。如您所见,您将有3个引号,然后将返回语法错误。

在进一步讨论之前,你必须阅读并理解这一点,因为你最终会得到一些非常混乱的代码,有很多错误和漏洞:http://wangling.me/2009/08/whats-good-about-selectionargs-in-sqlite-queries.html

祝你好运;)

而且,在Java中,所有变量名称必须以小写字母开头(而不是String Datum使用String datum