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 【问题描述】:当使用PreparedStatement
的setObject
方法处理TEXT 类型的列(在mysql DB 中)时,最后一个参数应该是什么?
例如,我知道这对于 VARCHAR 列是可以的:
stmt.setObject(i, "bla", Types.VARCHAR);
其中stmt
是PreparedStatement
,Types
是java.sql.Types
。
但是如果 DB 列的类型是 TEXT,我还应该使用 VARCHAR 吗?或者可能是 BLOB 或 CLOB?
【问题讨论】:
仅供参考:您可以使用DatabaseMetaData.getColumns
方法获取此信息。您可以通过调用connection.getMetaData()
获取DatabaseMetaData
对象。 getColumns
返回的 ResultSet
有一个名为 DATA_TYPE
的 int
列,这就是您要查找的内容。
【参考方案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)
【讨论】:
原因是因为我写了一个通用函数,它得到一个Cell
s 的数组(我写的一个类),每个单元格都有一个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 等效项是啥?的主要内容,如果未能解决你的问题,请参考以下文章