【发布时间】:2012-08-01 11:44:00
【问题描述】:
我必须仅通过插入主键字段值来在数据库表(MySQL、Oracle、MSSQL)中创建/插入新记录。但是,如果表中有不允许空值的列,这将不起作用。如何检查不允许空值的表列。
【问题讨论】:
我必须仅通过插入主键字段值来在数据库表(MySQL、Oracle、MSSQL)中创建/插入新记录。但是,如果表中有不允许空值的列,这将不起作用。如何检查不允许空值的表列。
【问题讨论】:
您可以对表执行请求,例如在启动时,然后检查表的元数据:
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");
}
【讨论】:
查看DatabaseMetadata 对象,尤其是getAttributes() 方法。
NULLABLE int => 是否允许 NULL
attributeNoNulls - might not allow NULL values attributeNullable - definitely allows NULL values attributeNullableUnknown - nullability unknown
我确实认为(但是)您的应用程序应该尽可能多地了解 re.数据约束。数据库通过这些约束来保护自己,但应用程序应该(在可能的情况下)知道并尊重这些信息。
【讨论】:
看起来这应该可以工作: 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
【讨论】:
如果我猜对了,您正在寻找一种方法来测试程序中的表(我假设不是手动)...
像这样测试每个表:
第 1 步:尝试将具有空值的记录插入到您的表中。
第 2 步:如果出现异常,将其捕获并对其他表执行这些步骤。
您可以标记这些表或为您创建一个包含表名称的列表。
【讨论】:
您也可以检查 ResultSetMetaData。 javadoc
ResultSetMetaData.columnNullable
ResultSetMetaData.columnNoNulls
ResultSetMetaData.columnNullableUnknown
问候
【讨论】: