ともさんのHP >プロブラミング >自作JavaLibrary >【JAVA】データベースにアクセスするためのクラスライブラリ

【JAVA】データベースにアクセスするためのクラスライブラリ

tomojavalib.comm.DbsCommは Javaでデータベースに接続するためのクラスです。
Java 楽天 でのデータベースアクセスはSQLなどを使って複雑な操作が可能ですが、 複雑な操作をしようとすると、プログラムソースも複雑になってしまい、訳が分からなくなります。

広告

そこで、私はこの単純な操作をするClassを使ってデータベースにアクセスしています。
tomojavalib.comm.DbsCommで出来るのは、データの追加と1件の読み込み、全てのデータの読み込みだけ。 読み込むデータは全てString形式で、追記も同様です。下手にいろいろな形式にすると汎用性がなくなるし、 複雑になってしまいます。データは読み込んでから各種形式に変換すれば良いので問題は生じません。
このクラスではデータベースへの追記や変更が出来ないのですが、一応、不自由なく使っています。
※このプログラムではJava8以降では動作しません。


データベース接続Javaプログラムソース


package tomojavalib.comm;

import java.sql.*;
import java.util.*;


public class DbsComm {

   private String url; // "jdbc:odbc:"+接続対象
  private String dbs; //接続対象
  private String user = "tomo";    //user accessでは意味なし
  private String password = "tomo";  //password accessでは意味なし
  private Connection con = null;  //Connection object
  private ResultSet rs;
  private Statement stmt;
  private String gettmp[];    //検索結果の一時置き場
  private boolean next = false;
  /**dataの入れ物[][]の1番目は行(データの数row)。2番目は列(要素の数col)*/
  public String data[][] = null;
  /**dataのメンバー*/
  public String member[]= null;
  /**取り出したdataの数*/
  public int datano = 0;




/**
 * このクラスの試験用
 */
 public static void main(String args[]){
  DbsComm dbc ;

  String dbs = "test";
  String member[] = { "t1" , "t2" , "t3" , "t4" };
  dbc = new DbsComm( dbs , member );

  try{
  String addata[] = {"I","j","k","l"};
  dbc.addData( addata );
  }catch (Exception e){ e.printStackTrace(); }

  try{
  dbc.getAll();
  }catch (Exception e){ e.printStackTrace(); }

  for(int I=0; I<dbc.datano ; I++)
  {
  for(int ii=0; ii<member.length ; ii++)
  {
  System.out.println( dbc.data[I][ii] );
  } 
  } 
 }


 /**
  * データベースに1件のデータを追加します。<BR>
  * @param String addata[] :追加するdata。Memberと必ず数が同一であること<BR>
  */
 public void addData( String addata[] ) throws Exception 
 {
  if( (addata.length == member.length)==false) {Exception e = new Exception(" 追加するdataの数が異なります_add "); throw e;}
  open();    //dbに接続
  try{
  String sql = "INSERT INTO " + dbs + " ( " ;
  for( int I=0 ;I<member.length-1 ; I++){ sql = sql + member[I] + " , "; }
  sql = sql + member[ member.length-1 ] + " ) VALUES ( '" ;
  for( int I=0 ;I<member.length-1 ; I++){ sql = sql + addata[I] + "','"; } 
  sql = sql + addata[ member.length-1 ] + "')" ;
  byte[] sjis_row_bytes = sql.getBytes("SJIS");
  String sql2 = new String( sjis_row_bytes , "SJIS");
  //System.out.println(sql2);
  stmt.executeUpdate( sql2 );
  close();  //db切り離し
  }catch(SQLException ex){ex.printStackTrace(); System.out.println("add内でエラー発生"); System.exit(-1);
  }catch(Exception ex){ex.printStackTrace();  }
 }


 /**
  * データベースに登録されているすべてのデータを読み込みます。<BR>
  * 読み込んだデータはdataはdata[][]に入ります。<BR>
  * @return なし<BR>
  */
 public void getAll() throws Exception {
  Vector memtmp = new Vector();
  open();    //dbに接続
  int check = 0;
  try{
  String sql = "select * from " + dbs;
  //System.out.print( sql );
  rs = stmt.executeQuery(sql);
  }catch(SQLException e){ e.printStackTrace(); throw e ;
  }catch(Exception e){ e.printStackTrace(); throw e ;}
  while( next() ){
  check ++ ;
  for( int I = 0 ; I<member.length ; I++){ 
   memtmp.addElement( (Object)gettmp[I] ); 
  }
  }
  rs.close();
  close();  //db切り離し
  if( check == 0 ){Exception e = new Exception(" 要素なし_DbsConn "); throw e; }

  data = new String[ (int)( memtmp.size()/member.length ) ][ (int)member.length ];
  int iii = -1 ;
  for(int ii=0 ; ii < (int)( memtmp.size()/member.length ) ; ii++ )
  {
  for(int I=0 ; I < (int)member.length ; I++)
  {
  iii = iii + 1 ;
  data[ii][I] = (String)memtmp.get(iii);
  }
  }
  datano = (int)( memtmp.size()/member.length );
  memtmp.clear();
 return;
 }


 
 /**
  * データベースから1件のデータを読み込みます。
  * もう一度実行すると、1つ前のデータを読み込みます。
  */
 
  public boolean next(){

  try{
  //次の結果へ
  next = rs.next();
  //結果を変数に格納
  if( next == true ){
  for( int I = 0 ; I<member.length ;I++){
  gettmp[I] = rs.getString( member[I] );
  }
  }
  }catch(SQLException e){System.out.println( "*****nexterr******a" );
  }catch(Exception e){ System.out.println( "*****nexterr******b" );e.printStackTrace();  }
  return next;
  }




  /**
  * データベースに接続する
  */
 public void open(){
  try{
  // jdbcドライバロード
  Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
  // dbに接続
  con = DriverManager.getConnection(url,user,password);
  // SQL コンテナ作成
  /*Statement*/
  stmt = con.createStatement();
  }catch(SQLException e){  System.out.println( "*****connerr******" );
  }catch(Exception e){ System.out.println( "*****connerr******" );e.printStackTrace();  }
 }

広告


 /**
  * データベースを切断する
  */
  public void close(){
  try{
  stmt.close();
  con.close();
  }catch(SQLException e){
  while(e != null){
  System.err.println(e.getMessage());
  System.err.println(e.getSQLState());
  System.err.println(e.getErrorCode());
  System.out.println("");
  e = e.getNextException();
  }
  }catch(Exception e){System.out.println( "*****closeerr******" );
  e.printStackTrace();
  }finally{
  }try{ con.close();
  }catch(SQLException e){System.out.println( "*****closeerr******" );}
  }


/**
 * コンストラクタ   
 * @param tdbs 接続するデータベース名
 * @param mem 接続データベースのメンバー
 */
 public DbsComm( String tdbs , String mem[] ){
  dbs = tdbs ;
  url = "jdbc:odbc:" + tdbs ; 
  member = mem ;
  gettmp = new String[ member.length ];
 }
 

}

最終更新日: 2017-03-01 07:32:39

ともさんのHP >プロブラミング >自作JavaLibrary >【JAVA】データベースにアクセスするためのクラスライブラリ

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます