2012-07-25 27 views
1

我无法在java中找到以下查询的正确语法,请帮助我。我一直坚持用java中最简单的SQL查询

String st = "SELECT COUNT('"+id+"') FROM '"+selected_table+"' "; 

String st = "SELECT COUNT('"+id+"') FROM '"+selected_table+"'"; 

我认为错误是如何结束的查询......

因为我得到了错误检查对应于你的MySQL服务器版本使用附近的“”客户正确的语法手册“在行1

”当我选择客户表

+6

小心通过连接起源于客户端的字符串来形成查询,因为这会引发一个注入漏洞。 – Hyangelo 2012-07-25 20:55:39

+0

@Hyangelo,+1表示优点,但你认为(考虑到问题质量的含义)OP会明白这一点的重要性? – mre 2012-07-25 20:57:02

+2

@mre好点,但只是觉得我不得不至少指出潜在的危险。 – Hyangelo 2012-07-25 20:58:14

回答

2

你想使用反引号,而不是在你的对象名称的单引号。

String st = "SELECT COUNT(`"+id+"`) FROM `"+selected_table+"` "; 
0

表名应该由刻度标记(`),而不是单引号('

String st = "SELECT COUNT('"+id+"') FROM `"+selected_table+"`"; 
             ^use tick marks ^
0

什么是idselected_table值来包围?什么是发送到数据库的实际查询字符串?

此外,使用字符串连接手动构建像这样的查询是一个好主意。这使得一个bug很容易导致一个严重的安全漏洞,并且试图确保这种方法的安全性要比正确执行要困难得多(而且风险很大)。

+0

这两个值都是字符串 – michaalis 2012-07-25 20:59:23

+0

这就是他们的*类型* - 但是你期望他们的*值是什么? – 2012-07-25 23:39:48

0

从您的查询看来,您正在用单引号括住您的id和selected_table ...例如,SELECT COUNT('ID') FROM 'CUSTOMER'这是错误的。应该是在backtics``或者什么都没有......

+0

好吧,它工作,在FROM子句中,我使用“+ selected_table +”没有“',它的工作原理。非常感谢你们。 – michaalis 2012-07-25 21:05:03