在多语句事务内不允许使用 Create DATABASE 语句

在使用JDBC操作SQLServer数据库时,可能会遇到:在多语句事务内不允许使用 Create DATABASE 语句的报错;原因是在使用JDBC时,设置了自动事务提交:

Connection conn = DriverManager.getConnection(
	"jdbc:sqlserver://localhost:1433;databaseName=test;", 
	"sa", 
	"sa"
);
conn.setAutoCommit(true);

java.sql.Connection对象默认开启自动事务提交,因此需要手动显示关闭自动事务提交,在关闭自动事务提交前创建数据库即可:

String sql = "create database " + accounts.getDatabas();
Integer creDB = conn.prepareStatement(sql).executeUpdate();
conn.setAutoCommit(false);

另外提一嘴,SQLServer创建数据库成功后不会返回1或0(受影响的行数);MySQL创建数据库会返回1或0是因为在创建数据库时往information_schema.SCHEMATA表中写入了一条数据,也就是创建数据库时候的数据库信息,因此返回了受影响行数

因为开启了自动事务提交,每一条语句(update、insert、delete)等都会自动进行提交,每一条语句则是一次事务,也就是SQLServer所描述的单语句事务;
而将自动事务关闭后,SQLServer将多条语句看作单个事务,则为多语句事务语句,因此才有了报错:在多语句事务内不允许使用 Create DATABASE 语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值