SQLの窓

2009年10月22日


ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新

概要

結局更新する為に接続が二つ必要でした。
フィールド単位のデータセットはうまくいかず、結局SQLを作成する
のがやはり無難という結果です

列データの取得、保存、読み出し等はクラスにすべきですが、
この先はサンプルとしては効果が薄いのではしょりました。
import java.sql.*;

public class Main {

	public static void main(String[] args) {

		// 読み込み用と更新用の接続を用意
		Connection con;
		Connection conUpdate;
		Statement stmt;
		Statement stmtUpdate;
		// レコードセット
		ResultSet rset;

		// 接続文字列
		String cstr = 
			"Provider=MSDASQL"+
			";Driver={SQL Native Client}"+
			";Server=NIGHT_TCP"+
			";DATABASE=lightbox;";

// *********************************************************
// ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer)
// *********************************************************
		try {
			// 接続
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			con = DriverManager.getConnection(
				"jdbc:odbc:"+cstr,	// ODBC MySQL
				"sa",
				"passwordpassword"
			);
			stmt = con.createStatement();
			conUpdate = DriverManager.getConnection(
				"jdbc:odbc:"+cstr,	// ODBC MySQL
				"sa",
				"passwordpassword"
			);
			stmtUpdate = conUpdate.createStatement();

			// SELECT 実行
			rset = stmt.executeQuery ( "select * from [社員マスタ]" );

			// 列情報取得
			ResultSetMetaData rm = rset.getMetaData();
			int nCols = rm.getColumnCount();

			System.out.println( "列数:" + nCols );
			int i;
			for( i = 1; i <= nCols; i++ ) {
				if ( i != 1 ) {
					System.out.print( "," );
				}
				// 列名
				System.out.print( rm.getColumnName( i ) );
			}
			System.out.println( "" );

			// 列データ保存用
			String[] data = new String[nCols];

			// 行の読み込み
			int row = 0;
			while( rset.next() ) {

				// 列データ保存
				for( i = 1; i <= nCols; i++ ) {
					data[i-1] = getString( rset, i );
				}

				// 列データ表示
				System.out.print( data[0] + "," );
				System.out.print( data[1] + "," );
				System.out.print( data[2] + "," );
				System.out.print( data[3] + "," );
				System.out.print( data[4] + "," );
				System.out.print( data[5] + "," );
				System.out.print( data[6] + "," );
				System.out.print( data[7] + "," );
				System.out.print( data[8] + "," );
				System.out.print( data[9] );
				System.out.println( "" );

				// 更新SQL作成
				String Query = "update 社員マスタ set "
				+ "生年月日 = '2005/01/0" + ((row % 5)+1) + "'"
				+ " where 社員コード = '" + data[0] + "'";
		
				try {
					stmtUpdate.executeUpdate( Query );
				}
				catch( SQLException e ) {
					System.out.println( e.getMessage() );
				}

				row++;

			}

			// 接続解除
			stmtUpdate.close();
			conUpdate.close();
			stmt.close();
			con.close();

		}
		catch (Exception e) {
			System.out.println( e.getMessage() );
		}

	}

// *********************************************************
// null チェック済みの列の文字列結果
// *********************************************************
	public static String getString( ResultSet rset, int index ) {

		String v = null;

		try {
			v = rset.getString( index );
		}
		catch (Exception e) {
			System.out.println( e.getMessage() );
		}

		if ( v == null ) {
			v = "";
		}

		return v;

	}
}

【SQLExpressの最新記事】
posted by lightbox at 2009-10-22 17:34 | SQLExpress | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり