为什么以下sql-statement不能与JDBC一起使用?

use*_*736 0 java sql jdbc

我正在用java编写基本的数据库管理系统.当用户提交他的用户名和密码时,程序将在数据库中搜索提交的数据是否正确:

    result = stat.executeUpdate("SELECT username,password FROM DB" + "WHERE (username = '"+loginusr.getText()+"',password = '"+loginpwd.getText()+"')");
Run Code Online (Sandbox Code Playgroud)

显然,=符号附近有一个错误.有人可以帮忙解决这个问题吗?

提前致谢

T.J*_*der 5

那里有几个问题.

首先,你需要一个空格WHERE:

result = stat.executeUpdate("SELECT username,password FROM DB" + "WHERE (username = '"+loginusr.getText()+"',password = '"+loginpwd.getText()+"')");
// Here ---------------------------------------------------------^
Run Code Online (Sandbox Code Playgroud)

但更根本的问题是你已经将代码扩展到SQL注入攻击和失败.使用PreparedStatement,不要连接字符串以放入参数.这里有一个很好的说明原因:

在此输入图像描述

来自:http://xkcd.com/327/

最后:将密码存储在数据库中并不是最佳做法.相反,通常您存储密码的加密哈希值,而不是密码本身(例如,SHA-256是一种哈希技术).然后,当用户进行身份验证时,您将他们提供给您的密码作为密码进行哈希,并将其与您存储的哈希值进行比较.这样,无法从数据库中检索密码.