使用Java中的SQL Server登录
我刚开始研究Java和SQL Server之间的联系。 我在登录数据库中创建了多个帐户。但只有第一条记录会导致成功登录 我的问题是如何让它接受其他帐户? 我相信我的问题在于代码,但我在修复逻辑错误方面很弱。 这是我的密码:使用Java中的SQL Server登录,java,sql,Java,Sql,我刚开始研究Java和SQL Server之间的联系。 我在登录数据库中创建了多个帐户。但只有第一条记录会导致成功登录 我的问题是如何让它接受其他帐户? 我相信我的问题在于代码,但我在修复逻辑错误方面很弱。 这是我的密码: try { if(e.getSouce()==loginButton){ String user = usernameTF.getText().trim(); String pass = passwordTF.getText().tri
try {
if(e.getSouce()==loginButton){
String user = usernameTF.getText().trim();
String pass = passwordTF.getText().trim();
String sqlLogin = "select username ,
pssword
from tblLogin
where username = '"+user+"'
and pssword = '"+pass+"'";
rs = st.executeQuery(sqlLogin);
int count = 0;
while(rs.next()){
count+=1;
}//while
if(count==1){
JOptionPane.showMessageDialog(null, "Login Successful!");
mainFrame.dispose();
firstPage page1 = new firstPage();
}
tblogin
:
create table tblLogin ( username nvarchar(50) NULL, pssword nvarchar(50) NULL )
username password
Jerlon hello
buenconsejo jerlon
jujux jerlon
jujux jerlon
Buenconsejo jerlon
NULL NULL
这是非常糟糕的设计 首先,不要使用+来创建查询。这是一个允许sql注入的错误。使用
PreparedStatement
创建带有用户参数的查询
不要以纯文本形式存储密码。使用散列(例如md5)
对select语句使用限制1(或count(*)
)
不要在结果集时使用。使用if
语句
if(rs.next()) {
}
这是一个sql示例:
select * from tblLogin
where username = ? and password = md5(?)
limit 1
编辑:如果使用用户名和密码的唯一密钥,则使用具有某些名称(或密码)的用户不是问题(逻辑问题) 表中所有用户名都是唯一的,对吗?因此,根据在texbox中键入的用户名,它每次只返回一行。您可以显示一些示例吗?您的代码容易受到SQL注入的攻击。您应该像这样使用PreparedStatement@Sachu?用户名密码Jerlon你好buenconsejo Jerlon jujux Jerlon jujux Jerlon buenconsejo Jerlon空NULL@AfsunKhammadli'创建表tblLogin(用户名nvarchar(50)NULL,单词nvarchar(50)NULL)'我做得对吗?@Juju你有多个用户名为jerlon的用户。.这在登录表中不好。.你应该将用户名设置为唯一的。.有任何网站允许你使用已经在使用的用户名注册吗?我想知道md5(?)和限制1是什么意思。现在,我还创建了一个方法来获取sql语句“public void getQuery(String query){try{con=DriverManager.getConnection”(“jdbc:sqlserver://localhost:1433;databaseName=login_DB;integratedSecurity=true”);st=con.createStatement();st.executeUpdate(query);}//try-catch(异常ee){ee.printStackTrace()//catch}//getQuery()'可以吗?首先,对不起,may的英语很糟糕:(md5是一个函数,它从输入中返回md5哈希值。这通过减少密码被盗的机会来提高安全性,因为没有人可以看到密码(即使是管理员sql server)。limit语句限制结果(在本例中为1)因为只有一个支票账户(这是优化,以及用if
替换while
)。在您的代码中,关键的地方是构建提交给getQuery的查询。要说这是确定的,您必须展示我们是如何创建的。