1

我必须仅通过插入主键字段值来在数据库表(MySQL、Oracle、MSSQL)中创建/插入新记录。但是,如果表中有不允许空值的列,这将不起作用。如何检查不允许空值的表列。

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:尝试将具有空值的记录插入到表中。
第 2 步:如果出现异常,则捕获它并对其他表进行这些步骤。

您可以标记这些表或有一个包含表名称的列表。

于 2012-08-01T11:51:56.337 回答
0

您也可以检查 ResultSetMetaData。文档

ResultSetMetaData.columnNullable
ResultSetMetaData.columnNoNulls
ResultSetMetaData.columnNullableUnknown

问候

于 2012-08-01T11:58:34.540 回答