ストアド・プロージャ実装してみる
ストアド・プロージャとは、複数の命令文をまとめて実行できるようにしたもののことを指し、複数の処理をまとめた関数だと言えば分かりやすいだろうか。この実装にはexecteBatchメソッドを利用する。確認に際して、複数のINSERT文を同時に実行するようにした。
ストアド・プロージャ実装してみる
前記事で作成した下記テーブルに対して、INSERT等の操作を実行することで確認を行った。
CREATE TABLE person ( id varchar(12) NOT NULL, name varchar(30) NOT NULL, sex varchar(1) NOT NULL, job varchar(12), PRIMARY KEY (id) );
INSERT 10件実行
PKであるid = 00000000000~000000000009までのデータをINSERTするストアド・プロージャを作成して実行。nameで検索して取り出せるようにtestで統一している。 SELECTによってid = 00000000000~000000000009までの10件が取り出せることが期待される。
public class Main { public static void main(String[] args) throws IOException { Connection con = null; int insertCount = 10; try { con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "test"); con.beginRequest(); String sql_delete = "DELETE FROM person WHERE name = ?;"; String sql_insert = "INSERT INTO person (id, name, sex, job) VALUES (? ,?, ?, ?);"; String sql_select = "SELECT * FROM person WHERE name = ?;"; PreparedStatement ps_delete = con.prepareStatement(sql_delete); ps_delete.setString(1, "test"); ps_delete.executeUpdate(); PreparedStatement ps = con.prepareStatement(sql_insert); for (int i = 0; i<insertCount; i++) { ps.setString(1, "00000000000"+i); ps.setString(2, "test"); ps.setString(3, Integer.toString(i)); ps.setString(4, "tester"); ps.addBatch(); } ps.executeBatch(); PreparedStatement ps_select = con.prepareStatement(sql_select); ps_select.setString(1, "test"); ResultSet rs = ps_select.executeQuery(); System.out.println("SELECT実行結果:"); for (int i = 0; i<insertCount; i++) { rs.next(); System.out.println("==== PERSON["+ i +"] ===="); System.out.println("id :" + rs.getString(1)); System.out.println("name:" + rs.getString(2)); System.out.println("sex :" + rs.getString(3)); System.out.println("job :" + rs.getString(4)); } } catch (Exception e) { System.out.println("エラー発生:" + e.getMessage()); } finally { if (Objects.nonNull(con)) con.close(); } } }
実行結果
SELECT実行結果:
==== PERSON[0] ====
id :000000000000
name:test
sex :0
job :tester
==== PERSON[1] ====
id :000000000001
name:test
sex :1
job :tester
==== PERSON[2] ====
id :000000000002
name:test
sex :2
job :tester
==== PERSON[3] ====
id :000000000003
name:test
sex :3
job :tester
==== PERSON[4] ====
id :000000000004
name:test
sex :4
job :tester
==== PERSON[5] ====
id :000000000005
name:test
sex :5
job :tester
==== PERSON[6] ====
id :000000000006
name:test
sex :6
job :tester
==== PERSON[7] ====
id :000000000007
name:test
sex :7
job :tester
==== PERSON[8] ====
id :000000000008
name:test
sex :8
job :tester
==== PERSON[9] ====
id :000000000009
name:test
sex :9
job :tester
まとめ
第六章は用語や概念などがSQLやDBに関わるものになるため、Javaの勉強だけではない知識が求められることとなる。ブログ主はDB周りの知識が乏しかったため苦労した。勉強する方はJavaだけでなく、DBに関する参考書等も横に置いておいた方が覚えやすいかもしれない。 前提としての環境を整えるのに、記事には書いていない苦労が裏ではかなりあった。そこは本題ではないので、少なくともJava Goldの勉強記事でまとめることはないが、Javaの勉強が一段落付いたら、DB周りの見識も深める時間を設けたいと思う。