概要 結局更新する為に接続が二つ必要でした。 フィールド単位のデータセットはうまくいかず、結局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) 接続と通常処理






