今天在调试程序的过程中,执行sql报错Column count doesn't match value count at row 1
首先看了执行的sql,插入的sql语句并没有什么问题,然后偶然发现了jdbc连接mysql的配置如下。
以上连接属性中使用了useServerPrepStmts=true属性,然后我将这个属性删除掉,重新启动程序,竟然执行程序成功了!
然后我在网上搜索此属性的作用,整理如下
useServerPrepStmts
如果服务器支持,是否使用服务器端预处理语句? 默认值为“真”。
mysql执行一个预编译操作后,会将sql模板(即带占位符“?”的sql),以及参数列表(模板中用各个占位符表示)缓存,下一次有同样的sql模板发来的时候,直接将参数传给这个模板,拼好后execute。虽然mysql的预编译功能对性能影响不大,但在jdbc中使用PreparedStatement是必要的,可以有效地防止sql注入
看了如上的一些说法,但我还是不明白为什么我会出现如上的问题,如果有人知道或者遇到过这样的问题,欢迎指导。