无法从java正确构建sql查询的框架
我正试图通过postgresql数据库从我的应用程序中查询数据。我想要实现的是来自“用户”,其中“用户名”=“stackoverflow” 如果此查询是在SQl编辑器中编写并运行的,则会给出预期的结果 因此,我尝试以相同的格式发送查询,如下所示无法从java正确构建sql查询的框架,sql,string,hibernate,postgresql,double-quotes,Sql,String,Hibernate,Postgresql,Double Quotes,我正试图通过postgresql数据库从我的应用程序中查询数据。我想要实现的是来自“用户”,其中“用户名”=“stackoverflow” 如果此查询是在SQl编辑器中编写并运行的,则会给出预期的结果 因此,我尝试以相同的格式发送查询,如下所示 String SQL\u QUERY=“from”+“\”用户\+“where” +“用户名”+“=”+“” +getParameter(“用户名”)+“” 当我运行此操作时,会出现以下错误: 意外字符:“”[来自用户名=user1的“用户”] 如果我删
String SQL\u QUERY=“from”+“\”用户\+“where”
+“用户名”+“=”+“”
+getParameter(“用户名”)+“”代码>
当我运行此操作时,会出现以下错误:
意外字符:“”[来自用户名=user1的“用户”]
如果我删除双引号,它将不起作用,说名为users的表不存在。
走出僵局的方法是什么?我错在哪里
谢谢。查询的SELECT
子句在哪里?它应该是这样的:
String SQL\u QUERY=“SELECT*FROM Username=”+request.getParameter(“Username”)+“;
或者像这样:
String SQL\u QUERY=“选择用户名=”+请求.getParameter(“用户名”)+”;
下面是一个非常类似的示例,它使用PreparedStatement来避免SQL注入安全攻击:这应该是您想要的:
String username = request.getParameter("username");
String SQL_QUERY = "SELECT * FROM \"Users\" WHERE \"Username\" ='" + username + "'";
你可以通过电话查一下
System.out.println(SQL_QUERY);
哪张照片
SELECT * FROM "Users" WHERE "Username" ='foo'
注意/危险:此语句将解决PostgreSQL混合大小写表名和列名的问题。但是以这种方式为查询提供用户名
的值会使您容易受到最简单的攻击。请改用PreparedStatement
并编写
String SQL_QUERY = "SELECT * FROM \"Users\" WHERE \"Username\" = ?";
遵循Postgresql语法最终有助于找到解决方案。将所有列名改为小大写,然后尝试,解决了大部分问题。多亏了a.H
String SQL_QUERY = "FROM Users WHERE username ='" + username + "'";
Query query = objSession.createQuery(SQL_QUERY);
List list = query.list();
for (Iterator it = list.iterator(); it.hasNext();) {
Users objUsers = (Users) it.next();
System.out.println("Username: " + objUsers.userName);
System.out.println("Password: " + objUsers.password);
System.out.println("Name: " + objUsers.name);
}
它不是强制性的。它可以在没有选择*的情况下被框接,即使指定所有列而不是*也没有帮助。当我按照你的建议框接wuery时遇到的错误:::严重:错误:关系“用户”不存在位置:126无法执行查询如果我给“用户”双引号,那么我会得到错误::意外字符:“'[来自“用户”其中Username='user1']。我对如何继续执行此查询感到困惑。使用createNativeQuery()
而不是createQuery()
修复了meError:SQL\u query-->从“用户”中选择*,其中“用户名”='user1'Feb 12,2012年2:11:46 AM org.hibernate.hql.ast.ErrorCounter报告错误严重:**错误:第1:8行:意外标记:*意外字符:''''''.[从“用户”中选择*,其中“用户名”='user1']而不选择*,错误:SQL_查询-->从“用户”中选择,其中“用户名”='user1'意外字符:'''.[从“用户”中选择,其中“用户名”='user1']hibernate
部分告诉我,您没有使用SQL。这也可以解释缺少的SELECT…
部分。对吗?我使用的是HSQL。Hibernate SQLHSQL不是SQL,它被翻译成SQL并有自己的语法。所以您是否有任何映射文件(*.hbm.xml
)或使用任何注释进行映射?如果是这样的话,请通过显示问题并将Hibernate正式引入游戏来编辑您的问题。