我必须通过插入主键字段值在数据库表(MySQL,Oracle,MSSQL)中创建/插入新记录。但是如果表中的列不允许空值,则这不起作用。如何检查不允许空值的表列。
答案 0 :(得分: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");
}
答案 1 :(得分:3)
查看DatabaseMetadata对象,特别是getAttributes()方法。
NULLABLE int =>是否允许NULL
attributeNoNulls - might not allow NULL values attributeNullable - definitely allows NULL values attributeNullableUnknown - nullability unknown
我认为(但是)你的应用程序应尽可能多地了解。数据限制。数据库通过这些约束来保护自己,但应用程序应该(在可能的情况下)知道并尊重这些信息。
答案 2 :(得分: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
答案 3 :(得分:0)
如果我找对你,你正在寻找一种方法来测试你程序中的表格(我假设不是手动的)......
像这样测试每个表:
第1步:尝试将包含空值的记录插入到您的表中
第2步:如果异常上升,请抓住它并与其他表一起执行这些步骤
您可以标记这些表或列出包含表名称的列表。
答案 4 :(得分:0)
您也可以检查ResultSetMetaData。 javadoc
ResultSetMetaData.columnNullable
ResultSetMetaData.columnNoNulls
ResultSetMetaData.columnNullableUnknown
此致