1

主キーフィールドの値を挿入するだけで、データベーステーブル(MySQL、Oracle、MSSQL)に新しいレコードを作成/挿入する必要があります。ただし、null値を許可しない列がテーブルにある場合、これは機能しません。null値を許可しないテーブル列を確認するにはどうすればよいですか。

4

5 に答える 5

4

たとえば起動時にテーブルに対してリクエストを実行してから、テーブルのメタデータを確認できます。

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM myTable");
ResultSetMetaData rsmd = rs.getMetaData();
int nullable = rsmd.isNullable(1);
if(nullable == ResultSetMetadata.columnNullable) {
    System.out.println("Nullable");
}
于 2012-08-01T11:52:06.767 に答える
3

DatabaseMetadataオブジェクト、特にgetAttributes()メソッドを確認してください。

NULLABLE int=>NULLが許可されているかどうか

attributeNoNulls - might not allow NULL values
attributeNullable - definitely allows NULL values
attributeNullableUnknown - nullability unknown

私は(しかし)あなたのアプリケーションは可能な限り多くのことを知っているべきだと思います。データの制約。データベースはこれらの制約で自身を保護しますが、アプリケーションは(可能な場合)この情報を認識して尊重する必要があります。

于 2012-08-01T11:45:55.820 に答える
1

これは機能するはずです: ResultSetMetaData.isNullable

public int isNullable(int column)
           throws SQLException

Indicates the nullability of values in the designated column.

Parameters:
    column - the first column is 1, the second is 2, ... 
Returns:
    the nullability status of the given column; one of columnNoNulls, columnNullableor columnNullableUnknown 
Throws:
    SQLException - if a database access error occurs
于 2012-08-01T11:48:45.253 に答える
0

私が正しければ、プログラム内のテーブルをテストする方法を探しています(手動ではないと思います)...
次のように各テーブルをテストします。
ステップ1:テーブルにnull値のレコードを挿入してみます。
ステップ2:例外が発生した場合は、それをキャッチして、他のテーブルでこれらのステップを続行します。

それらのテーブルにマークを付けるか、テーブルの名前を含むリストを作成できます。

于 2012-08-01T11:51:56.337 に答える
0

ResultSetMetaDataも確認できます。javadoc

ResultSetMetaData.columnNullable
ResultSetMetaData.columnNoNulls
ResultSetMetaData.columnNullableUnknown

よろしく

于 2012-08-01T11:58:34.540 に答える