我无法使用MS Access(sun.jdbc.odbc.JdbcOdbcDriver)在PreparedStatement上调用setNull

preparedStatement.setNull(index, sqltype).


有没有解决方法?对于LONGBINARY数据类型,我尝试了以下调用,但均无效。

setNull(index, java.sql.Types.VARBINARY)
setNull(index, java.sql.Types.BINARY)


java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序]无效的SQL数据类型
在sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
在sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
在sun.jdbc.odbc.JdbcOdbc.SQLBindInParameterNull(JdbcOdbc.java:986)
在sun.jdbc.odbc.JdbcOdbcPreparedStatement.setNull(JdbcOdbcPreparedStatement.java:363)

最佳答案

对于将null绑定到JDBC 4.1,Java 7,MS Access 2013和JDBC-ODBC桥的大多数数据类型,我观察到的“很好”的答案是我已经内置在jOOQ中的这个答案。 :

switch (sqlType) {
    case Types.BINARY:
    case Types.VARBINARY:
    case Types.LONGVARBINARY:
    case Types.BLOB:
        stmt.setNull(nextIndex(), Types.VARCHAR);
        break;

    default:
        stmt.setString(nextIndex(), null);
        break;
}

09-16 17:42