2014-07-18 43 views
2

我正在做一個酒店管理項目,其GUI是使用Swings和SQl Server Management Studio,2008來設計的,用於存儲數據。但是我面臨的問題是,我得到一個異常作爲「驅動程序不支持此功能」...我無法解決這個問題...請指教我在哪裏我錯了..預先感謝.. :)java.sql.SQLException:「驅動程序不支持此功能」

我已經創建了2種形式:註冊表單和登錄表單......這是我的註冊表格我在哪裏卡住了...

btnSubmit = new JButton("SUBMIT"); 
    btnSubmit.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     try{ 
      if(textField.getText().equals("") || textField_2.getText().equals("") ||  
      textField_5.getText().equals("") || textField_6.getText().equals("") || 
      textField_7.getText().equals("") || passwordField.getPassword().equals("") 
      || passwordField_1.getPassword().equals("")){ 
        JOptionPane.showMessageDialog(null,"Fields cannot be left 
       empty!!!"); 
       } 
      else{ 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
       Connection con=DriverManager.getConnection("jdbc:odbc:SignUp_DSN"); 
       String firstname=textField.getText(); 
       String lastname=textField_1.getText(); 
       String email_id=textField_2.getText(); 
       String country=textField_5.getText(); 
       String state=textField_6.getText(); 
       String ph_no=textField_7.getText(); 
       char[] password=passwordField.getPassword(); 
       char[] retype_password=passwordField_1.getPassword(); 

      if(!password.equals(retype_password)){ 
        JOptionPane.showMessageDialog(null,"Passwords are not 
        matching.Enter again!!!"); } 


       if(password.length<8 || retype_password.length<8){ 
        JOptionPane.showMessageDialog(null,"Password should be more than 8 
        characters!!!"); 
       } 
      String sql="insert into Sign_Up(`Firstname`,`Lastname`,`Email_id`,`Password`,`Retype_Password`,`Country`,`State`,`Phone_no`) values(?,?,?,?,?,?,?,?)"; 
        PreparedStatement ps=con.prepareStatement(sql); 
        ps.setString(1, firstname); 
        ps.setString(2, lastname); 
        ps.setString(3, email_id); 
        ps.setString(6, country); 
        ps.setString(7, state); 
        ps.setString(8,ph_no); 
        ps.setString(4, new String(password)); 
        ps.setString(5, new String(retype_password)); 
        ResultSet rs=ps.executeQuery(sql); 
         while(rs.next()){ } 
       con.close(); 
        ps.close(); 
        //rs.close(); 
       } 
    }catch(Exception ex){ 

        String str=ex.toString(); 
        JOptionPane.showMessageDialog(null,str); 
      } 
     } 
}); 

,也爲密碼匹配的條件是不工作...我得到迪說明密碼總是不匹配的alogue消息;密碼是否匹配!!!

+3

無關,但:不要使用JDBC/ODBC橋。它一直是越界越慢,並且它在Java 8中不再可用。請改用真正的JDBC驅動程序。 –

回答

4

我想我看到的問題,

PreparedStatement ps=con.prepareStatement(sql); 
ps.setString(1, firstname); 
ps.setString(2, lastname); 
ps.setString(3, email_id); 
ps.setString(6, country); 
ps.setString(7, state); 
ps.setString(8,ph_no); 
ps.setString(4, new String(password)); 
ps.setString(5, new String(retype_password)); 
ResultSet rs=ps.executeQuery(sql); // <-- here. 

您設置您的PreparedStatement查詢和綁定參數,但隨後再次致電查詢綁定當你通過String sqlexecuteQuery()

ResultSet rs=ps.executeQuery(); 

此外,你應該添加一個finally塊來關閉rsps

+0

我試試..然後回到分鐘..thnx。 – user3801050

+0

使用finally得到錯誤.. – user3801050

+0

@ user3801050在try塊外移動變量'conn','rs'和'ps'變量聲明(在try中聲明爲null並賦值,或者使用new [try with資源(http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html))。 –

0

有你一個問題的兩個問題:

  1. 爲什麼沒有密碼校驗工作?這是因爲您無法使用equals比較兩個char - 陣列。數組不會覆蓋equals(),所以它基本上是== -check。使用Arrays.equals(password, retype_password)
  2. 正如艾略特說:你已經在prepareStatement設置你的SQL查詢 - 不executeQuery()

再次通過它還有一些其他的問題,我想指出:

  • 無需存儲passwordretype_password - 它們無論如何都是平等的。
  • 絕對不會在CLEARTEXT中存儲密碼。總是使用合適的散列函數,如鹽PBKDF2
+0

thanx的信息..我試着回來後回來.. :) – user3801050

2

您的列名'狀態'是一個關鍵字。將該列重命名爲其他內容。

0

的錯誤是參數不兼容 中的PreparedStatement的executeQurey功能的executeQuery()內部消除parametars

相關問題