質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2058閲覧

javaでmysqlから2件しかデータロードできません。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/02/07 07:24

javaでmysqlからデータを読み込むクラスを作っています。
実行ログを見ると2件目までしかロードしなく、データベースの終了すら見れません。
どなたかご教授ください。

javaのクラスのソースです。


package kadai15;

import java.sql.*; //SQLに関連したクラスライブラリをインポート

public class Dbaccess {

/* 1. フィールドの定義 */ protected int[] id = new int[2]; // protected String[] name = new String[10]; // protected String[] log = new String[10]; // protected String[] lat = new String[10]; protected String[] log2 = new String[10]; protected String[] lat2 = new String[10]; protected int[] his = new int[100]; protected int num = 0; //データ取得件数 /* 2. メソッド */

/* 2.1 データベースからのデータ取得メソッド /
public void dataload() throws Exception { //エラー処理が必要にする
System.out.println("dataload接続成功");
/
2.1.1 データベースに接続 */
//num=0; //取得件数の初期化
Class.forName("com.mysql.jdbc.Driver").newInstance(); //com.mysql.jdbc.Driverはドライバのクラス名
System.out.println("テスティング1");
String url = "jdbc:mysql://localhost/softd1?characterEncoding=UTF-8"; //schoolがデータベース名:文字エンコードはUTF-8
System.out.println("テスティング2");
Connection conn = DriverManager.getConnection(url, "root", "nakaguti"); //上記URL設定でユーザ名とパスワードを使って接続
System.out.println("テスティング3");

/* 2.1.2 SELECT文の実行 */ String sql = "SELECT * FROM course where id = 4 limit 2"; //SQL文の設定 ?などパラメータが必要がない場合は通常のStatementを利用 PreparedStatement stmt = conn.prepareStatement(sql); //JDBCのステートメント(SQL文)の作成 ResultSet rs = stmt.executeQuery(); //ステートメントを実行しリザルトセットに代入 /* 2.1.3 結果の取り出しと表示 */

/while (rs.next()) { //リザルトセットを1行進める.ない場合は終了
System.out.println(num+"回目の読み込み");
this.id[num] = rs.getInt("id");
System.out.("id:"+this.id[num]);
this.name[num] = rs.getString("name");
this.log[num] = rs.getString("log");
this.lat[num] = rs.getString("lat");
this.log2[num] = rs.getString("log2");
this.lat2[num] = rs.getString("lat2");
System.out.println("lat2:"+this.lat2[num]);
this.his[num] = rs.getInt("his");
System.out.println("his:"+this.his[num]);
num++;
}
/
while (rs.next()) { //リザルトセットを1行進める.ない場合は終了
this.id[num] = rs.getInt("id");
System.out.println("id?" + this.id[num]);
this.name[num] = rs.getString("name");
System.out.println("name?" + this.name[num]);
this.log[num] = rs.getString("log");
System.out.println("log?" + this.log[num]);
this.log2[num] = rs.getString("log2");
System.out.println("log2?" + this.log2[num]);
this.lat[num] = rs.getString("lat");
System.out.println("lat?" + this.lat[num]);
this.lat2[num] = rs.getString("lat2");
System.out.println("lat2?" + this.lat2[num]);
this.his[num] = rs.getInt("his");
System.out.println("his?" + this.his[num]);
num++;
}

/* 2.1.4 データベースからの切断 */ rs.close(); //開いた順に閉じる System.out.println("closeテスト1"); stmt.close(); System.out.println("close2"); conn.close(); System.out.println("close3"); } /* 2.2 データベースへのインサートメソッド */ public int insert(int id, String name, String log, String lat, String log2, String lat2, int his) { int count = 0; //登録件数のカウント try { /* 2.2.1 データベースに接続 */ Class.forName("com.mysql.jdbc.Driver").newInstance(); // SELECTの時と同じ String url = "jdbc:mysql://localhost/softd1?characterEncoding=UTF-8"; Connection conn = DriverManager.getConnection(url, "root", "nakaguti"); /* 2.2.2 INSERT文の実行 */ String sql = "INSERT INTO student (id,name,log,lat,log2,lat2,his) VALUES (?,?,?,?,?,?,?)"; //SQL文の設定 INSERTはパラメータが必要なことが多い PreparedStatement stmt = conn.prepareStatement(sql); //JDBCのステートメント(SQL文)の作成 stmt.setInt(1, id); //1つ目の?に引数をセットする stmt.setString(2, name); //2つ目の?に引数をセットする stmt.setString(3, log); stmt.setString(4, lat); stmt.setString(5, log2); stmt.setString(6, lat2); stmt.setInt(7, his); /* 2.2.3 実行(UpdateやDeleteも同じメソッドを使う) */ count = stmt.executeUpdate(); /* 2.2.4 データベースからの切断 */ stmt.close(); conn.close(); return count; } catch (Exception e) { return 0; } } /* 3. アクセッサ */

/* 3.1 Getアクセッサ */
public int getId(int i) {
if (i >= 0 && num > i) {
return id[i];
} else {
return 0;
}
}

public String getName(int i) { if (i >= 0 && num > i) { return name[i]; } else { return ""; } } public String getlog(int i) { if (i >= 0 && num > i) { return log[i]; } else { return null; } } public String getlat(int i) { if (i >= 0 && num > i) { return lat[i]; } else { return null; } } public String getlog2(int i) { if (i >= 0 && num > i) { return log2[i]; } else { return null; } } public String getlat2(int i) { if (i >= 0 && num > i) { return lat2[i]; } else { return null; } } public int getHis(int i) { if (i >= 0 && num > i) { return his[i]; } else { return 0; } } public int getNum() { return num; // データ件数 }

}


次にシステムアウトの結果です。

テスティング1
テスティング2
テスティング3
id?1
name?駅1
log?39.80
log2?39.79
lat?141.13
lat2?141.14
his?0
id?2
name?駅2
log?39.80
log2?39.74
lat?141.13
lat2?141.12
his?0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

解決しましたか?
もしかして、例外(ArrayIndexOutOfBoundsException)とか出ていませんか?
Dbaccessクラスのidを格納するフィールドが2件分しか用意されていないので…

Java

1protected int[] id = new int[2];

これを10とかすると10件分とれませんか?

Java

1protected int[] id = new int[10];

投稿2016/02/08 08:30

編集2016/02/08 08:32
schi_heil

総合スコア78

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/08 08:44

schi_heilさん解答ありがとうございます!schi_heilさんのおかげで無事解決しました!ありがとうございました!ベストアンサーにさせていただきます!
schi_heil

2016/02/08 14:28

解決したようでよかったです。 以下、余談です。 課題がどういうものかわからないので想像です。 idが[2]、hisが[100]の意味がよく分かりませんが、サイズの上限が10ということであれば、フィールドの定義はこれでいいと思います。 ただ、その場合、idもhisも[10]となりますが... また、それはそれとして、次のようにフィールドを扱うデータクラスを作成すると、いろいろと融通が利きます。 例えば・・・ public class GeoData { private int id; // private String name; // private String log; // private String lat; private String log2; private String lat2; private int his; // アクセッサ(getter/setter)(省略) } としておき、SELECTからのデータ取得において ArrayList<GeoData> alGeoData = new ArrayList<GeoData>(); while (rs.next()) { //リザルトセットを1行進める.ない場合は終了 GeoData geo = new GeoData(); geo.setId(rs.getInt("id")); geo.setName(rs.getString("name")); geo.setLog(rs.getString("log"); geo.setLat(rs.getString("lat")); geo.setLog2( rs.getString("log2")); geo.setLat2(rs.getString("lat2")); geo.setHis(rs.getInt("his")); alGeoData.add(geo); } としておけば、件数を意識することはなくなります。 なお、num の代わりは alGeoData.size();です。 ご参考まで・・・
guest

0

java

1 /* 2.1.2 SELECT文の実行 */ String sql = "SELECT * FROM course where id = 4 limit 2"

こちらですが、最後に limit 2 が付いているので、2件だけ読み込んでいるのだと思います。これを削除してみてください。

closeテスト1 が表示されない理由はわかりません。「データベースの終了すら見れません」とのことですが、ここでなにか Exception が投げられるのですか? それとも、プログラムがここから先に動かなくなってしまう(終わらなくなる)のですか?

投稿2016/02/07 08:05

tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/07 08:13

お早い回答ありがとうございます! 張るコードを間違えました;;そこのSQL文は ”SELECT * FROM course” です。 limit2をつけて行数を制限すると2行分だけはロードされます。limit3以上の文字数になると2件目までしか読み込みません。 「データベースの終了すら見れません」と書いたのはデータベースのcloseテストが表示されたないという意味でした。申し訳ありません;; jspで以下のエラー処理を行うとエラーになってしまいます。limitをつけて行数を2行までに指定するとエラーになりません;; 説明不足ですいませんでした;; --------------------- try { school.dataload(); %> <jsp:forward page="2.jsp" /> <% } catch (Exception e) { %> ------------------------------
tatsuya6502

2016/02/07 08:21

ああ、なるほど。わかりました。 では、3件目のデーターの読み込みに問題があるということですね。そのエラーのメッセージをよく読んでください。そこにヒントが書かれているはずですよ。
guest

0

ログは見れますか。エラー情報はありますか。
最初のblockにtry catchでexceptionをprintoutするのはいかがですか。
while (rs.next())こちらでdebugpointを設置してデバッグするのはいかがですか。
3行目のrecordは問題のあるデータかもしれませんので手動で削除して再実行するのはどうでしょうか。

投稿2016/02/07 07:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/07 08:16

お早い回答ありがとうございます;; ログは以下の通りになっており、エラーはないと思われます。 -------------- http://localhost:8084/WebApplication1を増分デプロイします http://localhost:8084/WebApplication1の増分配置を完了しました http://localhost:8084/WebApplication1を増分デプロイします 再ロード中... reload?path=/WebApplication1 OK - コンテキストパス /WebApplication1 のアプリケーションを再ロードしました run-deploy: Browsing: http://localhost:8084/WebApplication1/15/1.jsp run-display-browser: run: ビルド成功(合計時間: 3秒) ------------------------- 三行目のレコードにかんしては削除して再実行しても変わりありませんでした;; printoutする方法とdebupointを設置してデバッグする方法を具体的に教えていただけないでしょうか?;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問