2017-08-28 46 views
0

我有一個登錄應用程序需要連接到服務器來檢查用戶名和密碼。我正在使用netbeans,jbdc已安裝並正在使用服務選項卡(謝謝堆棧溢出!)。由jbdc工作,我的意思是我可以通過它執行SQL腳本。Netbeans MySQL連接 - 不與jbdc

我已經設置與MS服務器16和MySQL,所以我convied它是代碼:

連接方法:

package dbUtil; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class dbConnection { 
    private static final String USERNAME = "root"; 
    private static final String PASSWORD = "mess"; 
    private static final String SQCONN = "jdbc:mysql://localhost:1434/MessyLogin?zeroDateTimeBehavior=convertToNull"; 


    public static Connection getConnection()throws SQLException{ 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      return DriverManager.getConnection(SQCONN, USERNAME, PASSWORD); 
     }catch (ClassNotFoundException e) { 
     } 
     return null; 
    } 
} 

loginmodel:

package LogIn; 


import dbUtil.dbConnection; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 



public class LogInModel { 
    Connection connection; 

    public LogInModel() { 
     try{ 

      this.connection = dbConnection.getConnection(); 

     }catch(SQLException e){ 

     } 

     if(this.connection == null){ 
      System.out.println("here"); 
      // System.exit(1); 
     } 
    } 
    public boolean isDatabaseConnected(){ 
     return this.connection != null; 
    } 

    public boolean isLogin(String username, String password) throws Exception{ 
     PreparedStatement pr = null; 
     ResultSet rs = null; 

     String sql = "SELECT * FROM MessyLogin where username = ? and Password = ?"; 

     try{ 
      pr = this.connection.prepareStatement(sql); 
      pr.setString(1, username); 
      pr.setString(2, password); 

      rs = pr.executeQuery(); 

      boolean bool1; 

      if(rs.next()){ 
       return true; 
      } 
      return false; 
     } 
     catch(SQLException ex){   
      return false; 
     } 

     finally { 
      { 
       pr.close(); 
       rs.close(); 
      } 
     } 
    } 

} 

我相信問題是來自dbConnection文件的return null;if(this.connection==Null)回來,系統正在退出。

預先感謝您。

+3

你不知道當你寫空的catch塊時會發生什麼。打印堆棧跟蹤。 – duffymo

+0

也許你應該在使用方法「getConnection()」之前在「LogInModel」中實例化(使用新的)類「dbConnection」。 – ziMtyth

+0

您可以使用調試器查看「dbConnection」是否實際與null不同,因此您可以調用它的方法。 – ziMtyth

回答

1

您的dbConnection類是一個壞主意。爲什麼當你可以通過這些值的時候硬連線?

如果你這樣編碼,你的應用程序將只有一個連接。更實際的解決方案將使用連接池。

瞭解Java coding standards。你的代碼不會遵循它們;它使閱讀和理解變得更加困難。

這裏有幾個建議:

package LogIn; 


import dbUtil.dbConnection; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class LogInModel { 

    private static final String sql = "SELECT * FROM MessyLogin where username = ? and Password = ?"; 

    private Connection connection; 

    public LogInModel(Connection connection) { 
     this.connection = connection; 
    } 

    public boolean isLogin(String username, String password) { 
     boolean isValidUser = false; 
     PreparedStatement pr = null; 
     ResultSet rs = null; 
     try { 
      pr = this.connection.prepareStatement(sql); 
      pr.setString(1, username); 
      pr.setString(2, password);  
      rs = pr.executeQuery(); 
      while (rs.hasNext()) { 
       isValidUser = true; 
      } 
     } catch (SQLException ex) { 
      e.printStackTrace();  
      isValidUser = false; 
     } finally { 
       dbUtils.close(rs); 
       dbUtils.close(pr); 
     } 
     return isValidUser; 
    }  
} 

這裏是我的猜測,爲什麼你的代碼失敗:您沒有MySQL的JDBC

package dbUtil; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class dbConnection { 

    public static final String DRIVER = "com.mysql.jdbc.Driver"; 
    public static final String USERNAME = "root"; 
    public static final String PASSWORD = "mess"; 
    public static final String URL = "jdbc:mysql://localhost:1434/MessyLogin?zeroDateTimeBehavior=convertToNull"; 


    public static Connection getConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException { 
     Class.forName(driver); 
     return DriverManager.getConnection(url, username, password); 
    } 
} 

我可能會這樣寫LogInModel驅動程序JAR在您的運行時CLASSPATH中。當找不到驅動程序類時會拋出異常,但您不知道它是因爲吞下了異常。

+0

現在,我不關心這個應用程序的連接。我需要學習和使用連接池(你毫無疑問是正確的)。看到這只是我將永遠使用學習連接池的東西,在這一點上似乎沒有保證。鑑於這些信息,你認爲我應該試試這種方式並嘗試一種不同的方式來建立聯繫? –

+0

你應該弄清楚這段代碼有什麼問題,但最終你應該使用一個池。我不知道你的要求。首先擔心理解此代碼。 – duffymo

+0

我真的很感謝你的意見,特別是編碼標準。這將是一個寶貴的資源。 –