Java setNull 用于准备语句中的 SQL 类型 TEXT

标签 java sql jdbc

当 MySQL 列类型为 TEXT 时,我应该使用什么 java.sql.Types 在准备好的语句中设置 NULL?我在这里没有看到类型文本:http://docs.oracle.com/javase/7/docs/api/java/sql/Types.html .

这是我的表定义(简化):

CREATE TABLE IF NOT EXISTS `mytable` (
  `txtcolumn` text DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这就是我想做的:

...
java.sql.Connection c = getConnection();
PreparedStatement s = c.prepareStatement( "Insert into mytable (txtcolumn) values (?)" );
s.setNull( 0, java.sql.Types.TEXT );
...

...但是没有 java.sql.Types.TEXT。

最佳答案

您可以使用 BLOB、CLOB、字符串。

所有 TEXT 类型都返回具有不同 getPrecision() 值(分别为 65535、255、16777215 和 2147483647)的 Types.LONGVARCHAR,而 getColumnType() 返回 -1。即使 TINYTEXT 就其大小而言不属于 LONGVARCHAR 类别,此行为也是有意为之。这是为了避免同一基本类型内的不同处理。 getColumnType() 返回 -1,因为内部服务器处理的类型是 TEXT,与 BLOB 类似。

另请注意,即使 getColumnType() 返回 Types.LONGVARCHAR,getColumnTypeName() 也将返回 VARCHAR,因为 VARCHAR 是为此类型指定的列数据库特定名称。

http://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html

关于Java setNull 用于准备语句中的 SQL 类型 TEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23000737/

相关文章:

sql - 将 SQL 查询限制为查询未使用的表中的某些字段

MYSQL 选择计数、求和、内连接和分组依据

java - JDBC 向数据库中插入变量

java - 请求依赖 bean 注入(inject)

java - Dagger 2 - 跨模块依赖

mysql - 在 SQL 中连接表,包括计数数据

jdbc - Redshift JDBC 与 ODBC 驱动程序性能比较

java - 在java中切换数据库连接的最佳方法是什么?

java - 无法访问类 com.apple.eawt.Application(在模块 java.desktop 中),因为模块 java.desktop 不会将 com.apple.eawt 导出到未命名模块

java - 无法创建 CSR 证书