mysql:7494
From: くろ たろう <くろ たろう <kuro_taro_aki@xxxxxxxxxx>>
Date: Tue, 15 Apr 2003 17:43:17 +0900 (JST)
Subject: [mysql 07494] JAVA プログラムで insert が正常に行われません
こんにちは。くろたろうです。いろいろ試してみたんですが、 どうしても直らないので、よろしくお願いします。 ※さきほど、間違えたメールを一通送ってしまいました。申し 訳ありません。 (環境) ・JDK:J2SDK1.4.1 ・MYSQL:mysql-4.0.1.2 ・JDBCドライバ:gweMysqlJDBC_extra4 (やろうとしていること) java.sql.ResultSetの更新系メソッドを用いてデータのinsert を行いたい (問題点) データのinsertが、決まった行でしか行われません。二度、三 度とinsertを行う度、java.sql.ResultSet.moveToInsertRow() メソッドを使用して挿入行を指定しているのですが、プログラ ムを立ち上げる前に存在するテーブルの、最終行を常に更新し てしまいます。 ※executeQuery()を使用して、直接insert文を投げても同じ結 果になってしまいました。 ※setFetchDirection(ResultSet.FETCH_FORWARD)も使用してみ ましたが、結果は同じでした。 以下に、実行結果とソースを掲載します。 (ソース) //InsertData.java import java.sql.*; import java.util.*; public class InsertData{ //Field Vector rows; //Constructor public InsertData(Vector rows){ this.rows = rows; try{ //DBへの接続 DBAccessor dbAccessor = new DBAccessor(); //ResultSetの取得 ResultSet rs = dbAccessor.getResultSet(); //既存の行数を取得(データ番号を割り振るため) rs.last(); int lastRow = rs.getRow(); //データの挿入 for(int i = rows.size();i > 0;i--){ doInsert(データを与えています); } //DB接続の終了 dbAccessor.closeResultSet(); dbAccessor.closeStatement(); dbAccessor.closeConnection(); dbAccessor2 = null; }catch(SQLException sqlEx){ sqlEx.printStackTrace(); } } private void doInsert(ResultSetrs,intlastRow,java.sql.Date date, int raceSeq,int firstPrise,float odds) throws SQLException{ //カーソルをinsert行に移動 rs.moveToInsertRow(); //カラム値の更新 rs.updateInt(1,lastRow); rs.updateDate(2,date); rs.updateInt(3,raceSeq); rs.updateInt(4,firstPrise); rs.updateFloat(5,odds); //insertの実行 rs.insertRow(); } } (実行結果) (1)insert実行前のデータです。SEQ列の番号は整列してい ます。(このデータは手動で作成しました。) mysql> select * from master; +-----+------------+---------+------------+------+ | SEQ | DAY | RaceSEQ | FirstPrise | ODDS | +-----+------------+---------+------------+------+ | 1 | 2002-09-08 | 1 | 2 | 2.7 | | 2 | 2002-09-08 | 3 | 3 | 5.6 | | 3 | 2002-09-08 | 6 | 3 | 6.6 | | 4 | 2002-09-08 | 7 | 4 | 8 | | 5 | 2002-09-09 | 1 | 1 | 5.7 | | 6 | 2002-09-09 | 2 | 3 | 3.3 | +-----+------------+---------+------------+------+ 6 rows in set (0.00 sec) (2)一度目のinsert実行後です。SEQ列の「7」というデー タをひとつだけ挿入しました。正常です。 mysql> select * from master; +-----+------------+---------+------------+------+ | SEQ | DAY | RaceSEQ | FirstPrise | ODDS | +-----+------------+---------+------------+------+ | 1 | 2002-09-08 | 1 | 2 | 2.7 | | 2 | 2002-09-08 | 3 | 3 | 5.6 | | 3 | 2002-09-08 | 6 | 3 | 6.6 | | 4 | 2002-09-08 | 7 | 4 | 8 | | 5 | 2002-09-09 | 1 | 1 | 5.7 | | 6 | 2002-09-09 | 2 | 3 | 3.3 | | 7 | 1970-01-01 | 5 | 5 | 58 | +-----+------------+---------+------------+------+ 7 rows in set (0.00 sec) (3)二度目のinsertです。SEQ列の「8」とういうデータをinsert しましたが、順序が入れ替わっています。この後、何度データ を入れても、プログラムを一番初めに起動したときのデータ挿 入位置に、新しいデータが挿入されてしまいます。 mysql> select * from master; +-----+------------+---------+------------+------+ | SEQ | DAY | RaceSEQ | FirstPrise | ODDS | +-----+------------+---------+------------+------+ | 1 | 2002-09-08 | 1 | 2 | 2.7 | | 2 | 2002-09-08 | 3 | 3 | 5.6 | | 3 | 2002-09-08 | 6 | 3 | 6.6 | | 4 | 2002-09-08 | 7 | 4 | 8 | | 5 | 2002-09-09 | 1 | 1 | 5.7 | | 6 | 2002-09-09 | 2 | 3 | 3.3 | | 8 | 1970-01-01 | 5 | 5 | 58 | | 7 | 1970-01-01 | 5 | 5 | 58 | +-----+------------+---------+------------+------+ 8 rows in set (0.00 sec) __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/
-> 7494 2003-04-15 17:43 [くろ たろう <kuro_ta] JAVA プログラムで insert が正常に行われません 7495 2003-04-15 18:06 ┣[Kengo Jinno <kengo@x] 7496 2003-04-15 18:08 ┗[UNO Shintaro <uno@xx]