我正在尝试通过Spring Framework的JdbcTemplate
在我的Java应用程序中执行SQL语句。尽管在Aqua Data Studio中查询工作100%正常,但我收到"bad SQL grammar"
错误。
这是我的Java代码:
String entity = GCEnvironmentClient.getGteProperties().getProperty("ENTITY_ID");
InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("sql/blotter.sql");
String query = IOUtils.toString(is).concat(entity);
return this.jdbcTemplate.query(query, new BlotterTradeMapper());
有一点需要注意:我尝试使用RowMapper
类(BlotterTradeMapper
)返回null
个对象,以避免操纵ResultSet
。这并没有改变任何东西,所以我知道这个课程没有引起问题。
以下是查询:
SELECT
inv..trans.com_line1,
inv..trans.trade_acct,
inv..trans.bs_code,
inv..trans.trans_type,
inv..trans.cust_num,
mast..sec_mst.sec_type,
mast..sec_mst.mature_date,
mast..sec_mst.coupon,
inv..trans.trans_num,
inv..trans.trade_date,
inv..trans.cc_code,
inv..trans.settle_date,
inv..trans.other_chrg,
inv..trans.principal,
inv..trans.interest,
inv..trans.basis_prc,
inv..trans.dollar_prc,
inv..trans.quantity,
inv..trans.cusip,
inv..trans.rem_line1,
inv..trans.rem_line2,
mast..sec_mst.dated_date,
mast..sec_mst.des_line1,
mast..groupmst.group_name,
mast..groupmst.group_id,
mast..cust_mst.nam_add1,
inv..trans.fin_rate,
ISNULL(mast..contract.contract_size, 1),
ISNULL(mast..contract.contract_size, 1),
mast..curr_mst.multiplier,
mast..sec_mst.sec_class
FROM
inv..trans,
mast..sec_mst,
mast..cust_mst,
mast..groupmst,
mast..curr_mst,
mast..contract
WHERE
inv..trans.cust_num = mast..cust_mst.cust_num
AND
inv..trans.group_id = mast..groupmst.group_id
AND
inv..trans.cusip = mast..sec_mst.cusip
AND
mast..sec_mst.currency_type = mast..curr_mst.currency_type
AND
mast..sec_mst.contract_code *= mast..contract.contract_code
AND
inv..trans.entity_id = 1
这是错误:
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [query]; nested exception is java.sql.SQLException: Incorrect syntax near '?'. at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:237)
请注意,查询中没有问号!有没有人见过这样的东西?
答案 0 :(得分:0)
我在.sql文件的顶部发现了一些隐藏的字符。这些必须由Aqua Data Studio创建。甚至连Notepad ++都没有选择它们 - 只有Eclipse文本编辑器才这样做。