connet.lolipop.jp
データベースクラスを作成
● データベースの構成

 データベース名 ->sample.DB
 テーブル名 ->sampleTbl

 テーブルの構造                
カラムタイプ
idINTEGER
nameTEXT
addressTEXT
memoTEXT
dateTIMESTAMP
 
データベースファイルの保存は管理しやすい場所でかまいませんが、ここでは設定を、以下のコードのように
「c:/SQLite/sample.DB」とすることにします。

「Sqlite」はプログラムの実行と同時に指定されたデータベースファイルの存在を、判断してくれます。
もしファイルが存在しない場合は、指定のファイルを自動生成してくれます。 ただし条件があり、テーブルを作成するコードに
”if not exists”文の挿入は必須になります。

SqliteDB.java
package sample.DB;

import java.sql.*;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;

public class SqliteDB { 
   private static Connection con = null; 
         
   public static void dbCon() throws SQLException, ClassNotFoundException {     
     Statement stmt = null;
     try {
       // sqlite JDBCドライバーの読み込み
       Class.forName("org.sqlite.JDBC");
     } catch (ClassNotFoundException ex) {
       System.out.println("JDBCドライバーが見つかりません?。\n" + ex);
       throw ex;
     }
   
     try {
       // データベース接続
       con = DriverManager.getConnection("jdbc:sqlite:c:/SQLite/sample.DB"); 
       // ステートメントの生成
       stmt = con.createStatement();                              
       // テーブル作成
       stmt.executeUpdate("create table if not exists sampleTbl(id integer primary key,name text,address text,memo text,date timestamp NOT NULL default (datetime(CURRENT_TIMESTAMP,'localtime')))");          
     } catch (SQLException ex) {
              System.out.println("DB接続に失敗しました!。\n" + ex);
              throw ex;
     }
   }
      
   // 検索
   public static ResultSet dataQuery(String queryStmt) throws SQLException, ClassNotFoundException {          
     // CachedRowSetはDBから取得したデータを、メモリ上に格納した状態でもデータの処理が可能。
     RowSetFactory rowSetFactory = RowSetProvider.newFactory();
     CachedRowSet rowSet = rowSetFactory.createCachedRowSet();
   
     Statement stmt = null;
     ResultSet resultSet = null;
     try {
       dbCon();
       stmt = con.createStatement();
       resultSet = stmt.executeQuery(queryStmt);     
       // ResultSetオブジェクトのデータをpopulateメソットを使用して読み込みます。
       rowSet.populate(resultSet);            
     } catch (SQLException ex) {
         System.out.println("検索に失敗しました!。\n" + ex);
         throw ex;
     } finally {
         if (resultSet != null) {
           resultSet.close();
         }
         if (stmt != null) {
           stmt.close();
         }
         if (con != null) {
           con.close();
         }
     }
     return rowSet;
   }
      
  // 追加・更新・削除
  public static void dbUpdate(String sqlStmt) throws SQLException, ClassNotFoundException {  
      Statement stmt = null;
      try {      
         dbCon();
         stmt = con.createStatement();
         stmt.executeUpdate(sqlStmt);
      } catch (SQLException ex) {
            System.out.println("データの処理に失敗しました!。\n" + ex);
      } finally {     
           if (stmt != null) {
              stmt.close();
           }
           if (con != null) {
              con.close();
           }
      }
  }
        
}
※CachedRowSetインタフェースについて
データベースから取得したデータをメモリ上に格納した状態で、いわばオフラインでも データの処理が可能。データ行のコンテナと言われます(Java7以降に搭載)。
参考:オフラインのResultSetとしてCachedRowSetを使う方法 - seraphyの日記
データベースの実行クラスを作成
● SQLの作成・発行

SqliteDBJ.java
package sample.DBJ;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Optional;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;

import sample.DB.SqliteDB;
import sample.model.SampleModel;

public class SqliteDBJ {

