今天在操作数据库的时候报出了一个错误:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]插入错误: 列名或所提供值的数目与表定义不匹配。怎么可能呢,我昨天对同样的数据库同样的表执行同样的操作时候是没有问题的啊!开玩笑呢吧!开始抓虫…
首先从程序的代码入手,顺便用企业管理器打开对应的表,检查了一下字段数是对的呀,难道代码中的SQL我拼错了?给代码中又加了句System.out.println(sql)。
- public static boolean createCategory(CategoryBean cate)
- {
- String sql = "INSERT INTO blog_Category VALUES(‘"+cate.getCateName()+"’,"+cate.getCateCount()+")";
- dbc = new DataSource();
- System.out.println(sql);
- stmt = dbc.getPreparedStatement(sql);
- return dbc.executeUpdate(stmt);
- }
接着再次执行了一下还是报错:
INSERT INTO blog_Category VALUES(‘测试’,0)
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]插入错误: 列名或所提供值的数目与表定义不匹配。
从输出的结果来看,我的SQL是绝对没有拼错的!OK,静下心来整理一下思路:
假如数据库中有张表,此表包含3个字段且均为必填,如果有一个字段是自增类型的标识列,那么我们写SQL的时候就不需要管它。反之,在插入一条数据的时候就必须有这一字段的数据,否则就会报出这样的错误。
OK,想明白了,也知道自己的SQL是的确没有拼错,那么问题就是出在我的标识列上了,仔细检查了一下这张表的主键列,结果发现竟然忘记设置它为标识列并令其自增了。这时突然想起来我昨天貌似把数据库重新覆盖过一次,用来覆盖的那个数据库是还没有设计完整的!我狂晕~
不过,其实遇到问题遇到错误是件好事,从中可以学到很多知识,没有问题才是最大的问题!切记:遇到问题时不要头大,或许当时有点烦躁,但一定要冷静一下,静下心来仔细想想为什么会出现这样的问题,你会发现原来问题如此简单!