2017-08-09 97 views
0

我在java中使用jdbc創建了postgresql中的架構。它似乎工作正常,但我需要一個函數來創建模式,我想知道是否有可能創建一個名稱通過變量的架構...這是我的類CreateSchema:在java中使用名稱傳遞的名稱創建架構

是否有可能?

String sql = "CREATE SCHEMA centro"; 

在這一行「centro」就像一個變量。

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    try { 
     Class.forName("org.postgresql.Driver"); 

     System.out.println("Connecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     System.out.println("Creating Schema..."); 
     stmt = conn.createStatement(); 

     String sql = "CREATE SCHEMA centro"; 
     stmt.executeUpdate(sql); 
     System.out.println("Schema created successfully..."); 
    } catch (SQLException se) { 
     se.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (stmt != null) { 
       stmt.close(); 
      } 
     } catch (SQLException se2) { 
     } 
     try { 
      if (conn != null) { 
       conn.close(); 
      } 
     } catch (SQLException se) { 
      se.printStackTrace(); 
     } 
    } 

謝謝。

+0

如果'串SCHEMANAME = 「炫酷」'你是問,如果像'字符串SQL = 「創建模式」 + schemaName'.can做些什麼呢? –

+0

是的,這是我的問題 –

+0

這就是你的答案然後:-) –

回答

0

如果我理解正確,那麼你只是簡單的字符串串聯後。

因此,舉例來說,如果你運行的命令行應用程序,並提供第一個參數爲「炫酷」,該代碼會

public static void main(String[] args) { 
    //all your other stuff 

    String sql = "CREATE SCHEMA " + args[0]; // -> "CREATE SCHEMA centro" 
} 

或者,如果你想在代碼中的某處指定它

public static void main(String[] args) { 
    //all your other stuff 

    String schema = "centro"; 

    String sql = "CREATE SCHEMA " + schema; // -> "CREATE SCHEMA centro" 
} 
+0

它不起作用,給我的錯誤org.postgresql.util.PSQLException:錯誤:語法錯誤在或附近「SCHEMAnameS –

+0

@GabrielaRdz你忘了之間的空間'CREATE SCHEMA' and your schema name。 – rorschach

1

首先,您可以連接到postgresql,而無需獲取數據庫名稱到您的BASE_URL。關於你的問題。是的,您可以通過將SQL語句連接到給定名稱來創建或刪除數據庫:"CREATE DATABASE " + databseName

所以,你的代碼可能如下:

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    try { 
     Class.forName("org.postgresql.Driver"); 

     System.out.println("Connecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     System.out.println("Creating Schema..."); 
     stmt = conn.createStatement(); 

     String dbName = "centro"; // or get it from command line 
     String sql = "CREATE SCHEMA " + dbName; 
     stmt.executeUpdate(sql); 
     System.out.println("Schema created successfully..."); 
    } catch (SQLException se) { 
     se.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (stmt != null) { 
       stmt.close(); 
      } 
     } catch (SQLException se2) { 
     } 
     try { 
      if (conn != null) { 
       conn.close(); 
      } 
     } catch (SQLException se) { 
      se.printStackTrace(); 
     } 
    } 
+0

:(give the error:org.postgresql.util.PSQLException:ERROR:syntax error at or near「SCHEMAnameEschema」 –

+0

似乎你忘記了SCHEMA之後的空格,是不是? –

+0

然而,你也可以使用這個語句:''CREATE DATABASE「+ dbName' –