您好我在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;
接近传递
的语法错误提前感谢您的答案和时间
答案 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();