2

データベースへの追加機能で問題が発生しました。次のコードは ExecuteUpdate ステートメントでハングします。例外がスローされないため、何が問題なのかわかりません。

public static boolean addUser(User userToAdd) throws Exception {
    boolean isAdded = false;

    if (checkConnection()) {
        try {
            if (isUnique(userToAdd.getIdCardNumber())) {
                PreparedStatement pstmt = connection.prepareStatement("INSERT INTO users SET "
                        + "idCardNr = ?,nationality = ?,name = ?,"
                        + "address = ?,photo = ?,status = ?,gender = ?,"
                        + "nationalNr = ?,birthDate = ?,birthPlace = ?,"
                        + "created = ?, country = ?");

                pstmt.setString(1, userToAdd.getIdCardNumber());
                pstmt.setString(2, userToAdd.getNationality());
                pstmt.setString(3, userToAdd.getFullName());
                pstmt.setString(4, userToAdd.getAddress());
                pstmt.setString(5, userToAdd.getPhotoPath());
                pstmt.setString(6, userToAdd.getStatus());
                pstmt.setString(7, userToAdd.getGender());
                pstmt.setString(8, userToAdd.getRegisterNumber());
                pstmt.setString(9, userToAdd.getBirthday());
                pstmt.setString(10, userToAdd.getBirthPlace());
                java.sql.Timestamp current = new java.sql.Timestamp(System.currentTimeMillis());
                userToAdd.setCreated(current);
                pstmt.setTimestamp(11, userToAdd.getCreated());
                pstmt.setString(12, userToAdd.getCountry());


                int rowsAffected;
                try {
                   rowsAffected = pstmt.executeUpdate();
                } catch (SQLException e) {
                    throw new Exception("Exception while executing update: " + e.getMessage());
                }


                if (rowsAffected != 0) {
                    isAdded = true;
                    pstmt.close();
                }

            } else {
                System.out.println("User already in database");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    return isAdded;
}

誰かがこれをデバッグする方法を教えてくれますか?

4

2 に答える 2

2

SQL の形式が正しくありません。UPDATE の構文を使用して INSERT を実行しようとしています。

これは、標準の INSERT の外観です

INSERT INTO users (idCardNr,nationality,name,address,photo,status,gender,nationalNr,birthDate,birthPlace,created,country) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)

SQL をコードに組み込む前に、手動で SQL をテストすることを常にお勧めします。

于 2012-06-25T10:23:45.330 に答える
0

素早い回答:

  • 同じ問題がありました。
  • 更新/挿入は、明らかな理由もなく 96% の時間ハングしました。
  • セットアップ: 古い Java 仮想マシン: Windows 上の JRockit 1.5 + Weblogic 10.0
  • prepareStatement.execute() でハングアップし、JVM 全体を 2 回クラッシュさせました!

原因 (JVM ベンダーはそれほど重要ではありません)

  • JVM タイムゾーン データが古くなったため、日付パラメーターが存在する場合に日付のシリアル化が台無しになりました。
  • tzdata は 2006 年から復活しました。私たちは今2013年です!

解決

  • JDK またはサポート ページからTimeZone アップデータ ツールを使用します。JRockit JDK の場合はこちら、Oracle JDK の場合はこちら。
  • アプリケーションを再起動します。
于 2013-11-04T20:08:02.680 に答える