概要 結局更新する為に接続が二つ必要でした。 フィールド単位のデータセットはうまくいかず、結局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の最新記事】
- SQLServer の BCP で INT IDENTITY 列に csv からリストアする
- VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )
- Microsoft SQLExpress : sa に空のパスワードを設定する方法
- SQLExpress バッチ DB バックアップ
- C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ
- 各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle
- SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )
- SQLServer(SQLExpress) : SQL学習用販売管理データとインポート用スクリプト
- SQLExpress 2005( および 2008 ) の接続設定
- SQLExpress 内に存在する表の CREATE 文を取得する
- ファイルから直接データベースを別のPCでリストアする / SQLExpress
- 目的のDBが使用している物理ファイルのパスの確認 / SQLExpress
- ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです
- SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました
- VBS : SQLServerよりExcel へエクスポート(Excel製品は必要ありません)
- SQLServer のドキュメント
- VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する
- PHP : SQLExpress(SQLserver) : COM による接続処理
- PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新
- VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理