2013-07-10 66 views
-1

我想根据用户通过jTextField传递的列动态执行sql语句。如何动态执行sql语句

str=select "+jTextField.getText()+" from table ; 

此声明正常工作的列名称没有空格。 例如:假设我有两列=优先级和请求类型。

这上面的语句完美的作品,如果我输入的优先级,但是当我使用请求类型

和 如果我使用的语句

str=select ["+jTextField.getText()+"] from table ; 

然后请求类型的条目将正常工作,但优先级不会失败。

任何想法来解决这个问题。

+0

什么RDBMS您使用的? – Brad

+1

与您的问题不完全相关,但这里有一个提示:使用'PreparedStatement'来处理这种情况。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

回答

1

您可能需要修剪尾随字段名称/前导空格,否则它应该很好地工作:

str=select ["+jTextField.getText().trim()+"] from table ; 

你肯定Priority的是,表中的右外场的名字吗?

另外请注意,您很容易受到SQL注入攻击。假设你把jTextField如下:

"null] FROM table; DROP TABLE table; --" 

那么结果是

select [null] FROM table; DROP TABLE table; --] from table ;