在java中创建一个名称由变量传递的模式

时间:2017-08-09 21:29:52

标签: java sql postgresql jdbc

我正在使用jdbc在java中的类中创建postgresql中的模式。它似乎工作正常,但我需要一个函数来创建模式,我想知道是否可能创建一个名称由变量传递的模式...这是我的类CreateSchema:

有可能吗?

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

感谢。

2 个答案:

答案 0 :(得分: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();
        }
    }

答案 1 :(得分:0)

如果我理解正确,那么你就是在简单的字符串连接之后。

因此,例如,如果从命令行运行应用程序并将第一个参数提供为“centro”,则代码将为

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"
}