通过Java运行SQL脚本文件

问题描述:

为了执行一个完整的SQL脚本文件[其中包括create table语句和一些定义create table的规则]。我发现这个解决方案是为了实现它--->“只要你不介意在Ant上运行依赖关系,就可以从Java中执行SQL脚本,而无需自己读取它们。在我看来,这种依赖关系是很好的理由,你的情况下面是示例代码,其中SQLEXEC类家住的ant.jar:通过Java运行SQL脚本文件

private void executeSql(String sqlFilePath) { 
    final class SqlExecuter extends SQLExec { 
     public SqlExecuter() { 
      Project project = new Project(); 
      project.init(); 
      setProject(project); 
      setTaskType("sql"); 
      setTaskName("sql"); 
     } 
    } 

    SqlExecuter executer = new SqlExecuter(); 
    executer.setSrc(new File(sqlFilePath)); 
    executer.setDriver(args.getDriver()); 
    executer.setPassword(args.getPwd()); 
    executer.setUserid(args.getUser()); 
    executer.setUrl(args.getUrl()); 
    executer.execute(); 
} 

,我不知道是否会工作或没有!

大家能否给些提示工作在上述解决方案?我的意思是如何获得代码的工作,并让我知道任何其他解决方案来执行SQL脚本文件!!!

谢谢, Mahesh

+3

试一下吗?你有什么具体问题? – 2011-04-28 07:15:16

+1

此外,你甚至尝试了很多解决方案向你提出有关http://stackoverflow.com/questions/5801838/executing-a-sql-file-through-java/5802128? – 2011-04-28 07:18:44

+1

尝试自己有什么问题?你为什么期望别人做你的工作? – 2011-04-28 07:40:04

这是我从互联网上偷取的一个代码片段(我不记得在哪里),我知道它很好用:它不会按照下面的方式运行。它可能会给你足够的线索,让你的工作虽然,或者你可能会发现在谷歌某处的来源:

private void runScriptOnce(Connection conn, Reader reader) throws IOException, SQLException { 
    StringBuffer command = null; 
    try { 
     LineNumberReader lineReader = new LineNumberReader(reader); 
     String line = null; 
     while ((line = lineReader.readLine()) != null) { 
      if (command == null) { 
       command = new StringBuffer(); 
      } 
      String trimmedLine = line.trim(); 
      if (trimmedLine.startsWith("--")) { 
       println(trimmedLine); 
      } else if (trimmedLine.length() < 1 
        || trimmedLine.startsWith("//")) { 
       // Do nothing 
      } else if (trimmedLine.length() < 1 
        || trimmedLine.startsWith("--")) { 
       // Do nothing 
      } else if (!fullLineDelimiter 
        && trimmedLine.endsWith(getDelimiter()) 
        || fullLineDelimiter 
        && trimmedLine.equals(getDelimiter())) { 
       command.append(line.substring(0, line 
         .lastIndexOf(getDelimiter()))); 
       command.append(" "); 
       Statement statement = conn.createStatement(); 

       println(command); 

       boolean hasResults = false; 
       if (stopOnError) { 
        hasResults = statement.execute(command.toString()); 
       } else { 
        try { 
         statement.execute(command.toString()); 
        } catch (SQLException e) { 
         e.fillInStackTrace(); 
         printlnError("Error executing: " + command); 
         printlnError(e); 
        } 
       } 

       if (autoCommit && !conn.getAutoCommit()) { 
        conn.commit(); 
       } 

       ResultSet rs = statement.getResultSet(); 
       if (hasResults && rs != null) { 
        ResultSetMetaData md = rs.getMetaData(); 
        int cols = md.getColumnCount(); 
        for (int i = 0; i < cols; i++) { 
         String name = md.getColumnLabel(i); 
         print(name + "\t"); 
        } 
        println(""); 
        while (rs.next()) { 
         for (int i = 0; i < cols; i++) { 
          String value = rs.getString(i); 
          print(value + "\t"); 
         } 
         println(""); 
        } 
       } 

       command = null; 
       try { 
        statement.close(); 
       } catch (Exception e) { 
        // Ignore 
       } 
       Thread.yield(); 
      } else { 
       command.append(line); 
       command.append(" "); 
      } 
     } 
     if (!autoCommit) { 
      conn.commit(); 
     } 
    } catch (SQLException e) { 
     e.fillInStackTrace(); 
     printlnError("Error executing: " + command); 
     printlnError(e); 
     throw e; 
    } catch (IOException e) { 
     e.fillInStackTrace(); 
     printlnError("Error executing: " + command); 
     printlnError(e); 
     throw e; 
    } finally { 
     conn.rollback(); 
     flush(); 
    } 
} 

private String getDelimiter() { 
    return delimiter; 
} 

private void print(Object o) { 
    if (logWriter != null) { 
     System.out.print(o); 
    } 
} 

private void println(Object o) { 
    if (logWriter != null) { 
     logWriter.println(o); 
    } 
} 

private void printlnError(Object o) { 
    if (errorLogWriter != null) { 
     errorLogWriter.println(o); 
    } 
} 

private void flush() { 
    if (logWriter != null) { 
     logWriter.flush(); 
    } 
    if (errorLogWriter != null) { 
     errorLogWriter.flush(); 
    } 
}