gpt4 book ai didi

java - 如何使用 Microsoft JDBC 驱动程序获取 Velocity 从数据源检索模板?

转载 作者:行者123 更新时间:2023-12-01 23:16:41 29 4
gpt4 key购买 nike

我的 Java 应用程序之前使用 Sourceforge jTds 驱动程序针对 SQL Server 数据库运行。它能够使用 Apache Velocity 引擎 (v2.0) 从数据库中的 varchar(max) 列检索模板。现在数据库将被加密,因此 JTDS 不再工作——甚至无法成功连接。我已将其替换为 Microsoft JDBC 驱动程序 (mssql-jdbc-7.2.2.jre8)。现在,由于以下错误,Velocity 资源加载器无法找到任何资源:

com.microsoft.sqlserver.jdbc.SQLServerException: The conversion from varchar to BinaryStream is unsupported.

尝试将列类型更改为文本。同样的错误。尝试更改为图像。然后 Velocity 显然找到了资源,但返回的模板是空的。

有人在使用 Velocity 和 Microsoft JDBC 时遇到过类似问题吗?

最佳答案

您可以配置 Velocity 以使用您自己的数据源资源加载器:

package com.foo;

import org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader;

import java.io.Reader;
import java.io.StringReader;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MyDataSourceResourceLoader extends DataSourceResourceLoader
{
/**
* Gets a reader from a result set's column
* @param resultSet
* @param column
* @param encoding
* @return reader
* @throws SQLException
*/
protected Reader getReader(ResultSet resultSet, String column, String encoding)
throws SQLException
{
return new StringReader(resultSet.getString(column));
}
}

不检查编码,因此应用程序和数据库之间的编码应保持一致。

然后,您可以通过设置以下配置属性来告诉 Velocity 使用资源加载器:

resource.loaders = ds
resource.loader.ds.class = com.foo.MyDataSourceResource

关于java - 如何使用 Microsoft JDBC 驱动程序获取 Velocity 从数据源检索模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58348952/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com