在使用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 语句