2017-11-18 48 views
0

また、ネイティブコードとの違いを表示できるのは誰ですか?たとえば、Javaを使用してデータベースに接続し、Singleton Designパターンで実行します。それを使用する利点は何ですか?シングルトンデザインパターンのJavaを使用してSQLデータベースに接続する方法は?

+0

を使用し、私は動機は、単一の接続を使用することであると仮定アプリケーション全体で接続コードを最初に投稿してください。 – c0der

答えて

0

あなたの接続インスタンスが保存されるべきとあなただけのgetConnection()メソッド(SingletonパターンののgetInstance)

ここではサンプルコードがある経由での接続を取得することができます。

A - 四

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

public class DBUtil { 

    private final String HOST; 
    private final String PORT; 
    private final String DB_NAME; 
    private final String USER; 
    private final String PASSWORD; 

    private final String TARGET_TABLE; 
    private final String COLUMN_NAME; 

    private final String CONNECTION_STRING; 

    private final String SELECT_ALL_SQL; 
    private final String SELECT_COLUMN_SQL; 
    private final String INSERT_SQL; 

    private Connection conn; 

    public DBUtil() { 
     // Database Parameters 
     HOST     = "your_host_here"; 
     PORT     = "your_port_number_here"; 
     DB_NAME     = "your_database_name"; 
     USER     = "your_databse_user_here"; 
     PASSWORD    = "your_database_password_here"; 

     // Database Tables 
     TARGET_TABLE   = "your_table_name"; 
     COLUMN_NAME    = "your_tables_column_name"; 

     CONNECTION_STRING  = String.format("jdbc:mysql://%s:%s/%s", HOST, PORT, DB_NAME); 

     // Query Strings 
     SELECT_ALL_SQL   = String.format("SELECT * FROM %s.%s WHERE id=?", DB_NAME, TARGET_TABLE); 
     SELECT_COLUMN_SQL  = String.format("SELECT %s FROM %s.%s WHERE id=?", COLUMN_NAME, DB_NAME, TARGET_TABLE); 
     INSERT_SQL    = String.format("INSERT INTO %s.%s (id, name) values (?, ?)", DB_NAME, TARGET_TABLE); 

     printConfiguration(); 

     conn = null; 
    } 

    private void printConfiguration() { 
     System.out.println("******************************************************************************"); 
     System.out.println("DB_NAME     : " + DB_NAME); 
     System.out.println("USERNAME     : " + USER); 
     System.out.println("PASSWORD     : " + PASSWORD); 
     System.out.println("CAMT TABLE     : " + TARGET_TABLE); 
     System.out.println("******************************************************************************"); 
    } 

    private void getConnection() { 
     if(conn != null) { 
      System.out.println("Connection already established with db"); 

      return; 
     } 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection(CONNECTION_STRING, USER, PASSWORD); 
     } catch (ClassNotFoundException e) { 
      System.out.println("Connection FAILED"); 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void closeConnection() { 
     if(conn == null) { 
      return; 
     } 

     try { 
      conn.close(); 

      conn = null; 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public int insert(int id, String column) { 
     int rowNum; 

     getConnection(); 
     PreparedStatement preparedStatement = null; 

     try { 
      preparedStatement = conn.prepareStatement(INSERT_SQL); 
      System.out.println("SQL: " + INSERT_SQL); 
      preparedStatement.setInt(1, id); 
      preparedStatement.setString(2, column); 

      rowNum = preparedStatement.executeUpdate(); 

      System.out.println(rowNum + " rows are inserted"); 

      return rowNum; 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return -1; 
    } 

    public Model getModel(int id) { 
     getConnection(); 
     PreparedStatement preparedStatement = null; 
     Model model = new Model(); 

     try { 
      preparedStatement = conn.prepareStatement(SELECT_ALL_SQL); 
      System.out.println("SQL: " + SELECT_ALL_SQL); 
      preparedStatement.setInt(1, id); 

      ResultSet rs = preparedStatement.executeQuery(); 

      if(rs.next()) { 
       model.setId(rs.getInt("id")); 
       model.setName(rs.getString("name")); 
      } 

     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return model; 
    } 

    public String getName(int id) { 
     getConnection(); 
     PreparedStatement preparedStatement = null; 
     String name = null; 

     try { 
      preparedStatement = conn.prepareStatement(SELECT_COLUMN_SQL); 
      System.out.println("SQL: " + SELECT_ALL_SQL); 
      preparedStatement.setInt(1, id); 

      ResultSet rs = preparedStatement.executeQuery(); 

      if(rs.next()) { 
       name = rs.getString("name"); 
      } 

     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return name; 
    } 

} 

Bのギャングのシングルトンデザインパターンに基づいて、サンプル・データベースユーティリティ - モデルはシングルトンデータベースユーティリティデモに

public class Model { 

    private int id; 
    private String name; 

    public Model() {} 

    public Model(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 
関連する問題