0

嘿,伙计们,我的数据库有问题。我在 textview 中显示我的数据库,如下所示:

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

onclick 我通过以下方式获取文本:

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:公共无效findedel(字符串pZeit,字符串pDatum,字符串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 有解决我的问题的方法吗?

4

1 回答 1

1

你有多个错误,而且你很容易发生 SQL 注入。

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

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

this:DATUM="+Datum+"AND编码错误,和之间没有空格DatumAND如果 datum 等于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-查询.html

祝你好运 ;)

而且,在 Java 中,所有变量名都必须以小写开头(而不是String Datumuse String datum

于 2013-07-06T20:53:22.797 回答