今天在操作数据库的时候报出了一个错误: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);
- }
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是的确没有拼错,那么问题就是出在我的标识列上了,仔细检查了一下这张表的主键列,结果发现竟然忘记设置它为标识列并令其自增了。这时突然想起来我昨天貌似把数据库重新覆盖过一次,用来覆盖的那个数据库是还没有设计完整的!我狂晕~
不过,其实遇到问题遇到错误是件好事,从中可以学到很多知识,没有问题才是最大的问题!切记:遇到问题时不要头大,或许当时有点烦躁,但一定要冷静一下,静下心来仔细想想为什么会出现这样的问题,你会发现原来问题如此简单!
2008.02.29 / 标签:
MSSQL数据库 / 分类:
信息安全
看看菜鸟是如何搞定XX信息港的目标:http://xxx.vnet.cn/ 其实以前拿到过他的服务器,放了很多后门,不过都没多久没了。记得几个月前又进去了一次,再次放了很多后门,过了几天再次丢失 – -!最近一直在上课,也没时间搞这方面的东西,昨天晚上闲着没事干,就想起了她(不要乱想哦,我指的是这个网站,o(∩_∩)o…哈哈)。目标信息: 1.外网 2.开放3389 3.装有MSSQL,但没有对外开放1433 4.有注入点且SA权限 下面开始步入正题,其实他的SA密码我都有而且他一直没有改密码(后面拿到WEBSHELL查看证实!),只是没对外开1433,所以也没用。没事干,找出她的注入点(我想这个就不用多讲怎么找了吧),得到权限是SA的。直接用NBSI执行NET USER XX XX /ADD 没有成功。难道把这个删了?再执行NET1 USE XX XX /ADD还是没有成功。看来是把XP_CMDSHELL删了,尝试恢复回去,结果不成功。接下来尝试了很多方法都没有成功。哎,算了,可能人品问题吧。那总该有备份权限吧,先拿个WEBSHELL再说,于是乎用NBSI备份了一句话上去。
尝试保存一个大马失败,权限设置的很死,只能用这个备份出来的一句话。怎么办呢,反正也是闲着没事干,把他整个盘都一个一个翻翻看看。找到一个GHOST目录,
看到里面有备份的系统,我突然有了一种很傻的冲动:下他一个系统下来自己恢复到自己电脑上,然后用 SAMInside破解SAM文件,(你可能会说,那干嘛不直接下她SAM文件破,一句话:下不了!),经过再三的思想斗争,我决定下吧!于是。。。
等了半天没反应,估计是因为太大了吧(因为我尝试下载其他文件可以!),浏览器直接卡住了。OK,放弃,继续翻。。。。发现个目录比较可疑,进去看看发现XPLOG70.DLL(我靠,原来在这里备份着,我就说怎么恢复不了呢。)爽啊~~~~
执行: Exec master.dbo.addextendedproc ‘xp_cmdshell’, ‘e:\backup\sql\xplog70.dll’ 完成后,再去运行了一次添加用户,还是不行。。。。。看来人品真够背的。OK,先放那吧,不整了,先睡觉明天再想办法。一夜过去了。。。又是一个晚上。。。依然闲着没事干,找点资料看看吧,结果在黑鹰下到了《JHACKJ垃圾技术挑战变态SA提权》这个教程。看到它里面列出了一些代码是我没有试过的。于是乎赶紧用记事本抄下来,JHACKJ在他的入侵中的这段代码没有成功,但是我用来就成功了。o(∩_∩)o…哈哈 看来今天我的人品有所好转啊。代码如下: declare @o int exec sp_oacreate ‘scripting.filesystemobject’, @o out exec sp_oamethod @o, ‘copyfile’,null,’c:\windows\explorer.exe’ ,’c:\windows\system32\sethc.exe’ 大家一看就明白是怎么个意思了吧,就是那个5个SHIFT后门,其实这个我也想过,我是想用WEBSHELL传个上去。可是结果没有写权限。 OK,我们URL递交: http://xxx.vnet.cn/info/ad1.asp?lbid=901;declare @o int exec sp_oacreate ‘scripting.filesystemobject’, @o out exec sp_oamethod @o, ‘copyfile’,null,’c:\windows\explorer.exe’ ,’c:\windows\system32\sethc.exe’ 结果返回的页面和前一个页面不一样,一般来说不一样就是没有成功了。不过我还是抱着试一试的心态连上3389,5shift,OK,explorer.exe如期运行了。
下面就是找到CMD运行,再加管理,结果翻遍SYSTEM32也没找到CMD,
确定是被删掉了而且NET.EXE和NET1.EXE都没了。我们在计算机管理里面加,就不用那几个东西了。
然后我们登陆。
管理员也在线啊。。。。。赶紧闪。。。 
2008.02.20 / 标签:
mssql,
MSSQL数据库,
数据库 / 分类: 未分类
项目开发需要经过需求分析,概要设计,详细设计,代码编写,运行测试和打包发行几个阶段。重点套在各个阶段,数据的设计过程。
阅读全文>>
2008.02.20 / 标签:
MSSQL数据库,
数据库 / 分类: 未分类
你也许会问,在第一阶段,根据业务需求,我们直接建库,建表,插入测试数据,然后在查询数据,为什么现在需要强调先设计再建库,建表呢?原因非常简单,正如我们修造建筑物一样,如果您是盖一间茅屋或者一间简易平房,您会花钱请人设计图纸吗?毫无疑问,没人请。但是,如果是房地产开发商开发一个楼盘,修建居住小区,他会请人设计施工图纸吗?答案是肯定的,不但开发商会考虑设计施工图纸,甚至很专业的购房者也会在看房时要求开发商出示设计图纸。
同样道理,在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多,表和表之间的关系比较复杂,我们就需要考虑规范的数据库设计,然后再进行具体的建库,建表工作。不管是创建动态网站,还是创建桌面窗口应用程序,数据库设计的重要性都不言而喻。如果设计不当,查询起来就非常吃力,程序的性能也会受到影响。无论您使用的是SQLServer还是Oracle数据库,通过进行规范化的数据库设计,都可以使您的程序代码更具可读性,更容易扩展,从而也会提升项目的应用性能。
1.什么是数据库设计
数据库设计就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。
2.设计数据库非常重要
数据库中创建的数据结构的种类,以及在数据对象之间建立的复杂关系是数据库系统效率的重要决定因素。