我的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: 从 varchar 到 BinaryStream 不受支持。
已尝试将列类型更改为文本。 同样的错误。 已尝试更改为图像。然后 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