2017-08-28 24 views
0

ユーザー名とパスワードを確認するためにサーバーに接続する必要があるログインアプリケーションがあります。私はnetbeansを使用しています.jbdcがインストールされており、サービスのタブで作業しています(スタックオーバーフローのおかげで!)。 jbdcによって、私はそれを介してSQLスクリプトを実行できることを意味します。Netbeans MySQL接続 - jbdcと関係ない

接続方法:

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

} 

私は信じている私は、私はそれをconviedていますMSサーバ16とMySQLでこれを設定している

コードです問題はdbConnectionファイルのreturn null;です。 if(this.connection==Null)がtrueに戻り、システムが終了します。

ありがとうございます。

+3

空のキャッチブロックを書き込むときに何が起こるかわかりません。スタックトレースを出力します。 – duffymo

+0

"getConnection()"メソッドを使用する前に、 "LogInModel"の "dbConnection"クラスをインスタンス化する必要があります(新規)。 – ziMtyth

+0

"dbConnection"が実際にnullと異なるかどうかをデバッガで確認して、そのメソッドを呼び出すことができます。 – ziMtyth

答えて

1

dbConnectionクラスは悪い考えです。なぜあなたはそれらを渡すことができますそれらの値をハードワイヤー?

この方法でコードを作成すると、アプリケーションにはConnectionが1つしかありません。より現実的な解決策は、接続プールを使用することです。

Learn 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を持っていない私はそのLogInModelをこのように書くかもしれません

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

:ここ

は勧告のカップルですドライバJARを実行時CLASSPATHに追加します。ドライバクラスが見つからない場合に例外がスローされますが、例外を飲み込んだためにドライバクラスを認識できませんでした。

+0

今のところ、私はこのアプリの接続に心配していません。私は接続プールを学び、使用する必要があります(間違いなく正しいです)。これがどういうものなのか見てみると、学習接続プールを使用するのは今のところ保証されていないようです。この情報があれば、私はこれを抱き締めて、別の接続方法を試みるべきだと思いますか? –

+0

このコードで何が問題になっているのかを理解する必要がありますが、最終的にプールを使用する必要があります。私はあなたの要件を知らない。まずこのコードを理解することを心配します。 – duffymo

+0

あなたのご意見、特にコーディング基準に感謝します。これは貴重なリソースになります。 –

関連する問題