首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

大过年的,多撒些分,参与就有分,呵,请问一个有点怪的有关问题。

2012-01-13 
大过年的,多撒些分,参与就有分,呵,请教一个有点怪的问题。。。。说明如下:是关于执行数据库脚本时出现的,先看

大过年的,多撒些分,参与就有分,呵,请教一个有点怪的问题。。。。
说明如下:
是关于执行数据库脚本时出现的,先看如下代码(主要):
  public void execute(String sql) {  
  Connection conn = SqlConnection.getConnection();
  Statement stmt = null;  
  try {  
  conn.setAutoCommit(false);  
  stmt = conn.createStatement();  

  stmt.addBatch(sql);  
  int[] rows = stmt.executeBatch();  
  System.out.println("rows :" + Arrays.toString(rows));  
 
  conn.commit(); 
  conn.setAutoCommit(true);
   
  } catch (Exception e) {  
  conn.rollback();  
  conn.setAutoCommit(true);
  throw e;  
  } finally { 
  stmt.close();
  conn.close();  
  } 
   
  } 

脚本内容(一):
if exists(select * from TUser where userid = N'01')  
begin
  create table TUser 
  (
  userid varchar(10),
  userName varchar(50),
  userAge varchar(4),
  userAddress varchar(500)  
  )
end

脚本内容(二):
if not exists(select * from TUser where userid = N'01')  
begin
  create table TUser 
  (
  userid varchar(10),
  userName varchar(50),
  userAge varchar(4),
  userAddress varchar(500)  
  )
end

细心的朋友,应该知道,这第二个脚本就比前多一个"not"吧?
现在就取两个脚本的字符串内容,分别为:String sql1 和 String sql2,
现在分别执行:
execute(sql1);//此处执行成功,并任何异常
execute(sql2);//此处执行失败,控制台异常信息是:
Exception in thread "main" com.microsoft.jdbc.base.BaseBatchUpdateException: [Microsoft][SQLServer 2000 Driver for JDBC]Statements that produce result sets are not allowed in batch commands.
at com.microsoft.jdbc.base.BaseStatement.executeBatchEmulation(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeBatch(Unknown Source)
  ...

补充说明:两个脚本在查询分析器中执行均正常,由此可见第二个应该并非语法错误,sql2000也打开sp4补丁,我的jdk是1.6。
问题出来了,为何执行第二个会出现异常呢?请指教,若你没做过,估计很难靠经验解答,呵,若不相信会出错,那只好试试看了,应该不大可能是我系统问题吧?

[解决办法]
up
[解决办法]
顶一下,顺便接分!!!
[解决办法]
应该就是有无not的问题
[解决办法]
happy new year~^^
[解决办法]
顶一下吧,真希望哪为高手能给个官方的解答。
[解决办法]
顶一下,对脚本还不是太熟悉
[解决办法]

Java code
try {             conn.setAutoCommit(false);             stmt = conn.createStatement();                                   stmt.execute("SET NOCOUNT ON");//加上这句实验下                        stmt.addBatch(sql);               int[] rows = stmt.executeBatch();             System.out.println("rows :" + Arrays.toString(rows));
[解决办法]
探讨
顶一下,顺便接分!!!

[解决办法]
JDBC包的版本问题
------解决方案--------------------


支持一下。
[解决办法]
路过.帮顶..暂时还解答不了这么专业的问题..
[解决办法]
有点奇怪。等待高手吧
[解决办法]
呵呵,接分。。。
[解决办法]
新年快乐
[解决办法]
语法没错吧
跟有没有not 没关系

两个脚本建的表都是一样的,是不是第一个脚本建完表没drop,第二个表重复,所以create table失败??
[解决办法]
我是贫穷...看来多来这啊..先顶上去..新年快乐..
[解决办法]
不会 进来学习的
[解决办法]
不懂
帮顶
[解决办法]
看不出问题...学习
[解决办法]
这样的语句逻辑是错误的,if (not) exists (.....)
只能判断表中有无记录,而不能判断表是否存在.

if object_id('tUser','u') is null
begin
create table ....
end
[解决办法]
我是觉得逻辑不对。

因为没有环境,没办法测试。但是我觉得如果是要判断TUser是否存在,应该去先去查询系统表。sql server里好像是sysobjects表。
[解决办法]
ddddddddddddd
[解决办法]
学习,帮顶
[解决办法]
if exists(select * from TUser where userid = N'01')
if not exists(select * from TUser where userid = N'01')
这个是判断TUser有无数据吧??还是判断此表是否存在???

另外,create table 是DDL
当然,有些sqlserver 这个也可以rollback 
很长时间没用sqlserver 了。
记不太清。

你的错误应该与你的判断无关。

你换一个系统试试在windows2000上试一下再说。
用JAVA在XP上操作sqlserver 有什么怪问题。
这个你不能按常理去推。

你用的数据库是2000的,包用的2005的。
不过,我建议你在windows 2000下试一试,
那样的结果才能看出问题。



[解决办法]
幫頂
[解决办法]
大过年的,我来接分!
[解决办法]
给CSDN的朋友拜年了
[解决办法]
帮顶,顺便JF
[解决办法]


[解决办法]
看不出问题..学习ing !
[解决办法]
uo
[解决办法]

[解决办法]
学习咯,大伙新年愉快!
[解决办法]
友情支持一下.
[解决办法]
能力有限...........
帮顶~~ 新年快乐.
[解决办法]
路过而已
[解决办法]
支持下
------解决方案--------------------


up,能力有限,呵呵
[解决办法]
这个问题很可能是你先执行了第一个sql1,然后执行sql2,
可能有些编译后的东西被存贮到了DB上

你试验过sql2->sql1的执行顺序吗?
[解决办法]
建议你更新到最新版的jdbc看看,微软网站有!
[SQLServer 2000 Driver for JDBC

你的应该是老版本的驱动! 找不到的话,用这个
http://www.laozizhu.com/view.jsp?articleId=474

记得Driver和URL都需要修改

微软的BUG报告地址如下:http://support.microsoft.com/kb/894555/zh-cn

热点排行