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
}
}
補足
質問の意図がわかりにくく申し訳ございません。 バイナリーデータをバイト数を決め、読み込んで。 例 (1レコードのバイト数が50の場合50読みこんで) その中のキーとなる何バイト~何バイト目を違う変数にいれ。 そのキーとなるものがあらかじめ用意しておいた変数の値と 同じ場合、違うファイルに出力するというプログラムを作りたいと思っております。