【问题标题】:How to check for not null fields before inserting record into a database table Java如何在将记录插入数据库表Java之前检查非空字段
【发布时间】:2012-08-01 11:44:00
【问题描述】:

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

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    您可以对表执行请求,例如在启动时,然后检查表的元数据:

    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");
    }
    

    【讨论】:

    • 非常感谢。我只是做了确切的事情。
    【解决方案2】:

    查看DatabaseMetadata 对象,尤其是getAttributes() 方法。

    NULLABLE int => 是否允许 NULL

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

    我确实认为(但是)您的应用程序应该尽可能多地了解 re.数据约束。数据库通过这些约束来保护自己,但应用程序应该(在可能的情况下)知道并尊重这些信息。

    【讨论】:

      【解决方案3】:

      看起来这应该可以工作: 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
      

      【讨论】:

        【解决方案4】:

        如果我猜对了,您正在寻找一种方法来测试程序中的表(我假设不是手动)...
        像这样测试每个表:
        第 1 步:尝试将具有空值的记录插入到您的表中。
        第 2 步:如果出现异常,将其捕获并对其他表执行这些步骤。

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

        【讨论】:

          【解决方案5】:

          您也可以检查 ResultSetMetaData。 javadoc

          ResultSetMetaData.columnNullable
          ResultSetMetaData.columnNoNulls
          ResultSetMetaData.columnNullableUnknown
          

          问候

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多