フレサーモン難民

備忘録など ほぼ自分向けのまとめ

JDBC

JDBC APIJavaプログラムからデータベースを利用する際に必要になるクラス

主なクラスには以下のものがある。またjava.sqlパッケージに含まれてる。

DriverManager:データベースへの接続の準備
Connection:データベースへの接続や切断
PreparedStatementSQL文の送信
ResultSet:データベースから検索結果を受け取る

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

public class ...

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rset = null;

String JDBC_URL = "jdbc:postgresql://localhost:5432/DB名";
String JDBC_USER = "postgres";
String JDBC_PASS = "~~~~~~";

try {

  // データベースの接続
  conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);

  /* *******************************
    DB操作処理をするメイン処理部分
  ******************************** */

} catch ( SQLException e ) {
  e.printStackTrace();
}

DB操作処理部分

更新系SQLの場合:INSERT、UPDATE、DELETE

例:

PreparedStatement pstmt = conn.prepareStatement("delete from employee where age <= ?");

pstmt.setInt(1, 40);
int r = pstmt.executeUpdate();

if (r != 0) {
  System.out.println(r + "件の情報を削除しました。");
} else {
  System.out.println("該当する情報はありませんでした。");
}
pstmt.close();
PreparedStatementクラスで、SQL文のひな型を準備する。
PreparedStatement pstmt = conn.prepareStatement(SQL文のひな型);
SQL文のひな型に値を入れる。

下の他にもsetDouble()、setDate()などがある。

pstmt.setInt(パラメータ番号, 数値);
pstmt.setString(パラメータ番号, 文字列);
SQL文を送信する:PreparedStatemtntクラスのexecuteUpdate()メソッド

「処理の結果変更された行数」が戻り値で返される。
更新系のSQL文(UPDATE、INSERT、DELETE)では送信は全てこのメソッドで行える。

int r = pstmt.executeUpdate();

検索系SQL(SELECT)の場合

検索系SQLでも、PreparedStatementクラスでSQL文のひな型を準備し、それにset〇〇メソッドで値を入れるまでは更新系SQLと同じ。検索系SQLでは、SQL文を実行する際に用いるメソッドが更新系SQLとは異なる。

検索系SQL文の送信
ResultSet rset = pstmt.executeQuery();


ResultSetオブジェクトの持つ主なメソッド

next():戻り値はboolean、注目する行を1つ進め、成功したらtrue、すでに最終行の場合はfalseを返す。
getInt(列番号)、getInt(列の名前):指定した列の整数値を取り出す。
getString(列番号)、getString(列の名前):指定した列の文字列を取り出す。

検索系SQL文を送信して返り値として戻されたResultSetオブジェクトには、検索系のSQL文で注目した1行分の情報しか入っていない。

while( rset.next() ){
  System.out.println(rset.getString("NAME"));
}