10

Debian 4.4.5-8、64 ビットの x86_64-pc-linux-gnu で PostgreSQL 8.4.13 を使用しています。

次の表を作成しました。

CREATE TABLE users (
user_id     serial PRIMARY KEY NOT NULL,
name        varchar(200),
username    varchar(150),
password    varchar(150),
);

次に、Java アプリケーションを使用して、次のコードを実行します。

String insertTableSQL = "INSERT INTO USERS"
                + "(name, username, password) VALUES"
                + "(?,?,?)";
PreparedStatement preparedStatement = DBCon.prepareStatement(insertTableSQL);
preparedStatement.setString(1, userInfo.get("name"));           
preparedStatement.setString(2, userInfo.get("username"));
preparedStatement.setString(3, userInfo.get("password")));
        
preparedStatement.executeUpdate();

問題はexecuteUpdate()、次の例外が生成されることです。

ERROR: null value in column "user_id" violates not-null constraint

奇妙なことに、psql を使用して同じ挿入ステートメントを実行すると、正常に実行されます。なんで?

4

3 に答える 3

10

@mu がコメントしたように、エラー メッセージは残りの質問と矛盾しています。
残っている唯一の合理的な説明は、実際には別のテーブルに書き込んでいるということです。

試す:

INSERT INTO users (user_id, name, username, password)
VALUES
  (1234,'foo', 'foo', 'foo')";

そして、あなたのテーブルをチェックしてください。INSERT期待していたテーブルに到着しましたか? そうでない場合は、設定を確認してください。

  • IP、ポート、データベース名?
  • DB 内の同じスキーマ? 設定を確認してくださいsearch_path
  • テーブル名「USERS」を誤って二重引用符で囲みませんでしたか? 二重引用符で囲まれた識別子は小文字にキャストされません。詳細については、識別子とキーワードの章を参照してください。

テーブルの他のインスタンスを見つけて、usersあなたが行った可能性のある潜在的な損傷を修正してください。:)

于 2012-11-14T10:22:43.043 に答える
0

解決しました。

私の問題は、データベースに2つの列があり、エンティティに1つマッピングされていたことです。プロパティファイルのSQL更新が原因で発生しました

一度削除して修正する

于 2019-11-25T11:26:14.847 に答える
0
String insertTableSQL = "INSERT INTO USERS"
            + "(name, username, password) VALUES"
            + "(?,?,?)";
PreparedStatement preparedStatement = DBCon.prepareStatement(insertTableSQL);
preparedStatement.setString(1, userInfo.get("name"));           
preparedStatement.setString(2, userInfo.get("username"));
preparedStatement.setString(3, userInfo.get("password")));

preparedStatement.executeUpdate();

疑問符が 3 つだけで、フィールドが正しく並んでいることに注意してください。

NOT NULLまた、制約について心配する必要はありません。それは自分自身を処理し(どうすればNULL、それSERIALは です)、エラーを引き起こす可能性があります。取り除くだけです。

于 2012-11-14T03:12:47.967 に答える