Java 应为Sql查询“;”
我遇到了一个小问题,我的sql查询不起作用,因为它一直给我这个错误,它说预期;,即使我在那里放了一个半项圈。我对java非常陌生,因此任何帮助都会受到欢迎Java 应为Sql查询“;”,java,sql,ms-access,Java,Sql,Ms Access,我遇到了一个小问题,我的sql查询不起作用,因为它一直给我这个错误,它说预期;,即使我在那里放了一个半项圈。我对java非常陌生,因此任何帮助都会受到欢迎 import javax.swing.*; import java.awt.event.*; import java.sql.*; public class Manager { Connection con; Statement st; ResultSet rs; JFr
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
public class Manager {
Connection con;
Statement st;
ResultSet rs;
JFrame f = new JFrame("User Login");
JLabel U = new JLabel("Username");
JLabel P = new JLabel("Password");
JTextField t = new JTextField(10);
JTextField t1 = new JTextField(10);
JButton b = new JButton("Login");
public Manager()
{
connect();
frame();
}
public void connect()
{
try
{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:db1";
con = DriverManager.getConnection(db);
st = con.createStatement();
}
catch(Exception ex)
{
}
}
public void frame()
{
f.setSize(600,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
p.add(U);
p.add(t);
p.add(P);
p.add(t1);
p.add(b);
f.add(p);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try
{
String User = t.getText().trim();
String Password =t1.getText().trim();
String sql = "select User,Password from Table1 where User = '" + User +"'and Password='"+ Password"'";
rs = st.executeQuery(sql);
int count = 0;
while(rs.next())
{
count = count + 1;
}
if(count == 1)
{
JOptionPane.showMessageDialog(null,"User found, Acces");
}
else if(count > 1)
{
JOptionPane.showMessageDialog(null,"Duplicated User, Access denied");
}
else
{
JOptionPane.showMessageDialog(null,"User Not found");
}
}
catch(Exception ex)
{
}
}
});
}
public static void main(String[] args) {
new Manager();
}
}您只是缺少一个“+”符号 改变 +'和密码='+密码' 到
+'和密码='+密码+' 试着放一个标签;在您的sql字符串中…密码后有点像这样
字符串sql=从表1中选择用户、密码,其中用户=“+User+”和密码=“+Password”+ 尽管没有回答你的问题,但我相信这是值得注意的答案,该死的规则。你所做的每一年都要花掉世界上好几吨的钱,毁掉人们的生活,可能还会杀死很多人。我知道有人因为经济上的损失而自杀 看看你的问题是什么,这实际上可能会为你解决它。奖金/编辑 请在数据库访问中使用u Prepared Statements。如果我的身份被偷了,我的信用卡被爆了,因为你是我的银行雇佣的廉价程序员,那么我会召集一个帮派,我们会来找你 一旦有人意识到你的代码是不安全的,你的整个数据库就会从这个巨大的安全漏洞中崩溃 我会尽量不让它困扰我,如果这得到了一堆反对票;防止这种安全问题是值得的 它就在您正在使用的同一个API中。创建一个PreparedStatement,执行以下操作 然后用
myPreparedStatement.setString(columnUser, user);
myPreparedStatement.setString(columnPass, pass);
myPreparedStatement.executeUpdate();
你的境况会好得多。否则,我保证你的数据库最终会被入侵,你的网络的其他部分也会被入侵,这取决于一切的设置方式
SQL注入是数据库攻击的主要手段。这一个简单的技巧将在你的后黑客尝试帐单中节省99%。你应该考虑使用PraveReDebug,而不是在一个严格的先创建整个查询:使用参数化的查询!您的字段中可能有一些结束引号导致查询中断。使用参数化查询可以避免这一问题,同时也可以防止代码完全开放的SQL注入。第二:不要将密码存储为纯文本。什么是异常消息/堆栈跟踪?此外,SQL对SQL注入攻击是开放的-考虑使用PraveReStaseM.SQL注入、纯文本密码和空catch块。这段代码引发了各种各样的问题。这是一个编译错误,而不是运行时错误,如中所观察到的,这是由于在行的东北部缺少密码+和“”之间的错误造成的。实际上,请稍候。。。您是否将密码存储为纯文本,并且仅在此处批量下载名称/密码对?除我已经提到的其他问题外,这对你们来说将是灾难性的。有些人会称之为简历生成事件,只是知道这件事的人都不会接受这份简历。确保您散列密码并添加一些盐,或者最好使用其他目录服务为您完成这项工作。在保存密码之前,至少要对密码运行一些哈希函数,显然,在进行身份验证时也要对密码运行哈希函数
myPreparedStatement.setString(columnUser, user);
myPreparedStatement.setString(columnPass, pass);
myPreparedStatement.executeUpdate();