【问题标题】: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 列,这就是您要查找的内容。

标签: java mysql sql jdbc types


【解决方案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 在这两种情况下)

感谢大家的链接和确认!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2011-03-24
    • 2012-12-27
    • 2018-11-12
    • 2012-10-16
    • 2010-10-01
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多