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