JavaでSQLiteにJDBC接続してinsert/update/deleteするサンプルです。
(確認環境:Java 8,SQLite 3.26.0,Eclipse 4.7,Windows 10)
目次
SQLの実行 | insertのサンプル |
updateのサンプル | |
deleteのサンプル | |
プレースホルダ | |
PreparedStatement | |
ドライバ | JDBCドライバを取得する |
環境 | 接続先のデータベースとテーブル |
insertのサンプル
SQLiteにJDBC接続してインサートを実行するサンプルです。
package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test1 {
public static void main(String[] args) {
final String URL
= "jdbc:sqlite:E:\\dev\\sqlite-test\\test1.db";
// final String USER = "";
// final String PASS = "";
final String SQL = "insert into employee(id,name,romaji) VALUES(?,?,?)";
try(Connection conn =
DriverManager.getConnection(URL)){
conn.setAutoCommit(false);
try(PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setString(1,"4");
ps.setString(2,"竹田");
ps.setString(3,"takeda");
ps.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
System.out.println("rollback");
throw e;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("処理が完了しました");
}
}
}
10行目は、SQLiteのデータベースの場所を指定しています。
11,12行目のユーザーとパスワードは、SQLiteにはありません。
13行目は、プレースホルダを使用したSQLです。(?)の箇所はプレースホルダです。
15~16,20行目は、try-with-resources構文です。リソースを自動でクローズします。
18行目は、setAutoCommitメソッドで手動コミットするようにしています。デフォルトは自動コミットモードです。自動コミットモードは、SQLを実行する毎にコミットされます。
21~23行目は、プレースホルダに値をセットしています。1つめの引数はプレースホルダの位置です。2つめの引数は値です。
26行目は、SQL処理が成功した場合で、commitメソッドを実行します。
28行目は、SQL処理で例外が発生した場合で、rollbackメソッドを実行します。
updateのサンプル
SQLiteにJDBC接続してアップデートを実行するサンプルです。
package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test1 {
public static void main(String[] args) {
final String URL
= "jdbc:sqlite:D:\\dev\\sqlite-test\\test1.db";
// final String USER = "root";
// final String PASS = "";
final String SQL
= "update employee set name = ? ,romaji = ? where id = ?";
try(Connection conn =
DriverManager.getConnection(URL)){
conn.setAutoCommit(false);
try(PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setString(1,"山田");
ps.setString(2,"yamada");
ps.setInt(3,2);
ps.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
System.out.println("rollback");
throw e;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("処理が完了しました");
}
}
}
10行目は、SQLiteのデータベースの場所を指定しています。
11,12行目のユーザーとパスワードは、SQLiteにはありません。
14行目は、プレースホルダを使用したSQLです。(?)の箇所はプレースホルダです。
16~17,21行目は、try-with-resources構文です。リソースを自動でクローズします。
19行目は、setAutoCommitメソッドで手動コミットするようにしています。デフォルトは自動コミットモードです。自動コミットモードは、SQLを実行する毎にコミットされます。
22~24行目は、プレースホルダに値をセットしています。1つめの引数はプレースホルダの位置です。2つめの引数は値です。
24行目は、DBの項目(id)の型がint型のため、setIntメソッドを使用しています。
27行目は、SQL処理が成功した場合で、commitメソッドを実行します。
29行目は、SQL処理で例外が発生した場合で、rollbackメソッドを実行します。
deleteのサンプル
SQLiteにJDBC接続して削除を実行するサンプルです。
package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test1 {
public static void main(String[] args) {
final String URL
= "jdbc:sqlite:E:\\dev\\sqlite-test\\test1.db";
// final String USER = "";
// final String PASS = "";
final String SQL = "delete from employee where id = ?";
try(Connection conn =
DriverManager.getConnection(URL)){
conn.setAutoCommit(false);
try(PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setInt(1,4);
ps.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
System.out.println("rollback");
throw e;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("処理が完了しました");
}
}
}
10行目は、SQLiteのデータベースの場所を指定しています。
11,12行目のユーザーとパスワードは、SQLiteにはありません。
13行目は、プレースホルダを使用したSQLです。(?)の箇所はプレースホルダです。
15~16,20行目は、try-with-resources構文です。リソースを自動でクローズします。
18行目は、setAutoCommitメソッドで手動コミットするようにしています。デフォルトは自動コミットモードです。自動コミットモードは、SQLを実行する毎にコミットされます。
21行目は、プレースホルダに値をセットしています。1つめの引数はプレースホルダの位置です。2つめの引数は値です。
24行目は、SQL処理が成功した場合で、commitメソッドを実行します。
26行目は、SQL処理で例外が発生した場合で、rollbackメソッドを実行します。
プレースホルダ
- SQL文中の(?)がプレースホルダです。動的に値をセットできます。
- 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
- 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
- place=場所、holder=入れものです。
PreparedStatement
- PreparedStatementは、プリコンパイルされたSQL文を表すオブジェクトです。
- Prepared=準備された、Statement=文です。
- 以下はJava8 API仕様のPreparedStatementインターフェースのリンクです。https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html
JDBCドライバを取得する
SQLiteのJDBCドライバは、以下のmvnrepositoryのサイトからmavenまたはjarファイルで取得します。
https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc
jarファイルから取得する場合
上記遷移先の画面で取得したいバージョンの数値をクリックして、以下の画面のjarの箇所をクリックするとダウンロードできます。
ダウンロードしたjarファイルを任意の場所に配置します。
例:sqlite-jdbc-3.27.2.1.jar
JDBCドライバをクラスパス(ビルドパス)に追加する
JDBCドライバ(sqlite-jdbc-3.27.2.1.jar)をクラスパスに追加します。
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
接続先のデータベースとテーブル
接続先のデータベースとテーブルについては、以下を参照願います。
SQLiteのインストールとSQLを実行するサンプル
関連の記事