問題タブ [jackcess]
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 - Jackcess で複数列インデックスを使用して最初の列で一致させる
Jackcess 2.1.5 を使用して、colA と colB に複数列のインデックスを持つ Access 2003 テーブルからデータを読み取ります。これは、colAとcolB の値が与えられた場合に正常に機能します。
現在、理論的には、そのようなインデックスを使用して、 colA onlyの値に一致するすべての行を取得できます。しかし、Jackcess でこれを行うにはどうすればよいでしょうか。newEntryIterable
またはを使用して動作させることができませんEntryIterableBuilder
現在、colA のみをカバーする別のインデックスがあります。これが唯一の解決策ですか?
java - Jackcess Javaで画像を挿入する方法
私は Jackcess の新しいユーザーです。
MS Access テーブルに新しい行を挿入するために addRowFromMap メソッドを使用していますが、画像を挿入できません。
テーブルの列には正しい形式がありますが、それを行うことはできません。
java File format、java bytearrayを挿入しようとしましたが、何もしません。
提案やドキュメントへのリンクはありますか?
前もってありがとう、エミリアーノ
java - MS Access テーブル行のテキストの検索と置換が機能しない
ディレクトリを指定すると、私のアプリケーションは.mdb
、Jackcess API を使用して MS Access データベースを走査してロードします。各データベース内には、テキストを含むGCMT_CMT_PROPERTIES
という名前の列を持つ名前のテーブルがあります。cmt_data
また、文字列から特定の単語を置き換えるときに辞書として使用するMapper
オブジェクト (本質的にはに似ていますが、重複キーを許可する) もあります。Map<String,String>
したがって、たとえば if mapper
containsfox -> dog
の文は に"The fox jumps"
なり"The dog jumps"
ます。
このプログラムで使用する設計は次のとおりです。
TaskMdbUpdater
指定された db ファイルで適切なテーブルと列を見つけ、テーブルの各行で「検索と置換」ルーチンを繰り返し実行して、辞書から単語を検出し、それらを置換します (上記の例に示すように)。データベースを閉じる前にその行を更新します。の各インスタンスはTaskMdbUpdater
、Jackcess API がDatabaseBuilder
割り当てられたバックグラウンド スレッドであるため、データベースを操作できます。
現在の状態では、コードは例外をまったくスローせずに実行されていますが、Access を介してデータベースを「手動で」開いて特定の行を検査すると、変更されていないように見えます。問題の原因を突き止めようとしましたが、運が悪かったので、サポートをいただければ幸いです。さらにコードを表示する必要がある場合は、お知らせください。それに応じて質問を更新します。
更新 1:
カスタムStringUtils.findAndReplace
ロジックを検証するために、合格している次の単体テスト (JUnit で) を実行しました。
TaskMdbUpdater
障害点がどこかにあると思われるため、いくつかのロギングコードを含めて、ここにクラスを個別に含めていcall
ます。
これが私のログからの小さな抜粋です。ご覧のとおり、テーブルを開いた後は何もしないようで、少し当惑しました。
この時点以降、ログにはエントリ エントリがなくなり、プロセッサは 100% の負荷で急上昇し、アプリケーションを強制終了するまでそのままになります。これは、プログラムが無限の while ループに陥ったことを意味している可能性があります。
更新 2
さて、logTRACE
を に出力することで、問題をさらに絞り込みましたstdio
。私のperformFindAndReplaceOnString
は非常に非効率的で、長い文字列を削っているだけなので、これらのデータベースの最初の行を通過することはありません。このユースケースで文字列置換を効率的に実行する方法について何か提案はありますか?
java - Jackcess: MSAccess データベースの文字セットが正しくありません
「暗号化された」文字列を含む MS-Access データベースがあります。これらは次のようになります。
しかし、これらの文字列の長さが平文の長さと正確に一致することにすぐに気付きました (私は平文を知っています)。そのため、Excel で少し試してみたところ、-関数を使用すると=CODE(<char>)
(デフォルトの文字セットで文字コードを取得し、その逆も=CHAR(<number>)
可能)、この数値を記号が表す文字の文字コードと xor することがわかりました。常に同じ結果が得られます。つまり、Java と voila でこれらの値を使用して配列を作成するだけです。Excel の例 (右側の「配列」):
例: ">>" は (10 進) 187 のインデックスを持っているため、187xor253 は 70 => "F" を生成します。
現在、jackcess を使用してこれらの値にアクセスしています。「復号化」はほとんど問題ありませんが、文字列から間違った文字を取得することがあります。Excel では、すべてが正常に機能します。最良の結果をもたらすコード:
しかし、私が言ったように、一部の文字はまだ間違っていますが、Excel ではすべて問題ありません。出た数字をプリントアウトするgetBytes("cp1272")
とエクセルとは全然違います。
私が間違っている可能性があることと、JavaがExcelとは異なる値を与えることがあるのはなぜですか?より良いアプローチは何でしょうか?私はすでに文字セットのすべての組み合わせを試しました。いくつかは他の失敗した場所で機能しましたが、他の間違った結果が得られました。