1.解决了读取pub_init_all.sql文件乱码的问题(new String(b, "UTF-8");)
2.解决多个sql语句分号隔开不能批量执行的问题(加 &allowMultiQueries=true)
private static final String RDSADDRESSIP = MessageManager.getMsg("rdsAddressIp");
private static final String DBINSTANCEID = MessageManager.getMsg("dbInstanceId"); private static final String ACCESSKEYID = MessageManager.getMsg("accessKeyId"); private static final String ACCESSSECRET = MessageManager.getMsg("accessSecret"); private static final String FORNAME = "com.mysql.jdbc.Driver";
@RequestMapping("/executeSql") @ResponseBody public Msg executeSql(HttpServletRequest request, String accountName, String dbName) throws Exception { String realPath = request.getSession().getServletContext().getRealPath("intSql/pub_init_all.sql"); //通过jdbc执行sql文件 File file=new File(realPath); byte[] b= FileCopyUtils.copyToByteArray(file); String sql = new String(b, "UTF-8"); String res = JdbcUtil.executeSql(FORNAME, RDSADDRESSIP, PORT, dbName, accountName, accountName, sql); if (res.equals("success")) { return Msg.success().add("成功"); }else { return Msg.fail().add("初始化sql执行失败"); } }
package com.huikemgmt.common; import java.sql.*; /** * @author wangxl * @date 2018-05-31 */ public class JdbcUtil { public static String executeSql(String forName,String ip,String port,String dbName,String accountName, String password, String sql) { Connection conn = null; String url = "jdbc:mysql://" + ip +":"+port+"/"+dbName+"?user="+accountName+"&password="+password+"&useUnicode=true&characterEncoding=UTF8&allowMultiQueries=true"; try { Class.forName(forName);// 动态加载mysql驱动"com.mysql.jdbc.Driver" conn = DriverManager.getConnection(url); Statement stmt = conn.createStatement();// Statement里面带有很多方法,比如executeUpdate可以实现插入,更新和删除等 int result = stmt.executeUpdate(sql);// executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功 return "success"; } catch (SQLException e) { e.printStackTrace(); return "fail"; } catch (Exception e) { e.printStackTrace(); return "fail"; } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }