昨日はもちろん、今日のDBUtilsフレームワークを誘発することがあるので、多くの伏線を行って、私たちと書かれたその実施の原則のためのシンプルなフレームワークも同様です。
いくつかの単語の男はそれが入力されている、と述べました。
コモンズ-dbutils JDBCは、それはコストが非常に低く、大幅に作業負荷をコーディングJDBC、だけでなく、プログラムのパフォーマンスには影響しませんdbutilsの使用を簡素化することができます学習、JDBCのシンプルなパッケージで、オープンソースのツールライブラリApacheの団体です。dbutilsを休止して好きではないそう多くは、同社の最初の選択肢になります。
JARパッケージをダウンロード:リンクします。https://pan.baidu.com/s/1BKtq_VoBw52qyIJr6c_CZg
抽出コード:skrfは
ああ、操作がより便利に、このオープンBaiduのネットワークディスク電話アプリケーションの内容をコピー
APIの説明:
- org.apache.commons.dbutils.QueryRunner ---コアオペレーティングクラス
- org.apache.commons.dbutils.ResultSetHandler
- org.apache.commons.dbutils.DbUtils ---ツール
ResultSetHandler最も完全なデータベース操作と組み合わせて使用することができるQueryRunner簡略化されたクラスのSQLクエリは、大幅に符号量を削減することができます。
QueryRunnerクラスには2つのコンストラクタを提供します:
デフォルトコンストラクタが
javax.sql.DataSourceのコンストラクタのパラメータを作成する必要があります。
過負荷4クラスコンストラクタQueryRunnerがあるQueryRunner(データソースDS)はデータベーストランザクションDBUtils管理フレームワークにQueryRunnerオブジェクトを構成した場合、それぞれのデフォルトのトランザクションは、単一のケースをSQL。このとき、この方法は、接続パラメータなしで使用する必要があります。
あなたは何も接続プーリングフレームワークが存在しないので、あなたは、自分の業務を管理する必要がQueryRunnerオブジェクトQueryRunner()コンストラクタを使用している場合は接続パラメータを使用する必要があり、この時点でデータベースに接続して取得することはできません。
Dbutilsツールは、退屈な作業のいくつかはツールの利用を達成するために作ることができる前にして、リソース、制御トランザクションを閉じ、ドライブをロードすることができます。
例準備を示しています。
新しいWebプロジェクトを作成し、jarファイルのパッケージをインポートすることを忘れないでください。
新しいテストクラスはQueryRunnerTest
後続のテストを容易にするために、クラスのメンバ変数を定義します
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
挿入テストコードを書きます
@Test
public void testInsert() throws SQLException{
//1、创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner(dataSource);
//2、准备方法参数
String sql ="insert into account values(null,?,?)";
Object[] param = {"fff",1000};
//3、调用方法
queryRunner.update(sql, param);
}
DBUtils接続管理ツールキットと呼ばとしてQueryRunner Constructorオブジェクトを使用するには、手動でリソースを解放する必要はありません、それは私たちがリソースを解放するのに役立ちます。
そして、テストコード実行
正常に挿入します。
次のテスト更新SQLは、テストコードを書きます
@Test
public void testUpdate() throws SQLException{
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "update account set money = ? where name = ?";
Object[] param = {2000,"fff"};
queryRunner.update(sql,param);
}
テストコードがされて実行して
正常に変更。
次のテストは、テストコードを書く、SQLを削除します
@Test
public void testDelete() throws SQLException{
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "delete from account where id = ?";
queryRunner.update(sql,2);
}
実行したテストコードがされて
正常に削除されました。
今、私たちは、転送シナリオをシミュレートします。
@Test
public void testTransfer() throws SQLException{
double money = 100;
String outAccount = "aaa";
String inAccount = "bbb";
String sql1 = "update account set money = money - ? where name = ?";
String sql2 = "update account set money = money + ? where name = ?";
QueryRunner queryRunner = new QueryRunner(dataSource);
queryRunner.update(sql1,money,outAccount);
//产生一个错误
int d = 1 / 0;
queryRunner.update(sql2,money,inAccount);
}
テストコードを実行していない
避けるために、しばらくBBBアカウントの量がこれ以上あなたがDBUtils管理に接続されているので、100未満、AAAアカウントをプログラムエラーを、デフォルトのSQLがトランザクションであるので、我々は自分の業務を管理しなければなりませんこれが起こります。
コードを変更する転送
@Test
public void testTransfer() throws SQLException{
double money = 100;
String outAccount = "aaa";
String inAccount = "bbb";
String sql1 = "update account set money = money - ? where name = ?";
String sql2 = "update account set money = money + ? where name = ?";
//手动事务管理
QueryRunner queryRunner = new QueryRunner();
Connection conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
try {
queryRunner.update(conn,sql1,money,outAccount);
//产生一个错误
int d = 1 / 0;
queryRunner.update(conn,sql2,money,inAccount);
DbUtils.commitAndCloseQuietly(conn);
} catch (Exception e) {
DbUtils.rollbackAndCloseQuietly(conn);
e.printStackTrace();
}
}
このとき、実行コード
テーブルデータは、更新操作がロールバックされることを示す、変更されていません。