Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从java正确构建sql查询的框架_Sql_String_Hibernate_Postgresql_Double Quotes - Fatal编程技术网

无法从java正确构建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的“用户”] 如果我删

我正试图通过postgresql数据库从我的应用程序中查询数据。我想要实现的是来自“用户”,其中“用户名”=“stackoverflow”

如果此查询是在SQl编辑器中编写并运行的,则会给出预期的结果

因此,我尝试以相同的格式发送查询,如下所示

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正式引入游戏来编辑您的问题。