2013-02-19 75 views
0

我使用Toad数据库建模器创建了Oracle方案。我通常使用SQL开发人员用SQL语句导入新方案。现在我想创建一个Java程序来自动完成这个过程。我创建至今这将打开连接到Oracle这样的Java代码:使用Java程序创建Oracle方案

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 
import oracle.jdbc.pool.OracleConnectionPoolDataSource; 
import org.junit.BeforeClass; 
import org.junit.Test; 

public class OracleCreateScheme 
{ 

    public OracleCreateScheme() 
    { 
    } 

    @BeforeClass 
    public static void setUpClass() throws Exception 
    { 
     // rcarver - setup the jndi context and the datasource 
     try 
     { 
      // Create initial context 
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
        "org.apache.naming.java.javaURLContextFactory"); 
      System.setProperty(Context.URL_PKG_PREFIXES, 
        "org.apache.naming"); 
      InitialContext ic = new InitialContext(); 

      ic.createSubcontext("java:"); 
      ic.createSubcontext("java:/comp"); 
      ic.createSubcontext("java:/comp/env"); 
      ic.createSubcontext("java:/comp/env/jdbc"); 

      // Construct DataSource 
      OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource(); 
      ds.setURL("jdbc:oracle:thin:@host:port:db"); 
      ds.setUser("admin"); 
      ds.setPassword("qwerty"); 

      ic.bind("java:/comp/env/jdbc/oracle", ds); 
     } 
     catch (NamingException ex) 
     { 
      //Logger.getLogger(MyDAOTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    @Test 
    public void createOracleScheme() throws SQLException, NamingException 
    { 

     Context initContext = new InitialContext(); 
     Context webContext = (Context) initContext.lookup("java:/comp/env"); 

     DataSource ds = (DataSource) webContext.lookup("jdbc/Oracle"); 

     String SqlStatement = null; 

     if (ds == null) 
     { 
      throw new SQLException(); 
     } 


     Connection conn = ds.getConnection(); 
     if (conn == null) 
     { 
      throw new SQLException(); 
     } 

     PreparedStatement ps = null; 
     ResultSet resultSet = null; 

     try 
     { 
      conn.setAutoCommit(false); 
      boolean committed = false; 
      try 
      { 

       ps = conn.prepareStatement(SqlStatement); 
       resultSet = ps.executeQuery(); 

       conn.commit(); 
       committed = true; 
      } 
      finally 
      { 
       if (!committed) 
       { 
        conn.rollback(); 
       } 
      } 
     } 
     finally 
     { 
      ps.close(); 
      conn.close(); 
     } 

    } 
} 

你能告诉我,以便执行SQL文件到Oracle我要如何修改代码? 也有任何现成的Java程序,我可以用于相同的目的?

+0

你可以看看http://www.coderanch.com/t/298527/JDBC/databases/execution-PL-SQL-JDBC,但它取决于PL/SQL文件的结构。 – BigMike 2013-02-19 14:05:31

+0

Ant? Maven的?哈德森? – APC 2013-02-19 14:05:43

+0

@APC我使用Maven。 – 2013-02-19 14:06:28

回答

3

我会建议使用现有的东西,而不是编写自己的实现。有许多功能强大的工具,有这个任务:

的Maven插件SQL [mojo.codehaus.org/sql-maven-plugin/examples/execute.html]

DBUnit的Fileloader [www.dbunit。 org/howto.html#fileloader]

或Spring(如果你被迫使用:-)) [static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ jdbc.html]

查看本文的文章: [stackoverflow.com/questions/7565420/creat电子和清洁-DB-设置,一次换只测试,所有的DAO]

希望这有助于...