【产品名称】
【产品版本】mysql的驱动5.3版本 oceabase的版本2.77
【问题描述】使用odbc 用mysql胡驱动插入数据
插入第一条记录总是报object type error,但是后面的记录全都能插入进去。
【产品名称】
【产品版本】mysql的驱动5.3版本 oceabase的版本2.77
【问题描述】使用odbc 用mysql胡驱动插入数据
插入第一条记录总是报object type error,但是后面的记录全都能插入进去。
请问方便发一下你的代码吗?或者你写一个简单版本的测试代码
代码大概是这样:
1:定义sql语句replace into TableName (name, age) values(?, ?);
2:SQLPrepare(sql)
3:for
SQLBindParameter 绑定参数
SQLExecute 然后执行语句
就会报错:object type error 数据导入失败
循环第二次导入下一条数据就会成功,不报失败。
因此结果就是,导入失败,但是会有数据进入数据库,但是总会缺少第一条记录。
方便提供一下报错日志吗,如果错误信息为Object type error,observer日志里应该有"ret=--4001"的日志
[2021-09-14 08:00:09.774905] WARN [SQL.PARSER] parsesql (obparser.cpp:184) [281][462][YB427F000001-0005CBE292936404] [lt=23] [dc=0] failed to parse the statement(stmt=set identityinsert ANNOUNCEMENTOBJECT on, parseresult.isfp=false, parseresult.ismultiquery=false, parseresult.yyscaninfo=0x7f49e8ed40e8, parseresult.resulttree=NULL, parseresult.mallocpool=0x7f4ae3047a70, message="syntax error, unexpected NAMEOB, expecting SETVAR or COMPEQ or TO", startcol=21, endcol=38, parseresult.line=0, parseresult.yycolumn=39, parseresult.yylineno=1, parseresult.extraerrno=0, errchargesqlmode=false, sqlmode=4194304, parseresult.sqlmode=4194304, parseresult.mayboolvalue_=false, ret=-5001)
[2021-09-14 08:00:09.774930] WARN parse_sql (ob_parser.cpp:194) [281][462][YB427F000001-0005CBE292936404] [lt=22] [dc=0] You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'ANNOUNCEMENTOBJECT on' at line 1
[2021-09-14 08:00:09.774941] WARN [SQL.PARSER] parse (ob_parser.cpp:266) [281][462][YB427F000001-0005CBE292936404] [lt=9] [dc=0] failed to parse stmt as sql(stmt=set identity_insert ANNOUNCEMENTOBJECT on, parse_mode=0, ret=-5001)
应该是在绑定NULL参数的时候出错;
SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle, // statement句柄
SQLUSMALLINT ParameterNumber, // 参数位于语句中的序号,最小为1
SQLSMALLINT InputOutputType, // 入参/出参类型标识[1]
SQLSMALLINT ValueType, // 对应的C数据类型标识[2]
SQLSMALLINT ParameterType, // 对应的SQL数据类型标识[2]
SQLULEN ColumnSize, // 对应字段长度
SQLSMALLINT DecimalDigits, // 如果是浮点数,则对应字段精度
SQLPOINTER ParameterValuePtr, // 参数缓存
SQLLEN BufferLength, // 参数缓存字节数
SQLLEN * StrLenorIndPtr); // 用于表示字符串长度或NULL值的标识[3]
StrLenorIndPtr的值为SQLNULLDATA的时候出错