jdbc批处理使用for循环创建库总是出错,但一条一条写出可以正确执行,求大神帮助

xiemeng_345 2017-12-28 05:08:19
public static ArrayList<String> readFileByLines(String filePath) throws Exception{
ArrayList<String> sqlList = new ArrayList<String>();
StringBuffer str = new StringBuffer();
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(filePath), "UTF-8"));
String tempString = null;
int line = 1;
while ((tempString = reader.readLine()) != null) {
str = str.append(" " + tempString);
line++;
}
reader.close();
String[] sqlArr = str.toString().split(";");
for (int i = 0; i < sqlArr.length; i++) {
sqlList.add(sqlArr[i].toString());
}
return sqlList;
}

public static void test3(String sqlPath) throws Exception {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<String> sqlList = (ArrayList) readFileByLines(sqlPath);
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "123456");
conn.setAutoCommit(false);
stmt = conn.createStatement();
for(int i=0;i<sqlList.size();i++){
String sql = sqlList.get(i);
stmt.addBatch(sql);
}
//stmt.addBatch("drop table if exists b");
stmt.executeBatch();
conn.commit(); // 提交
drop table if exists c
CREATE TABLE `c` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `hiredate` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bestprotect 2017-12-29
  • 打赏
  • 举报
回复
关闭mysql自动提交就可以了。 在mysql客户端中: mysql>select @@autocommit; 查看是否开启了自动提交,如果为1,表明开启了。如果是0,表明关闭。 可以采用下面的方式,进行关闭。 mysql>set autocommit=0;
xiemeng_345 2017-12-28
  • 打赏
  • 举报
回复
java.sql.SQLException: Can't call commit when autocommit=true
computerclass 2017-12-28
  • 打赏
  • 举报
回复
开启事务,提交放后边试试

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