2010-03-26 133 views
0

我正在使用NetBeans IDE(6.8)。我有一個DB類:JDBC連接問題

package garits; 
import java.io.Serializable; 
import java.sql.*; 
import java.util.Properties; 
public class DB implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    String dbURL = "jdbc:mysql:///team_project"; 
    String user = "root"; 
    String pwd = "arsenal"; 
    String dbDriver = "com.mysql.jdbc.Driver"; 
    private Connection dbCon; 
    private ResultSet r; 
    private Statement s; 

    public DB() 
     {} 

    public boolean connect() throws ClassNotFoundException,SQLException{ 
      Class.forName(dbDriver); 
      Properties props = new Properties(); 
      props.put(user, "root"); 
      props.put(pwd, "arsenal"); 
      props.put("charSet", "UTF-8"); 
      props.put("lc_ctype", "UTF-8"); 
      dbCon = DriverManager.getConnection(dbURL,props); 
      //dbCon = DriverManager.getConnection(dbURL,user,pwd); 
      return true; 
    } 

    public void close() throws SQLException{ 
     dbCon.close(); 
    if(r!=null) 
    r.close(); 
    if(s!=null) 
    s.close(); 
    } 

    public ResultSet execSQL(String sql) throws SQLException{ 

        s = dbCon.createStatement(); 
        r = s.executeQuery(sql); 
        return (r == null) ? null : r; 
    } 

    public int updateSQL(String sql) throws SQLException{ 
        s = dbCon.createStatement(); 
        int r = s.executeUpdate(sql); 
        return (r == 0) ? 0 : r; 
    } 

    public int updateSQL(String sql, String getID) throws SQLException{ 
     s = dbCon.createStatement(); 
     int autoIncValue = -1; 
     s.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); 
     ResultSet rs = s.getGeneratedKeys(); 
     if (rs.next()) { 
      autoIncValue = rs.getInt(1); 
     } 
     return autoIncValue; 
    } 
} 

jar文件即時通訊我的圖書館,但每當我嘗試連接:

private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     String result =""; 
     DB db = new DB(); 
     try{ 
      db.connect(); 
      String query = "Select Role From User_Account Where Username=jTextField1.getText()AND Where Password=jTextField2.getText(); "; 
      ResultSet rs=db.execSQL(query); 
      while(rs.next()) 
      { 
       result = rs.getString("Role"); 

      } 
      if(result.equals("")) 
      { 
       JOptionPane.showMessageDialog(loginButton,"Access denied","Error Message",JOptionPane.ERROR_MESSAGE); 

      } 
      else if(result.equals("Administrator")) 
      { 
       MainPage_Admin admin = new MainPage_Admin(); 
      } 

     } 
      catch(Exception e) 
      { 
      System.out.println("An error has occurred"); 
      } 



    } 

我得到一個錯誤(異常被捕獲)的-The名數據庫是「team_project」,密碼是「阿森納」 - 任何想法的讚賞。我是JDBC新手。

+1

這個JDBC代碼還有另一個主要問題:它泄露資源。在儘可能短的範圍內以「try-finally」模塊獲取並關閉它們。示例可以在這裏找到:http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html – BalusC 2010-03-26 11:38:29

回答

1

第一步:在您的catch-block中使用至少e.printStackTrace()以從異常中獲取一些信息。否則,你只會猜測。

+0

我得到: java.sql.SQLException:訪問被拒絕用戶''@ localhost' (使用密碼:否)爲什麼我被拒絕訪問 - 謝謝。 – 2010-03-26 11:31:15

+0

@eli:因爲您沒有正確設置用戶/密碼屬性。檢查將'user'和'pwd'放入'Properties'的兩行:這是錯誤的。 – 2010-03-26 11:33:32

0

MySQL數據庫的URL連接屬性是錯誤的

jdbc:mysql://localhost:3306/<your database name> 

,而不是你給

jdbc:mysql:///team_project 

修改並執行該程序,並更好地處理try/catch塊中的異常,而不是拋出。