7

このコードを使用して、データベースにデータを挿入します。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:war_odbc");
PreparedStatement st =
   con.prepareStatement(
      "INSERT INTO Actors(FirstName,LastName,Age) VALUES(?,?,?)" );
st.setString(1, "Robert");
st.setString(2, "de Niro");
st.setInt(3,45);
st.executeUpdate();     
con.close();

デバッガーを使用して一度に 1 行ずつステップ実行すると、すべてうまくいきます。それを使用せずにアプリケーションを実行すると、次の例外が発生します。

 [Microsoft][ODBC Driver Manager] Invalid string or buffer length
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)

Windows7 64ビットを使用しています。私は管理ツール、データ ソース (ODBC) に行き、正常にテストしました。

4

3 に答える 3

0

sun最善の解決策は、パッケージからこのクラスの使用を停止することです(開発者が「sun」パッケージを呼び出すプログラムを作成しない理由)。また、このドライバーは非常に古く、ODBC呼び出しでJDBC呼び出しを変換するタイプ1ドライバーです。

現在、ほぼすべてのDBベンダーがタイプ4ドライバーを実装しています。このドライバー実装は、JDBC呼び出しをベンダー固有のデータベースプロトコルに直接変換します。

また、このドキュメントによると、このブリッジはJDK8で削除されるため、ポータブルで適応性のあるソリューションが必要な場合は、このブリッジを使用することをお勧めしません。

于 2013-02-15T11:03:09.480 に答える
0

st.setInt(2, "de Niro");と置き換えますst.setString(2, "de Niro");

于 2013-02-14T16:32:46.703 に答える
0

提供されたコード スニペットに関するいくつかのポイント。

  1. st.setInt(2, "デニーロ");
    ここでは、クエリの 2 番目のパラメーターとして「string」を設定していますが、setInt() メソッドを使用しており、それは正しくありません。

  2. それはあなたのOSに関連するものですか?つまり、64ビットの未亡人OSと32ビットのコネクタを使用しています。私はそれについて確信が持てません。

このリンクを確認してください。 「[Microsoft][ODBC Driver Manager] 無効な文字列またはバッファ長」エラー

于 2013-02-14T17:17:27.707 に答える