感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaでMySQLに接続して、値を取得して表示するサンプル。

スポンサーリンク

JavaでDBのConnectionを取得するサンプル

まずはMySQLのコネクションを取得するサンプルを作ってみる。
このMySQLJDBCドライバーを指定するときの引数(ドライバのクラス名)がわからない人がいるかもしれない。

Class.forName(引数)

そういうときは、参照ライブラリにあるmysql-connector-java-5.0.X-bin.jarを開いてみよう。
パッケージがあると思うけど、com.mysql.jdbcというのがあるはずだ。
これを開くと、Driver.classというのがある。
Class.forNameは引数に完全修飾名を指定するわけだから、この「パッケージ+クラス名」を指定するといい。
そもそもClass.forName()メソッドは、引数に指定した名前のクラスをロードして返すメソッドである。

以下は前回の記事で作ったDBにコネクションを張るサンプル。

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBManager {
    private static String driverName = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost/testdb";
    private static String user = "root";
    private static String pass = "1234";
    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName(driverName);
            con = DriverManager.getConnection(url,user,pass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
}

これを実行してみる。

package action;

import java.sql.Connection;
import java.sql.SQLException;

import dao.DBManager;

public class Main {
    public static void main(String[] args) throws SQLException {
        Connection con = DBManager.getConnection();
        System.out.println("con=" + con);
        con.close();
    }
}

コンソールにこんなのが表示される。

con=com.mysql.jdbc.Connection@5ffb18

JavaMySQLのテーブルからデータを取得してコンソールに表示してみる。

まずは、値の入れ物となるBeanクラス。これは読み飛ばしてOK。

package bean;

public class StockBean {
    private String code;
    private String name;
    private int openPrice;
    private int highPrice;
    private int lowPrice;
    private int closePrice;
    
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getOpenPrice() {
        return openPrice;
    }
    public void setOpenPrice(int openPrice) {
        this.openPrice = openPrice;
    }
    public int getHighPrice() {
        return highPrice;
    }
    public void setHighPrice(int highPrice) {
        this.highPrice = highPrice;
    }
    public int getLowPrice() {
        return lowPrice;
    }
    public void setLowPrice(int lowPrice) {
        this.lowPrice = lowPrice;
    }
    public int getClosePrice() {
        return closePrice;
    }
    public void setClosePrice(int closePrice) {
        this.closePrice = closePrice;
    }
    
}

次に、値を詰め込むメソッド。記事の一番上で作ったDBManagerクラスを使ってコネクションを取得。
値をDBから取ってきて、ResultSetに詰め込んでいる。

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import bean.StockBean;

public class SampleDAO {
    private String selectAll = "SELECT * FROM stock_value";
    
    public void printSelectAll() throws SQLException {
        Connection con = DBManager.getConnection();
        Statement stmt = con.createStatement();
        ResultSet result = stmt.executeQuery(selectAll);
        List stockList = new ArrayList();
        while (result.next()) {
            StockBean bean = new StockBean();
            bean.setCode(result.getString(1));
            bean.setName(result.getString(2));
            bean.setOpenPrice(result.getInt(3));
            bean.setHighPrice(result.getInt(4));
            bean.setLowPrice(result.getInt(5));
            bean.setClosePrice(result.getInt(6));
            stockList.add(bean);
        }
        
        StockBean bean2;
        for (int i = 0; i < stockList.size(); i++) {
            bean2 = (StockBean) stockList.get(i);
            System.out.print(bean2.getCode() + ":");
            System.out.print(bean2.getName() + ":");
            System.out.print(bean2.getOpenPrice() + ":");
            System.out.print(bean2.getHighPrice() + ":");
            System.out.print(bean2.getLowPrice() + ":");
            System.out.println(bean2.getClosePrice());
        }
    }
}

ためしにこのメソッドをMainで使ってみると・・・

package action;

import java.sql.Connection;
import java.sql.SQLException;

import dao.DBManager;
import dao.SampleDAO;

public class Main {
    public static void main(String[] args) throws SQLException {
        Connection con = DBManager.getConnection();
        SampleDAO dao = new SampleDAO();
        dao.printSelectAll();
        con.close();
    }
}

このように値がちゃんと取得できて、コンソールに表示できる。

1:hoge:509:254:726:596
2:fuga:496:44:245:279
3:foo:177:350:16:997
4:bar:670:903:472:743
5:boo:244:188:258:628
6:hello:983:662:500:681
7:world:504:597:723:140
8:wata:565:904:78:974
9:mi:648:156:998:986
10:black:285:179:814:162

さて、今度はサーブレットで値を取得して、それをブラウザに表示させるサンプルを作りたいところだけど、他にもやりたいことがあるので保留。

ResultSetのgetメソッドと、Javaの型のまとめ

Javaの型 RDBの主な型 ResultSetのメソッド
String CHAR,VARCHAR,LONGVARCHAR getString
byte[] BINARY,VARBINARY,LONGVARBINARY getBytes
double DOUNBLE,FLOAT getDouble
int INTEGER getInt
long BIGINT getLong
java.sql.Date DATE getDate
java.sql.Time TIME getTime
java.sql.Timestamp TIMESTAMP getTimestamp
java.sql.Blob BLOB getBlob

参考文献

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)


すべてのJavaプログラマはこの本を読むべきだと思う。
いつ読んでも必ず発見がある。
本当に素晴らしい本。

感謝のプログラミング

今回で感謝のプログラミングは【475時間目】
10000時間まで、あと【9525時間】