jdbc连接rds实例的库并执行sql文件

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();
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_29883183/article/details/80539303