MySQL TEXT 的 java.sql.Types 等效项是啥?

Posted

技术标签:

【中文标题】MySQL TEXT 的 java.sql.Types 等效项是啥?【英文标题】:What is the java.sql.Types equivalent for the MySQL TEXT?MySQL TEXT 的 java.sql.Types 等效项是什么? 【发布时间】:2011-10-09 23:57:17 【问题描述】:

当使用PreparedStatementsetObject 方法处理TEXT 类型的列(在mysql DB 中)时,最后一个参数应该是什么?

例如,我知道这对于 VARCHAR 列是可以的:

stmt.setObject(i, "bla", Types.VARCHAR);

其中stmtPreparedStatementTypesjava.sql.Types

但是如果 DB 列的类型是 TEXT,我还应该使用 VARCHAR 吗?或者可能是 BLOB 或 CLOB?

【问题讨论】:

仅供参考:您可以使用DatabaseMetaData.getColumns 方法获取此信息。您可以通过调用connection.getMetaData() 获取DatabaseMetaData 对象。 getColumns 返回的 ResultSet 有一个名为 DATA_TYPEint 列,这就是您要查找的内容。 【参考方案1】:

可以在这里找到答案(是的,您应该使用 VARCHAR):

http://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html(更新过时的断开链接)

这里有一些关于 MYSQL TEXT 类型的信息

http://dev.mysql.com/doc/refman/5.0/en/blob.html

【讨论】:

谢谢。我去过那些页面,但我不确定 GetColumnClassName 返回值是否是我需要的,所以感谢您澄清:) 相关信息应该发布在问题中,而不是仅仅链接...【参考方案2】:

为什么你不使用

stmt.setString ?

对于文本类型? http://download.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html#setString(int, java.lang.String)

【讨论】:

原因是因为我写了一个通用函数,它得到一个Cells 的数组(我写的一个类),每个单元格都有一个Object 值和一个标识列的int类型。【参考方案3】:

Oracle Doc for sql Types 此处没有 TEXT 字段,但它可能会在未来出现(现在您可以使用大小为 21845 的信息作为实现硬编码的技巧 - 如果您稍后需要知道这是 TEXT 字段 -实际字段大小由您选择,其余文本由 MySql 在其他地方记忆)

所以“使用 VARCHAR 作为类型”的第一个答案是有效的(可能是库进行了 setString 调用)

答案“setString”也有效(如果您想自己做出决定,则前面有一个 switch(field_type) - 我使用此选项是为了更轻松地调试代码 - 速度与 cost = switch 相同+ setString 在这两种情况下)

感谢大家的链接和确认!

【讨论】:

以上是关于MySQL TEXT 的 java.sql.Types 等效项是啥?的主要内容,如果未能解决你的问题,请参考以下文章

text MySQL:基本的MySQL指南

text MySQL:基本的MySQL指南

mysql的text字段长度 mysql数据库中text字段长度不够的问题

MySQL - text字段

MySQL - text字段

MySQL中BLOB和TEXT类型学习--MySql语法