  // 登録
  public static void insertData (String name, String address, String memo) throws SQLException, ClassNotFoundException {                         
    String insertStmt;
    // SQL文の作成
    insertStmt = "INSERT INTO sampleTbl" + 
                  "(name, address, memo)" + 
                  "VALUES('" + name + "','" + address + "','" + memo + "')";
    try {
      // SqliteDBクラスへSQLを発行
      SqliteDB.dbUpdate(insertStmt);
    } catch (SQLException ex) {
        System.out.println("登録処理に失敗しました!。\n" + ex );
        throw ex;
    }
  }
    
  // id検索
  public static ObservableList<SampleModel> searchId(String sql) throws SQLException,ClassNotFoundException {    
    // データの表示内容を作る --- コレクションクラスのインスタンスを作りリストのdataプロパティを定義
    ObservableList<SampleModel> data = FXCollections.observableArrayList();
    // SQL文の作成
    String idSql = "SELECT * FROM sampleTbl WHERE id="+sql;              
    try {
      // SqliteDbクラスへSQLを発行して結果を取得
      ResultSet rs = SqliteDB.dataQuery(idSql);          
      // データ内容を取得
      data = (ObservableList<SampleModel>) searchIdData(rs);      
      return data;         
    } catch (SQLException ex) {           
       System.out.println("番号" + sql + "の検索に失敗しました!。\n" + ex);            
       throw ex;
    }                                      
  }
    
  // id検索(データ内容取得)
  private static ObservableList<SampleModel> searchIdData(ResultSet rs) throws SQLException {
    ObservableList<SampleModel> data = FXCollections.observableArrayList();
    if (rs.next()){
      data.add(new SampleModel(
      rs.getInt("id"),
      rs.getString("name"),
      rs.getString("address"),
      rs.getString("memo"),
      rs.getString("date")
      ));     
    }
    return data;
  }
    
  // 全件検索
  public static ObservableList<SampleModel> searchAllData() throws SQLException, ClassNotFoundException {    
    String sql = "SELECT * FROM sampleTbl";        
    try {
      ResultSet rs = SqliteDB.dataQuery(sql);
      ObservableList<SampleModel> data = searchAllDataList(rs);
      return data; 
    } catch (SQLException ex) {           
        System.out.println("全件の検索に失敗しました!。\n" + ex);
        throw ex;
    }
  }

  // 全件検索(データ内容取得)
  private static ObservableList<SampleModel> searchAllDataList(ResultSet rs) throws SQLException, ClassNotFoundException {      
    ObservableList<SampleModel> data = FXCollections.observableArrayList();    
    while (rs.next()){
      data.add(new SampleModel(
      rs.getInt("id"),
      rs.getString("name"),
      rs.getString("address"),
      rs.getString("memo"),
      rs.getString("date")));       
    }
      return data;
  }
    
  // memo更新
  public static void dataUpdate (String upId, String upMemo) throws SQLException, ClassNotFoundException {             
    String upSql;
    upSql = "UPDATE sampleTbl SET memo = '" + upMemo + "' WHERE id = " + upId; 
    try {
      SqliteDB.dbUpdate(upSql);
    } catch (SQLException ex) {
        System.out.print("更新処理に失敗しました!。\n" + ex);
        throw ex;
    }
  }
        
  // 削除
  public static boolean dataDelete (String delId) throws SQLException, ClassNotFoundException {       
    Alert del_alert = new Alert (Alert.AlertType.CONFIRMATION);    
    del_alert.setTitle("JavaFXSampleProgram");
    del_alert.setHeaderText("削除確認");                          
    if("".equals(delId)){  
      del_alert.setContentText("削除する番号を入力して下さい !。\n");
      Optional result = del_alert.showAndWait();
      if(result.get() != ButtonType.OK || result.get() == ButtonType.OK){
         return false;
      }
    } else {
       del_alert.setContentText(delId + "番のデータを削除します。\n"
            + "間違いなければOKボタンを押してください。");
          
       Optional result = del_alert.showAndWait();
       if(result.get() != ButtonType.OK){
          return false;
       }
    }  
      
    String delSql;
    delSql = "DELETE FROM sampleTbl" + " WHERE id = " + delId;
    try {
      SqliteDB.dbUpdate(delSql);
    } catch (SQLException ex) {
       System.out.print("削除に失敗しました!。\n" + ex);
       throw ex;
    }
       return false; 
  }
}
Search
Google


↟ このページの先頭へ