ともさんの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】データベースにアクセスするためのクラスライブラリ
ツイート