sql查询结果中的字符数

时间:2014-01-15 14:28:15

标签: java sql spring

我正在使用Spring 3.1.1与Hibernate 4和MSSQL数据库。最后,我已经能够在我的表中使用连接查询我的数据库,返回正确的答案。虽然它似乎没有返回我的消息的整个字符串,但削减了29/30位数。这是我的疑问:

SQLQuery sql = this.getCurrentSession().createSQLQuery(
            "SELECT event.id as eventid, CAST(event_type.type_name AS varchar) as eventtype, event.check_date, event.event_date, event.status, CAST(event_message.message AS varchar) as eventmessage " + 
            "FROM event_log event " +
            "LEFT JOIN event_type " + 
            "ON (event.event_type_id = event_type.id) " + 
            "LEFT JOIN event_message " +
            "ON (event.event_message_id = event_message.id) " + 
            "WHERE event.event_type_id = " + jobId + 
            "ORDER BY eventid");

结果可能是:

4506 Database 2014-01-15 14:14:15.02 2014-01-15 14:14:15.02 false Database-connection cannot be

其中列是id,task_name,check_date,event_date,status和末尾的消息字符串。 。

结果转到ArrayList<Object[]>,我在其中阅读row[0]等来获取行中的实体。字符串消息在29位数后被删除,这令人不安。为什么它会剪切字符串,我该如何解决这个问题呢?在我的数据库中,字符串存在于其中,并且最多可以包含400个字符。

我知道这可能不是查询我的数据库的最佳方式,但它可以为我的应用程序工作。

1 个答案:

答案 0 :(得分:1)

您使用的varchar没有长度。 从不这样做!

替换:

CAST(event_type.type_name AS varchar)

有类似的东西:

CAST(event_type.type_name AS varchar(255))

在某些情况下,默认长度为32.在某些情况下,它是1.通常,总是指定长度。

编辑:

实际上,您可能甚至不需要cast。为什么不在event_type.type_name列表中添加select