[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00118] MySQL を用いたプログラムで insert が正常に行われません
こんにちは。くろたろうです。いろいろ試してみたんですが、
どうしても直らないので、よろしくお願いします。
※MySQLのMLにも同様のメールを送信しました。かぶった方、
毎度申し訳ないです。
(環境)
・JDK:J2SDK1.4.1
・MYSQL:mysql-4.0.1.2
・JDBCドライバ:gweMysqlJDBC_extra4
(やろうとしていること)
java.sql.ResultSetの更新系メソッドを用いてデータのinsert
を行いたい。
(問題点)
データのinsertが、決まった行でしか行われません。二度、三
度とinsertを行う度、ava.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(ResultSet rs,int lastRow,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/