phoenix mybatis批量插入数据报错

记录一次phoenix插入数据报错的情况

报错信息如下

Caused by: org.apache.phoenix.exception.PhoenixParserException: ERROR 602 (42P00): Syntax error. Missing "EOF" at line 5, column 10.
	at org.apache.phoenix.exception.PhoenixParserException.newException(PhoenixParserException.java:33)
	at org.apache.phoenix.parse.SQLParser.parseStatement(SQLParser.java:111)
	at org.apache.phoenix.jdbc.PhoenixStatement$PhoenixStatementParser.parseStatement(PhoenixStatement.java:1644)
	at org.apache.phoenix.jdbc.PhoenixStatement.parseStatement(PhoenixStatement.java:1727)
	at org.apache.phoenix.jdbc.PhoenixPreparedStatement.<init>(PhoenixPreparedStatement.java:94)
	at org.apache.phoenix.jdbc.PhoenixConnection.prepareStatement(PhoenixConnection.java:896)
	at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:331)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:87)
	at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59)
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
	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:148)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
	... 9 more
Caused by: MissingTokenException(inserted [@-1,0:0='<missing EOF>',<-1>,5:9] at ,)
	at org.apache.phoenix.parse.PhoenixSQLParser.recoverFromMismatchedToken(PhoenixSQLParser.java:374)
	at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
	at org.apache.phoenix.parse.PhoenixSQLParser.statement(PhoenixSQLParser.java:534)
	at org.apache.phoenix.parse.SQLParser.parseStatement(SQLParser.java:108)
	... 31 more


mapper内容如下

<select id="insert" parameterType="MeasureInitialEntity">
        upsert into ${tableName} (measureDocNo, clientNo, pointNo, valueK, TValue, measureDate, createDate) values
        (#{data.measureDocNo}, #{data.clientNo}, #{data.pointNo}, #{data.valueK}, #{data.TValue}, #{data.measureDate}, #{data.createDate})
    </select>

    <select id="insertByList" resultType="MeasureInitialEntity" parameterType="java.util.Map">
        upsert into ${tableName} (measureDocNo, clientNo, pointNo, valueK, TValue, measureDate,  createDate) values
        <foreach collection="dataList" item="data" index="index" separator=",">
            (#{data.measureDocNo}, #{data.clientNo}, #{data.pointNo}, #{data.valueK}, #{data.TValue}, #{data.measureDate}, #{data.createDate})
        </foreach>
    </select>

一开始用的是批量插入报错.我打断点查看但是看不出来有什么问题,改用插入一条数据后居然可以了,
然后切换批量插入,又不行了
我研究了半天又用手动批量提交3条数据,还是报一样的错误,
看来只有批量提交的方式可能不一样吧.
然后又改成手动提交,这才发现,原来phoenix+mybatis,的sql语句只有单次提交这一说,values后面第二个参数,就会报错了…

找了很多资料才发现phoenix+mybatis没有批量插入语句,只有单次插入…

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值