2009-02-27 13 views
0

jdbc-odbcブリッジを使用してMS SQLデータベースに接続しています。挿入または更新を実行すると、データベースフィールドの長さまでパディングされたデータベースに文字列が挿入されます。この動作を無効にする方法はありますか(文字列はパディングなしでテーブルに挿入する必要があります)。sqlの挿入と更新時にjdbcが文字列を埋めないようにする

参考までに、SQL管理ツールとクエリアナライザを使用してパディングを含まないフィールド値を挿入することができます。したがって、これはjdbcまたはodbcのレイヤで発生していると確信しています。

:挿入を行うための呼び出しと同じように、プリペアドステートメントを使用している:

EDIT:

EDIT 2が何らかのデータベース内のフィールドは、X = 50のnvarchar(X)、としてリストされている、255、

PreparedStatement stmt = new con.prepareStatement("INSERT INTO...."); 
stmt.setString(1, "somevalue"); 
+0

varcharまたはchar? –

+0

まだ、ドライバを変更することを検討してください。 – OscarRyz

+0

私はあなたに聞きました - 最終的にはjtdsを使用しますが、展開はより複雑です(ネイティブ認証を使用する場合は特に必要です)。 jdbc-odbcブリッジは非常に使いやすく、私たちのアプリは実際のSQL使用量については非常に軽いです(1日に50件のクエリと100件のインサートがあります)。 –

答えて

4

どのように文字列を設定していますか?もしそうなら、あなたは?:

PreparedStatement stmt = new con.prepareStatement("INSERT INTO...."); 
stmt.setString(1, "somevalue"); 

を行っている、これを試してみてください。

stmt.setObject(1, "somevalue", Types.VARCHAR); 

繰り返しますが、これはちょうどあなたが挿入されているか見ることなく推測されます。

+0

それはそうです。おそらく別のドライバ(jtdsかもしれない)で作業していたかもしれませんが、setObjectの呼び出しは完全に機能します。ありがとう! –

1

データベースまたはVARCHARにCHARフィールドを使用していますか?

CHARはフィールドのサイズを指定します。 VARCHARはそうではありません。

JDBCがこれを引き起こしているとは思わない。

+0

ええ - それは私が考えていたものです。しかし、jdbcからの更新呼び出しを行うと、nvarcharsはまだパディングされています。クエリアナライザなどを使用して更新を行うと、パディングなしで移動します。 –

0

バンドルされたSun JDBC-ODBCブリッジドライバを使用している場合は、適切なMS SQL JDBCドライバへの移行を検討することをお勧めします。 Sunは、本番環境でブリッジドライバを使用することは推奨しません。

JDBC-ODBCブリッジドライバのみを実験的使用時や、他の選択肢が利用できないために推奨されます。

よりターゲットを絞ったドライバに移動すると、問題をすべて解決する可能性があります。または、バグを修正する際に、少なくとも実稼動環境に適したソリューションが提供されます。

+0

ありがとうございます - この現状では、私たちは 'または他の代替手段が利用できない場合'に該当します。これはクライアント側の早期リリースです。この段階では、展開の規模と複雑さを増やすことは望ましくありません(しかし、ベータリリースによって実際のドライバーになるでしょう) –

1

通常のSQLツール(MS SQL SeverなどのToadについてはわかりません)を使用してインサートを作成できる場合は、ドライバを変更する必要があります。

Microsoft SQL Server JDBCタイプIVドライバを使用してください。

することは、このリンクを試す

http://www.microsoft.com/downloads/details.aspx?familyid=F914793A-6FB4-475F-9537-B8FCB776BEFD&displaylang=en

を与える残念ながら、ダウンロードのこれらの種類は、ごみの多くが付属しています。インストールツールと何百ものファイルがあります。どこか別の場所に

intalldir \ libに\ someSingle.jar

コピーしてアンインストール/残りの部分を削除します:ちょうどのようなものを探してください。

私は数ヶ月前にこれを行いましたが、残念ながら私はそれがどこにあったか正確には思い出せません。[OK]を

EDIT

、私はそれを得ました。ダウンロードのページ・クリックの終わりに

クリックして「私は同意し、UNIXのバージョンをダウンロードしたい」

にこれは通常の圧縮ファイルです(使用がRARまたは他の勝利)と、そのためにそこに見えますsigle jar。

これでうまくいくはずです。

+0

私は3〜4年間、高性能取引アプリケーションでMS SQLドライバーを使用してきました。その非常に信頼性の高い。 – Fortyrunner

+0

FYI - 他のプロジェクトでjtdsを使用しています。私は非常に多くの問題が発生したすべての問題に対する開発者のパフォーマンスと応答性に非常に満足しています。 –

関連する問題