数据库是SQL SERVER 2005
编译环境是Eclipse
我要用bulk insert往数据库表里面插数据,可能会插入多张表,所以我在程序里面是将这些插入写在一个sql语句里面一起执行,如下:
BULK Insert [db].[dbo].[table1]
From "D:\cnas\csvsms\file\1\***.csv"
WITH (
FIRSTROW = 4,
FORMATFILE ='d:/***.fmt')
BULK Insert [db].[dbo].[table2]
From "D:\cnas\csvsms\file\1\****.csv"
WITH (
FIRSTROW = 4,
FORMATFILE ='d:/****.fmt')
最开始执行的时候插入第二个的时候会报错,但是报错之后前面插得数据也成功插入了,这样很明显是不行的,所以我想到了事务,于是解决方案如下:
执行的时候加入如下代码:
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
url = GlobalsConfig.getDBUrl();
user = GlobalsConfig.getDBUser();
password = GlobalsConfig.getDBPwd();
PreparedStatement ps = null;
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
ps = conn.prepareStatement(cmd);
ps.executeUpdate();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (Exception ex) {
ex.printStackTrace();
}
e.printStackTrace();
}
把sql传入,执行,就OK了,成功在JDBC里面添加事务。