2011-04-28 108 views
1

爲了執行一個完整的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

回答

0

這是我從互聯網上偷取的一個代碼片段(我不記得在哪裏),我知道它很好用:它不會按照下面的方式運行。它可能會給你足夠的線索,讓你的工作雖然,或者你可能會發現在谷歌某處的來源:

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