Java执行SQL脚本文件到数据库详解
程序员文章站
2024-02-11 19:09:40
本文实例为大家分享了java执行sql脚本文件到数据库的具体方式,供大家参考,具体内容如下
方式一:直接读取sql脚本文件的内容,然后传递到sql中。
代码:runsq...
本文实例为大家分享了java执行sql脚本文件到数据库的具体方式,供大家参考,具体内容如下
方式一:直接读取sql脚本文件的内容,然后传递到sql中。
代码:runsqlservice:
@autowired private runsqldao runsqldao; /** * 读取文件内容到sql中执行 * @param sqlpath sql文件的路径:如:d:/testproject/web/sql/脚本.sql */ public void runsqlbyreadfilecontent(string sqlpath) throws exception { try { string sqlstr = readfilebylines(sqlpath); // system.out.println("获得的文本:" + sqlstr); if (sqlstr.length() > 0) { runsqldao.runsqlbysqlstr(sqlstr); } } catch (exception e) { e.printstacktrace(); throw e; } } /** * 以行为单位读取文件,常用于读面向行的格式化文件 */ private string readfilebylines(string filepath) throws exception { stringbuffer str = new stringbuffer(); bufferedreader reader = null; try { reader = new bufferedreader(new inputstreamreader( new fileinputstream(filepath), "utf-8")); string tempstring = null; int line = 1; // 一次读入一行,直到读入null为文件结束 while ((tempstring = reader.readline()) != null) { // 显示行号 // system.out.println("line " + line + ": " + tempstring); str = str.append(" " + tempstring); line++; } reader.close(); } catch (ioexception e) { e.printstacktrace(); throw e; } finally { if (reader != null) { try { reader.close(); } catch (ioexception e1) { } } } return str.tostring(); }
runsqldao :
/** * @param sqlstr */ public void runsqlbysqlstr(string sqlstr) { map<string,object> map=new hashmap<string,object>(); map.put("sqlstr", sqlstr); sqlsessiontemplate.selectlist("runsql.runsqlbysqlstr", map); }
sqlmap:
<mapper namespace="runsql"> <select id="runsqlbysqlstr" parametertype="map"> <![cdata[ ${sqlstr}]]> </select> </mapper>
这种写法:只支持数据的变化(新增、修改、删除),且sql文件内容以begin开始,以end结束。无法更新表字段修改等操作。
方式二;使用scriptrunner
代码:runsqlservice:
/** * 执行sql脚本文件 使用scriptrunner * @param sqlpath sql文件的路径:如:d:/testproject/web/sql/脚本.sql */ public void runsqlbyscriptrunner(string sqlpath) throws exception { try { sqlsession sqlsession = sqlsessionfactory.opensession(); connection conn = sqlsession.getconnection(); scriptrunner runner = new scriptrunner(conn); runner.setescapeprocessing(false); runner.setsendfullscript(true); runner.runscript(new inputstreamreader(new fileinputstream(sqlpath), "utf-8")); } catch (exception e) { e.printstacktrace(); throw e; } }
这种写法:只能有一行sql,即一次执行一个sql语句,否则就会报错。
方式三:使用scriptutils
代码:runsqlservice:(以下两种方式:脚本.sql 和runsqlservice 在同一目录下)
方法(1)
/** * 执行sql脚本文件 使用spring工具类 */ public void runsqlbyspringutils() throws exception { try { sqlsession sqlsession = sqlsessionfactory.opensession(); connection conn = sqlsession.getconnection(); classpathresource rc = new classpathresource("脚本.sql", runsqldao.class); scriptutils.executesqlscript(conn, rc); } catch (exception e) { e.printstacktrace(); throw e; } }
方法(2)
/** * 执行sql脚本文件 使用spring工具类 */ public void runsqlbyspringutils() throws exception { try { sqlsession sqlsession = sqlsessionfactory.opensession(); connection conn = sqlsession.getconnection(); classpathresource rc = new classpathresource("脚本.sql", runsqldao.class); encodedresource er = new encodedresource(rc, "utf-8"); scriptutils.executesqlscript(conn, er); } catch (exception e) { e.printstacktrace(); throw e; } }
方法(1),脚本.sql文件必须是ansi的,否则执行到数据中汉字是乱码。
方法(2)解决了方法(1)的问题,完美了,喜欢的小伙伴们快拿去享用吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。