問題タブ [autocommit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ラージ オブジェクトは自動コミット モードでは使用できない場合があります
PostgreSQL データベースで Hibernate を使用する Spring アプリケーションがあります。データベースのテーブルにファイルを保存しようとしています。行をファイルに格納しているようですが (EntityManager で persist メソッドを使用するだけです)、オブジェクトがデータベースから読み込まれると、次の例外が発生します。
データをロードするために MultipartFile 一時属性を使用し、そのセッターで永続化したい情報 (byte[]、fileName、size) を設定しています。私が永続化しているエンティティは次のようになります (残りのゲッター/セッターは省略しました)。
永続化すると行にデータがあることがわかりますが、このメソッドを呼び出すと失敗します。
このメソッドは、結果にファイルを含むオブジェクトがある場合にのみ失敗します。persistence.xml に設定しようとしました
しかし、それは問題を解決しません。
一般に、アプリケーションは正常に機能し、トランザクションが終了したときにのみデータをコミットし、何かが失敗した場合はロールバックを実行するため、なぜこれが起こっているのかわかりません。
何か案が?
ありがとう。
アップデート
Shekhar によって提供されたリンクを見ると、呼び出しをトランザクションに含めることが提案されているため、サービス呼び出しをトランザクション内に設定して動作させました (@Transactional アノテーションを追加しました)。
問題は、データを保持したくないため、トランザクション内に含める必要がある理由がわかりません。データベースから一部のデータしかロードしていないときにコミットするのは意味がありますか?
ありがとう。
mysql - Django プログラムで何百もの MySQL UPDATE ステートメントを実行中に自動コミットを無効にする
Djangoプログラムで、何百ものUPDATEの前に自動トランザクション管理を明示的に無効にし、UPDATEの終了後に有効にする方法は?
http://docs.djangoproject.com/en/dev/topics/db/transactions/を調べましたが、手がかりが見つかりませんでした。
最初に次のコードを入れてみました
私も試しました
上記のいずれの方法でも、更新速度は向上しませんでした。上記のコードに問題はありますか?
mysql - AutoCommit が 0 に設定された DBI データベースハンドルが SELECT で適切なデータを返さない?
これは説明が難しい (そして非常に奇妙である) ので、我慢してください。問題とその修正について説明しますが、なぜそれが機能するのかを誰かが説明できるかどうかを確認したいと思います:)
mod_perl を使用する Web アプリケーションがあります。MySQL データベースを使用しており、定期的にデータベースにデータを書き込んでいます。これはモジュール式であるため、独自の「データベース」タイプのモジュールもあり、接続や更新などを処理します。database::db_connect() サブルーチンはデータベースへの接続に使用されAutoCommit
、0 に設定されます。
データベースから定期的にデータを取得し、返されるデータに応じてさまざまなタスクを実行する、別の Perl アプリケーション (スタンドアロン デーモン) を作成しました。そこに database.pm モジュールを含めているので、すべてを書き直したり複製したりする必要はありません。
私が経験している問題は次のとおりです。
アプリケーションは起動時にデータベースに接続し、無限にループして、X 秒ごとにデータベースからデータを取得します。ただし、データベース内のデータが更新された場合でも、データベースへの最初の接続/クエリで取得した「古い」データがアプリケーションに返されます。
たとえば、3 つの行があり、列「名前」には各レコードの値「a」、「b」、および「c」があります。行の 1 つを更新し (たとえば、コマンド ラインから mysql クライアントを使用)、名前を「c」から「x」に変更すると、スタンドアロン デーモンはそのデータを取得しません。 MySQL。tcpdump で db トラフィックをキャプチャしたところ、MySQL が実際にそのデータを返していることがはっきりとわかりました。SELECT で SQL_NO_CACHE を使用しようとしましたが (何が起こっているのかわからなかったので)、どちらも役に立ちませんでした。
次に、スタンドアロン デーモンで DB 接続文字列を変更し、AutoCommit
1 に設定しました。突然、アプリケーションが適切なデータを取得し始めました。
AutoCommit は INSERT/UPDATE タイプのステートメントにのみ影響し、SELECT ステートメントには影響しないと思っていたので、私は困惑しています。しかし、それは一見そうです、そして私はその理由を理解していません。
AutoCommit
が0 に設定されている場合に SELECT ステートメントがデータベースから「更新された」行を返さない理由と、AutoCommit
が 1 に設定されている場合に更新された行を返す理由を知っている人はいますか?
これは、スタンドアロンデーモンで使用している単純化された (エラーチェックなどを取り除いた) コードであり、更新された行を返しません。
1 に変更AutoCommit
すると、これが修正されます。なんで?
ありがとう :)
PS: 誰が気にするかわかりませんが、DBI バージョンは 1.613、DBD::mysql は 4.017、perl は 5.10.1 (Ubuntu 10.04) です。
perl - postgresql 接続と自動コミットをオフに設定
私はperlでプログラミングしており、postgresデータベースと(プログラム的に)既存の接続を持っています。接続が確立された後、接続コードを制御しません。自動コミットをオフに設定したいです。
どうやってそれをするのですか?対話的に行うと、何の変化も見られません。自動コミットをオフに設定して挿入すると、変更が表示されます。ロールバックを実行すると、トランザクションが存在しないことがわかります。
自動コミットをオフに設定し、作業を行ってからコミットしたいと考えています。既存の接続でそれをどのように達成しますか?
ありがとうレザ
python - SQLite3 がデータを保存するために commit() 呼び出しを必要としないのはなぜですか?
commit
PythonでSQLite3データベースにデータを保存するには、接続オブジェクトのメソッドを呼び出す必要があることをどこかで読みました。それでも、私はこれを行う必要はありません。なんで?
mysql - mysql jdbcでは、自動コミットはすべての接続に影響しますか?
接続プールを使用する場合、接続のautocommit = falseを設定すると、この接続にのみ影響しますか?
autocommit = trueを設定せずにこの接続を閉じて新しい接続を取得した場合、この接続のポリシーはautocommit = trueに設定されますか?
multithreading - スレッド間で共有される接続のJDBC自動コミット
私は、さまざまなアクティビティのために2つのワーカースレッドに渡されるConnectionオブジェクトを取得するサーブレットを持っています。ここで、1つのスレッドにトランザクションを追加する必要があります。
次のようなトランザクションを開始した場合:connection.setAutoCommit(false);
それは両方のスレッドに影響しますか?そうだと思います。
各スレッドの個別の接続を取得する必要がありますか?
ありがとう
multithreading - JDBC コミットが失敗し、autocommit=true の場合に commit を呼び出しました。マルチスレッドの休止状態セッションは何らかの形で自動コミットを変更しますか?
メインスレッドで同じ休止状態のセッションを使用するスレッド #2 を生成するメインスレッドがあります。スレッド#2は、メインスレッドからの長時間実行プロセスのために、db接続を維持するために数分ごとに「select 1」を実行します。メインスレッドが処理で完了すると、コミットが呼び出されますが、エラーが発生します:
メインスレッド内で、正常にコミットされる内部トランザクションを作成します。このエラーをスローするのは、コミット時の外部トランザクションだけです。自動コミットブール値を変更している可能性があるものはわかりません。接続を維持するために 2 番目のスレッドを導入する前は、このエラーは発生していませんでした。
java - Javaを使用してディレクトリツリーをSVNに自動コミットする
ファイルを含むディレクトリツリーをJavaツールでsvnに自動コミットしたい。
シェルとバットのスクリプトがあります
バット
bash:
それらは機能しますが、これらのスクリプト(たとえば、ANTスクリプト)のJava実装が必要です。Javaの実装はありますか?
php - PHP と MySQL: 自分でトランザクションを実行しますか?
MySQL でトランザクションを使用するというアイデアは優れています。何か問題が発生した場合にトランザクションをロールバックできるというアイデアも優れています。
私の質問は次のとおりです。アプリケーションでは、トランザクションを自分で制御する価値がありますか、それとも MySQL に処理してもらうことに価値がありますか? 言い換えれば、MySQL が提供する自動コミット機能に対して積極的な不信感を持つべきでしょうか?
例:
自動コミット機能に独自の便利な作業をさせる代わりに。
注: 私が書いているアプリケーションは、一度に 1 つのクエリのみを実行するように設定されています。変更される 2 つのクエリを確認する必要がある状況 (一部の (ほとんどの) 銀行やその他の金融アプリケーションのように) はありません。データ、成功。
これは主に、そのようなものを制御したいという願望から生まれています (そして、自動コミット機能には特定の欠如があります)。