Java 应为Sql查询“;”

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

我遇到了一个小问题,我的sql查询不起作用,因为它一直给我这个错误,它说预期;,即使我在那里放了一个半项圈。我对java非常陌生,因此任何帮助都会受到欢迎

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();