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解决了我的问题?
答案 0 :(得分:1)
您有多个错误,并且您也很容易进行SQL注入。
您必须使用预准备语句,或者必须在字符串中添加引号并转义字符串所具有的引号,例如,在代码中:
database.delete("TABELLE", "UHRZEIT="+Zeit +"AND DATUM="+Datum+"AND ORT="+Ort,null);
这个:DATUM="+Datum+"AND
编码错误,Datum
和AND
之间没有空格,所以,如果数据等于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
)