关于ResultSet.execute()方法返回值的解析!!!

本文详细解析了在preparedstatement对象中使用booleanexecute方法执行SQL语句的过程,包括其返回值true和false的区别,以及如何处理查询和更新语句的结果。
boolean execute()
  throws sqlexception在此 preparedstatement 对象中执行 sql 语句,该语句可以是任种类的 sql 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executequery 和 executeupdate 处理形式更简单的语句。 
execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getresultset 或 getupdatecount 方法来检索结果,并且必须调用 getmoreresults 移动到任后面的结果。 


返回:

如果第一个结果是 resultset 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false ;

关于此返回值的问题是:如果是执行的查询语句,则返回true,如果执行的是更新语句则返回false;这其中的差别就是DDL语句和DML语句的差别


HistoryInfoManager: import { HistoryInfo } from './HistoryInfo'; import {HistoryInfoDataHelper} from './HistoryInfoDataHelper'; import { IHistoryCacheManager } from './IHistoryCacheManager'; const TAG = 'rdbtest :HistoryInfoManager ' export class HistoryInfoManager implements IHistoryCacheManager { helper: HistoryInfoDataHelper = HistoryInfoDataHelper.getInstance() private static instance: HistoryInfoManager public static getInstance(): HistoryInfoManager { console.log(TAG, 'instance', HistoryInfoManager.instance) if (!HistoryInfoManager.instance) { HistoryInfoManager.instance = new HistoryInfoManager(); console.log(TAG, 'instance init success', HistoryInfoManager.instance) } return HistoryInfoManager.instance } constructor() { this.helper.initDatabase() } //timingWrite参数暂不处理 async uploadHistory(info: HistoryInfo, timingWrite: boolean): Promise<boolean> { return this.helper.saveHistoryData(info) } //考虑读取搜索历史记录是否需要异步 async getHistorys(): Promise<HistoryInfo[]> { return this.helper.queryHistory() } async getHistoryInfoByqipuId(qipuId: number): Promise<HistoryInfo> { return this.helper.queryHistoryByQipuId(qipuId) } async getHistoryInfoByTvId(tvId: string): Promise<HistoryInfo[]> { return this.helper.queryHistory() } async deleteAll(): Promise<boolean> { return this.helper.deleteHistory('-1') } } HistoryInfoDataHelper: import relationalStore from '@ohos.data.relationalStore' import { BusinessError } from '@kit.BasicServicesKit' import { EPGData, PayMarkType, RecordHistoryData } from '@kiwi/tvapi' import { HistoryInfo } from './HistoryInfo' // 数据库配置 const DB_NAME = 'HisToryInfoDB.db' const DB_VERSION = 1 const TABLE_USER = 'HisToryInfo' let store: relationalStore.RdbStore | undefined = undefined const TAG = 'rdbtest' // 数据库管理类 export class HistoryInfoDataHelper { private static instance: HistoryInfoDataHelper public static getInstance(): HistoryInfoDataHelper { if (!HistoryInfoDataHelper.instance) { HistoryInfoDataHelper.instance = new HistoryInfoDataHelper(); } return HistoryInfoDataHelper.instance } constructor() { } private isInitializing: boolean = false // 初始化数据库 async initDatabase(): Promise<boolean> { console.log(TAG, 'initDatabase') // 第一层校验:已初始化直接返回 if (store !== undefined) { return true } // 防止并发场景下的重复初始化 if (this.isInitializing) { return true } const HISTORY_CONFIG: relationalStore.StoreConfig = { name: DB_NAME, // 数据库名称 securityLevel: relationalStore.SecurityLevel.S1 // 安全级别 } const uiContext: UIContext | undefined = AppStorage.get('uiContext') await relationalStore.getRdbStore(uiContext?.getHostContext(), HISTORY_CONFIG, async (err: BusinessError, rdbStore: relationalStore.RdbStore) => { if (err) { console.error(TAG + `Failed to get RdbStore. Code:${err.code}, message:${err.message}`) } store = rdbStore if (store !== undefined) { // 定义数据表结构 const SQL_CREATE_TABLE_HISTORYINFO = 'CREATE TABLE IF NOT EXISTS ' + TABLE_USER + ' ( ' + 'qipuId INTEGER PRIMARY KEY , ' + 'mEpgData TEXT, ' + 'mAddTime INTEGER NOT NULL DEFAULT 0, ' + 'mUploadTime INTEGER NOT NULL DEFAULT 0, ' + 'mMaxPlayTime INTEGER NOT NULL DEFAULT 0, ' + 'mCookie TEXT, ' + 'mIsCommitted INTEGER NOT NULL DEFAULT 0, ' + 'mIsStopPlay INTEGER NOT NULL DEFAULT 0, ' + 'mPlayTime INTEGER NOT NULL DEFAULT -1, ' + 'mVid TEXT, ' + 'mHistoryData TEXT, ' + 'mDefVideoTime TEXT, ' + 'mPayMarkType TEXT NOT NULL DEFAULT "", ' + 'mIndiviDemand INTEGER NOT NULL DEFAULT 0, ' + 'mIsSportsHistory INTEGER NOT NULL DEFAULT 0, ' + 'mTm INTEGER, ' + 'mVe TEXT, ' + 'ckuid TEXT, ' + 'terminalId TEXT, ' + 'agentType TEXT, ' + 'tail INTEGER ' + ')' await (store as relationalStore.RdbStore).executeSql(SQL_CREATE_TABLE_HISTORYINFO).then(() => { console.info(TAG, `Create ${TABLE_USER} table done.`); }).catch((err: BusinessError) => { console.error(TAG, `Create ${TABLE_USER} failed, code is ${err.code},message is ${err.message}`); }); (store as relationalStore.RdbStore).version = DB_VERSION this.isInitializing = true } console.info(TAG + 'Succeeded in getting RdbStore.') }) return true } /** * 单个历史信息插入 * 视频插入/更新信息都会调此接口 * 先查询是否存在数据,存在则更新,不存在则插入 * @param history */ async saveHistoryData(history: HistoryInfo): Promise<boolean> { // 1. 数据库初始化检查 if (!store) { console.error(TAG, 'Database not initialized'); return false; } console.log(TAG, 'saveHistoryData start') try { const qipuId = history.mEpgData.qipuId ?? 0; let queryRet: number = 0 // 2. 创建谓词(重用对象) const predicates = new relationalStore.RdbPredicates(TABLE_USER); predicates.equalTo('qipuId', qipuId); await (store as relationalStore.RdbStore).querySql(`select qipuid from ${TABLE_USER} where qipuid=${qipuId}`) .then((resultSet: relationalStore.ResultSet) => { console.info(TAG + ` ResultSet column rowCount: ${resultSet.rowCount}`); queryRet = resultSet.rowCount resultSet.close() }) if (queryRet > 0) { await store.update( history.toValuesBucket(), predicates, relationalStore.ConflictResolution.ON_CONFLICT_REPLACE ); } else { await store.insert(TABLE_USER, history.toValuesBucket()); } return true } catch (error) { // 7. 全局错误处理 const mappedError = this.mapErrorCode(error.code); console.error(TAG, `Operation failed: ${error.code} - ${error.message}`); return false } } /** * 根据历史记录的主键ID更新 * @param history */ async updateHistory(history: HistoryInfo): Promise<number> { if (!store) { console.error('Database not initialized'); return 0 } const predicates = new relationalStore.RdbPredicates(TABLE_USER); predicates.equalTo('qipuId', history.qipuId); (store as relationalStore.RdbStore).update(history.toValuesBucket(), predicates, relationalStore.ConflictResolution.ON_CONFLICT_REPLACE).then((rows: Number) => { console.info(`Updated row count: ${rows}`); return rows }).catch((err: BusinessError) => { console.error(`Update failed: code is ${err.code},message is ${err.message}`); console.error(this.mapErrorCode(err.code)) return 0 }); return 0 } /** * 根据历史记录的主键ID删除 * @param history */ async deleteHistory(id: string): Promise<boolean> { if (!store) { console.error('Database not initialized'); return false } const predicates = new relationalStore.RdbPredicates(TABLE_USER); Number(id) === -1 ? "" : predicates.equalTo('id', id); await (store as relationalStore.RdbStore).delete(predicates).then(async (rows: Number) => { console.info(`Updated row count: ${rows}`); }).catch((err: BusinessError) => { console.error(`Update failed: code is ${err.code},message is ${err.message}`); console.error(this.mapErrorCode(err.code)); return false }); return true } /** * 查询所有历史记录,按照addTime逆序排序 * @param count 查询的条数 * @returns */ async queryHistory(count?: number): Promise<HistoryInfo[]> { if (!store) { console.log(TAG, 'Waiting for database initialization...'); return [] } let select = `SELECT * FROM ${TABLE_USER} ORDER BY mAddTime DESC` if (count) { select += ` LIMIT ${count}`; } console.log(TAG, 'sql: ', select); let historyList: HistoryInfo[] = [] await (store as relationalStore.RdbStore).querySql(select) .then(async (resultSet: relationalStore.ResultSet) => { console.info(`ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount}`); historyList = await this.processTypedResultSet(resultSet) console.log(TAG, 'historyList.length: ', historyList.length); }) .catch((err: BusinessError) => { console.error(`Query failed, code is ${err.code},message is ${err.message}`); console.error(this.mapErrorCode(err.code)) }); return historyList } /** * 根据qipuId查询数据,qipuId为主键,唯一一条,直接返回historyinfo,若未查询到返回new HistoryInfo,qipuId为空 * @param qipuId * @returns */ async queryHistoryByQipuId(qipuId: number): Promise<HistoryInfo> { console.log(TAG, 'qipuId :', qipuId) if (!store) { console.error(TAG + 'Database not initialized'); return new HistoryInfo() // throw new Error('123123123123123') } console.log(TAG, 'can query-------------------- :', qipuId) if (typeof qipuId !== 'number') { return new HistoryInfo() } let select = `SELECT * FROM ${TABLE_USER} where qipuId=${qipuId} `; console.log(TAG, 'sql: ', select); let historyList: HistoryInfo[] = []; (store as relationalStore.RdbStore).querySql(select) .then((resultSet: relationalStore.ResultSet) => { console.info(`ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount}`); historyList = this.processTypedResultSet(resultSet) console.log(TAG, 'historyList.length: ', historyList.length); }) .catch((err: BusinessError) => { console.error(TAG, `Query failed, code is ${err.code},message is ${err.message}`); console.error(this.mapErrorCode(err.code)); }); return historyList.length > 0 ? historyList[0] : new HistoryInfo() } // 错误代码映射 private mapErrorCode(code: number): string { switch (code) { case 14800001: return (TAG + ' 数据库未初始化'); case 14800005: return (TAG + ' 记录不存在'); case 14800011: return (TAG + ' 并发冲突'); default: return (TAG + ` 数据库错误 (${code})`); } } private processTypedResultSet(resultSet: relationalStore.ResultSet): HistoryInfo[] { const items: HistoryInfo[] = []; console.log(TAG, 'result count:', resultSet.rowCount) // 遍历结果集 while (resultSet.goToNextRow()) { console.log(TAG, ' qipiId:', resultSet.getLong(resultSet.getColumnIndex("qipuId"))) const history: HistoryInfo = new HistoryInfo() history.qipuId = resultSet.getLong(resultSet.getColumnIndex("qipuId")); try { history.mEpgData = JSON.parse(resultSet.getString(resultSet.getColumnIndex("mEpgData"))) as EPGData; history.mHistoryData = JSON.parse(resultSet.getString(resultSet.getColumnIndex("mHistoryData"))) as RecordHistoryData; } catch (err) { console.error(TAG, "JSON解析失败(mHistoryData):", err.message); } history.mPayMarkType = resultSet.getString(resultSet.getColumnIndex("mPayMarkType")) as PayMarkType; history.mAddTime = resultSet.getLong(resultSet.getColumnIndex("mAddTime")); history.mUploadTime = resultSet.getLong(resultSet.getColumnIndex("mUploadTime")); history.mMaxPlayTime = resultSet.getLong(resultSet.getColumnIndex("mMaxPlayTime")); history.mCookie = resultSet.getString(resultSet.getColumnIndex("mCookie")); history.mIsCommitted = resultSet.getLong(resultSet.getColumnIndex("mIsCommitted")); history.mIsStopPlay = resultSet.getLong(resultSet.getColumnIndex("mIsStopPlay")) !== 0 history.mPlayTime = resultSet.getLong(resultSet.getColumnIndex("mPlayTime")) history.mVid = resultSet.getString(resultSet.getColumnIndex("mVid")); history.mDefVideoTime = resultSet.getString(resultSet.getColumnIndex("mDefVideoTime")); history.mIndiviDemand = resultSet.getLong(resultSet.getColumnIndex("mIndiviDemand")) history.mIsSportsHistory = resultSet.getLong(resultSet.getColumnIndex("mIsSportsHistory")) !== 0 history.mTm = resultSet.getLong(resultSet.getColumnIndex("mTm")) history.mVe = resultSet.getString(resultSet.getColumnIndex("mVe")) history.ckuid = resultSet.getString(resultSet.getColumnIndex("ckuid")); history.terminalId = resultSet.getString(resultSet.getColumnIndex("terminalId")); history.agentType = resultSet.getString(resultSet.getColumnIndex("agentType")); history.tail = resultSet.getLong(resultSet.getColumnIndex("tail")) console.log(TAG, 'historyinfo: ', JSON.stringify(history)); items.push(history) } resultSet.close(); return items; } } const historyInfo = await HistoryInfoManager.getInstance() .getHistoryInfoByqipuId(StringUtils.parseInt(data.getOutsideAlbumId(), 0)); 此方法执行时,数据库未init就执行了查询,导致第一次查询失败
09-04
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'username' from result set. Cause: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'gjn': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (String)"gjn"; line: 1, column: 4] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy82.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) at com.sun.proxy.$Proxy83.selectMaps(Unknown Source) at com.itheima.mp.mapper.UserMapperTest.testInsert(UserMapperTest.java:59) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'username' from result set. Cause: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'gjn': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (String)"gjn"; line: 1, column: 4] at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:87) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:572) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:409) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:361) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:335) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:308) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:201) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy127.query(Unknown Source) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) 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 com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy126.query(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 77 more Caused by: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'gjn': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (String)"gjn"; line: 1, column: 4] at com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.parse(JacksonTypeHandler.java:54) at com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler.getNullableResult(AbstractJsonTypeHandler.java:41) at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:85) ... 106 more Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'gjn': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (String)"gjn"; line: 1, column: 4] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:745) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2961) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:2002) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:802) at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597) at com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.parse(JacksonTypeHandler.java:52) ... 108 more
07-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值