Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODS_ID": 标识符无效
### The error may exist in cn/jnu/core/dao/FavoriteDao.xml
### The error may involve cn.jnu.core.dao.FavoriteDao.getFavoritesByGoodsId-Inline
### The error occurred while setting parameters
### SQL: SELECT * FROM m_favorite WHERE goods_id = ?
### Cause: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODS_ID": 标识符无效
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
at test.FavoriteDaoTest.getFavoritesTest(FavoriteDaoTest.java:39)
at test.FavoriteDaoTest.main(FavoriteDaoTest.java:48)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODS_ID": 标识符无效
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3550)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1374)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
... 3 more
- 一般出现这个错误的时候都是查询的时候字段名不匹配,但是我反复看了,还是觉得没毛病:
<!-- 查询指定id商品的所有收藏记录 -->
<select id="getFavoritesByGoodsId" parameterType="Integer" resultType="Favorite" >
SELECT
*
FROM
m_favorite
WHERE
goods_id = #{goods_id}
</select>
表字段
-
然后我又试着给字段加上引号,发现就行了。
加上引号的结果 - 我就跟其他表(我在SQL Plus中建的)进行了对比,发现表在Navicat中,所有字段包括表名都是大写的(一开始我觉得可能是不区分大小写),然而这个表是我在Navicat上直接建的,我没有特意用大写,它就没帮我转换。
- 那么我就试着把表字段改为大写:
结果
-
至于是为什么呢?管它呢!所以说使用Navicat也是有好有坏,方便的同时可能也会带来一些问题,可能的话还是用Oracle自带的工具吧。