读书人

大过年的多撒些分参与就有分呵

发布时间: 2012-01-13 22:43:30 作者: rapoo

大过年的,多撒些分,参与就有分,呵,请教一个有点怪的问题。。。。
说明如下:
是关于执行数据库脚本时出现的,先看如下代码(主要):
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

读书人网 >J2SE开发

热点推荐