关系"表名" postgresql不存在

时间:2014-08-06 11:38:56

标签: java jdbc

您好我在java中进行查询,我有java和posgres连接驱动程序9.3-1102-jdbc41

这是我的问题:query = "SELECT * FROM" +"\"users\" "+ " where user="+"'"+name+"'"+"and pass =" +"'"+pass+"'";

当我运行它时,会出现此错误:

关系“用户名”不存在

此处和其他网站的可能解决方案是检查报价或大写字母。 但我确定大写字母,这就是我的尝试:

query = "SELECT * FROM" +"\"users\" "+ " where user="+"'"+name+"'"+"and pass =" +"'"+pass+"'";

query = "SELECT * FROM users  where user="+"'"+name+"'"+"and pass =" +"'"+pass+"'";

query = "SELECT * FROM" +"\"sysmar.users\" "+ " where user="+"'"+name+"'"+"and pass =" +"'"+pass+"'";

错误关系用户不存在

"SELECT * FROM users  where user="+name+"and pass =" +pass;

接近传递

的语法错误

提前感谢您的答案和时间

3 个答案:

答案 0 :(得分:1)

尝试:

"SELECT * FROM users  where \"user\" ='"+name+"'and pass ='" +pass+"'";

但它对sql injection有害。请参阅PreparedStatements

答案 1 :(得分:0)

对于PostgreSQL,您不需要在表名周围加上引号,除非它是保留关键字。 Users不是关键字,但user恰好是其中之一。

您的查询很难阅读额外的连接操作和间距问题。也许存在语法错误,您只需要清理它:

q = "SELECT * FROM users WHERE \"user\" = '" + name + "' AND pass = '" + pass + "'";

您希望最终评估的字符串看起来像(例如):

SELECT * FROM users WHERE "user" = 'cory' AND pass = '12345';

但正如其他人所说,你也应该转而使用预备语句。此代码可能容易受到SQL注入攻击。

答案 2 :(得分:0)

你真的不应该用SQL查询连接变量,那么你就容易受到SQL injection的攻击。您最好使用Prepared Statements,这将允许您以更可读和更安全的方式编写查询。

Connection conn = DriverManager.getConnection(...);
String queryString = "SELECT * FROM users WHERE user = ? AND pass = ?";
PreparedStatement query = conn.prepareStatement(queryString);
query.setString(1, name);
query.setString(2, password);
ResultSet result = query.executeQuery();