即時通訊有一個輕微的問題,我的SQL查詢不工作,因爲它不斷給我這個錯誤,它說,預期;,即使我已經把一個半科爾蘭在那裏。即時通訊相當新的Java,所以任何幫助將被認定。SQL查詢預期';'
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();
}
}
您應該考慮使用'PreparedStatement'而不是在字符串中創建整個查詢 – Dazak
首先:*使用參數化查詢*!您的字段中可能有一些結束引號導致查詢中斷。使用參數化查詢可以防止出現問題,同時防止SQL注入(您的代碼可以*開放*)。其次:不要將密碼作爲普通文本存儲。 – Siyual
什麼是異常消息/堆棧跟蹤?另外,'sql'開放給SQL注入攻擊 - 考慮使用'PreparedStatement'。 –