使用java以及jdbc不使用第三方库执行sql文件脚本
使用java以及jdbc不使用第三方库执行sql文件脚本
使用java执行sql脚本的方法
解析sql脚本,删除不必要的注释和空行
将语句按分号拆开
并将最终的语句放入batch里面 最后进行执行
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /* * 使用java以及jdbc执行sql脚本的工具示例代码 */ public class SqlHelper { public static void main(String[] args){ String path = "文件地址字符串"; String sql = getText(path); List<String> sqlarr = getSql(sql); for(int i=0; i<10; i++){ System.out.println(i+":"+sqlarr.get(i)); } try{ SqlHelper.execute(getConn(),sqlarr); }catch(Exception e){ e.printStackTrace(); } } private static Connection getConn() { String driver = "com.mysql.jdbc.Driver"; String url = "数据库连接"; String username = "账号"; String password = "密码"; Connection conn = null; try { Class.forName(driver); //classLoader,加载对应驱动 conn = (Connection) DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void execute(Connection conn, List<String> sqlFile) throws Exception { Statement stmt = null; stmt = conn.createStatement(); for (String sql : sqlFile) { sql = sql.trim(); if(sql!=null&&!sql.equals("")) stmt.addBatch(sql); } int[] rows = stmt.executeBatch(); System.out.println("Row count:" + Arrays.toString(rows)); conn.close(); } /* * getText方法吧path路径里面的文件按行读数来放入一个大的String里面去 * 并在换行的时候加入\r\n */ public static String getText(String path){ File file = new File(path); if(!file.exists()||file.isDirectory()){ return null; } StringBuilder sb = new StringBuilder(); try{ FileInputStream fis = new FileInputStream(path); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br = new BufferedReader(isr); String temp = null; temp = br.readLine(); while(temp!=null){ if(temp.length()>=2){ String str1 = temp.substring(0, 1); String str2 = temp.substring(0, 2); if(str1.equals("#")||str2.equals("--")||str2.equals("/*")||str2.equals("//")){ temp = br.readLine(); continue; } sb.append(temp+"\r\n"); } temp = br.readLine(); } br.close(); }catch(Exception e){ e.printStackTrace(); } return sb.toString(); } /* * getSqlArray方法 * 从文件的sql字符串中分析出能够独立执行的sql语句并返回 */ public static List<String> getSql(String sql){ String s = sql; s = s.replaceAll("\r\n", "\r"); s = s.replaceAll("\r", "\n"); List<String> ret = new ArrayList<String>(); String[] sqlarry = s.split(";"); //用;把所有的语句都分开成一个个单独的句子 sqlarry = filter(sqlarry); ret = Arrays.asList(sqlarry); return ret; } public static String[] filter(String[] ss){ List<String> strs = new ArrayList<String>(); for(String s : ss){ if(s!=null&&!s.equals("")){ strs.add(s); } } String[] result = new String[strs.size()]; for(int i=0; i<strs.size(); i++){ result[i] = strs.get(i).toString(); } return result; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)