DISTRICT 37

なにか

Javaでよく使うコード

なぜか体で覚えられないコード。IDEを日常的に使ってると輪をかけて覚えられないんだよなぁ。使うときは例外処理とかちゃんと書くように。

ファイル読み込み

FileInputStream fis = null;
BufferedReader br = null;
try {
    File file = new File("hoge.txt");
    fis = new FileInputStream(file);
    br = new BufferedReader(new InputStreamReader(fis));
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    if (br != null) {
        try {
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ファイル書き込み

FileOutputStream fos = null;
String data = "hogehoge";
try {
    File file = new File("hoge.txt");
    if (!file.exists()) {
        file.createNewFile();
    }
    fos = new FileOutputStream(file);
    fos.write(data.getBytes());
    fos.close();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (fos != null) {
        try {
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JDBC(MySQL)

String URL = "jdbc:mysql://yourserver:50000/yourdb";
String USER = "Hoge";
String PASS = "HogePass";

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(URL, USER, PASS);
con.setAutoCommit(false);

// SELECT
{
    PreparedStatement st = con.prepareStatement("SELECT * FROM HOGE WHERE HOGE = ?");
    st.setString(1, "hoge");

    ResultSet rs = st.executeQuery();
    while (rs.next()) {
        String hoge = rs.getString(1);
    }

    rs.close();
    st.close();
}

// UPDATE INSERT DELETE
{
    PreparedStatement st = con.prepareStatement("DELETE FROM HOGE WHERE HOGE = ?");
    st.setString(1, "hoge");

    int count = st.executeUpdate();
    con.commit();

    st.close();
}

con.close();

このコードをよく使ってるってことは、ファイル読み込んでDBに突っ込んだりDBからとってきたデータをファイルに書き込んだりばっかしてんだなと思った。この処理に関してJavaは作法がありすぎてコードを体で覚えられないってのが難点。ほかのLL言語だと直感的にさっくりかけたりできるんだけどな。でもJDBCまわりのコーディングは好きかも。PrepareStatementの#addBatch()とかないとトランザクションとか心配になっちゃう。あとはResultSetでrs.size()とかして件数がわかればいいのにといつも思う。ループを回してみないと件数がわからないというのは不便じゃないのかなぁ。