コンテンツをフォーマットしてからメールを送信するために、Apache Velocity テンプレートを使用しています。ただし、テンプレート コンテンツは で利用できますdatabase table
。これには、 を使用できますDataSourceResourceLoader
。ただし、定義済みのデータベース テーブル形式で動作し、取得できるのはtemplateContent
. しかし、同じを使用して、同じテーブルからさらにいくつかの列を取得したいと考えていますDataSourceResourceLoader
。どうやってやるの?
DataSourceResourceLoader
1列のみを取得するコードの下を見つけてください。
public synchronized InputStream getResourceStream(final String name)
throws ResourceNotFoundException
{
if (org.apache.commons.lang.StringUtils.isEmpty(name))
{
throw new ResourceNotFoundException("DataSourceResourceLoader: Template name was empty or null");
}
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try
{
conn = openDbConnection();
ps = getStatement(conn, templateColumn, tableName, keyColumn, name);
rs = ps.executeQuery();
if (rs.next())
{
InputStream stream = rs.getBinaryStream(templateColumn);
if (stream == null)
{
throw new ResourceNotFoundException("DataSourceResourceLoader: "
+ "template column for '"
+ name + "' is null");
}
return new BufferedInputStream(stream);
}
else
{
throw new ResourceNotFoundException("DataSourceResourceLoader: "
+ "could not find resource '"
+ name + "'");
}
}
catch (SQLException sqle)
{
String msg = "DataSourceResourceLoader: database problem while getting resource '"
+ name + "': ";
log.error(msg, sqle);
throw new ResourceNotFoundException(msg);
}
catch (NamingException ne)
{
String msg = "DataSourceResourceLoader: database problem while getting resource '"
+ name + "': ";
log.error(msg, ne);
throw new ResourceNotFoundException(msg);
}
finally
{
closeResultSet(rs);
closeStatement(ps);
closeDbConnection(conn);
}
}
上記のコードInputStream stream = rs.getBinaryStream(templateColumn);
では、取得されて返されます。ここで、さらにいくつかの列を取得する必要があります。どうやってやるの?
ありがとう!