こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

javaについて質問です。

初めまして、情報系の大学に進学して課題を出されました、この接続クラスを使って全件表示させる、4件インサートする、2から4行目までを取得する実行クラスを作りなさいとの事で全く分からなくて悩 んでおります、どうかご教授お願いいたします。

mysqlにはすでにIDNO(3) Name Addressが 入ってる状態を想定して答えなさいとの事。。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
public class CatWalkhitomin{

//** データベースとのコネクションを作る変数 */
private Connection co;
String url = "jdbc:mysql://localhost/reportdb?useUnicode=true&characterEncoding=SJIS";
String user = "root";
String password = "hitomin1995";

/**
* DBに接続、トランザクション開始
*/
public void connect() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
co = DriverManager.getConnection(url, user, password);
co.setAutoCommit(false);
return;
}
public void disconnect() throws Exception{
co.close();
return;
}
public void commit() throws Exception{
co.commit();
return;
}
public void rollback() throws Exception{
co.rollback();
return;
}
/**
* Insert、Update、Deleteを実行
* @param sql SQL文
* @return iCount 更新件数
*/
public int updateExec(String sql) throws Exception{
PreparedStatement ps = co.prepareStatement(sql);

//executeUpdateメソッドでsql文を実行し戻り値の更新件数をiCountに代入

int iCount = ps.executeUpdate();
      return iCount;
}
/**
* Select文を実行 取得した値を戻す
* @param sql SQL文
* @return strData 取得した値
*/
public String[][] select(String sql) throws Exception{

      //sql文を実行する為のインスタンスをsql文select count(*) from numatatableで生成。

PreparedStatement ps = co.prepareStatement("select count(*) from numatatable");

//executeQuerymメソッドでsql文を実行。読み込んだデータの中身をrsに代入
ResultSet rs = ps.executeQuery();

rs.next(); //next()で行データを読み込む準備

int rowCount = rs.getInt(1) ;//rowCountへnumatatableの行数を代入

//selectExecメソッドの第二引数を0、第三引数をrowCountとして全ての行データを二次元関数にしてreturn
return selectExec(sql, 0, rowCount);
}
/**
* Select文を実行 取得した値を戻す
* @param sql : SQL文 <br> fromIndex : 取得開始行
* @return strData : 取得した値
*/
public String[][] select(String sql, int fromIndex) throws Exception{
PreparedStatement ps = co.prepareStatement("select count(*) from numatatable");

ResultSet rs = ps.executeQuery();
rs.next(); //next()で行データを読み込む準備
int rowCount = rs.getInt(1);
return selectExec(sql, fromIndex, rowCount);
}
/**
* Select文を実行 取得した値を戻す
* @param sql : SQL文 <br> fromIndex : 取得開始行 <br> toIndex : 取得終了行
* @return strData : 取得した値
*/
public String[][] select(String sql, int fromIndex, int toIndex) throws Exception{
PreparedStatement ps = co.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData met = rs.getMetaData();

//テーブルの列の数を取得して変数coulumに代入
int coulum = met.getColumnCount();

// 1行分ずつ全てのデータを格納する為のArrayList

ArrayList<String[]> al = new ArrayList<String[]>();
while(rs.next()){ //rsの全てのデータを読み込むまでループ

//getRow()で現在の行を取得し、メソッドの第二引数の取得開始行以上かつ、第三引数以下であればtrue

if(rs.getRow() >= fromIndex && rs.getRow() <= toIndex){ String[] str = new String[coulum]; //1行分のデータをString[]に格納
for(int i = 0; i < coulum; i++){
str[i] = rs.getString(i + 1);
}
al.add(str); //ArrayListにデータを1行分づつadd
}
}
// 読み込んだ全てのデータが入っているArrayListを二次元配列に変換
String[][] strData = al.toArray(new String[al.size()][]);
return strData; //変換した上記のデータをreturn
}
}

投稿日時 - 2013-07-16 04:30:14

QNo.8178270

困ってます

質問者が選んだベストアンサー

No.1です。
よく見ると確かによくわからないですね。

(1)numatatableの構造がわからない。
 整数(3桁)のIDNO, キャラクタ(サイズ不明)のName, キャラクタ(サイズ不明)のAddress
 の3カラムを持つテーブルなんでしょうか?
(2)selectExecメソッドの実装が見当たらない。selectメソッドの誤り?
(3)selectメソッドは任意のSQLを指定するようになっているのに、
 何故かテーブル名固定でcount(*)を取得しています。
 どうせ課題のデータベースにはnumatatableテーブルにしかないからこれでOK、
 ということなんでしょうか?

あとコメントの書式がJavadocの体裁になっていませんね。
…やっぱり出題者に確認したほうがいいかもしれません。

投稿日時 - 2013-07-17 22:26:09

お礼

ありがとうございます!!仰るとおり間違いだらけで訂正して再出題されるとのことで3日くらいは猶予ができました。。

投稿日時 - 2013-07-18 14:03:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Javaの講義の1回目でいきなりこの課題、ということは無いと思いますが、
それまでの内容はきちんと消化できていますか?
この課題はJava自体の知識の他に基本的な関係データベースの知識が必要です。
そういった教材がある場合は、まずはそれを見てください。
そしてJavaで関係データベースを扱う仕組みとしてJDBCがあります。
教科書でJDBCが説明されていればそこを見てください。

ではがんばってください。

投稿日時 - 2013-07-17 00:32:01

お礼

進むのが早くてとりあえずやってみろとのことでどっかから良い課題みつけたと教授が拾ってきた課題だそうです。。
この問題があっているのかどうかも怪しいと学生の中では話題です。。

投稿日時 - 2013-07-17 09:00:23