Java Derby创建用户和“架构不存在”错误

时间:2015-11-22 04:10:07

标签: java database-schema derby javadb

我正在使用derby DB在Java中编写一些归档程序。我现在使用默认用户“APP”时,我的程序和数据库连接(创建表,插入和选择数据等)工作正常。

当我尝试添加一些用户并更改数据库属性时,我无法连接到数据库。我正在下面分享我的用户创建和更改数据库属性类;

创建用户和设置数据库属性:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class CreateUser {

    public static void main(String[] args) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException{

      Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
      String connectionUrl = "jdbc:derby:sampleDB;user=APP;password=APP";
      Connection con = null;
      Statement stmt = null;

      con = DriverManager.getConnection(connectionUrl);
      stmt = con.createStatement();

      stmt.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
            "'derby.connection.requireAuthentication', 'true')");

      stmt.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
            "'derby.authentication.provider', 'BUILTIN')");

      stmt.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
            "'derby.user.testuser', 'ajaxj3x9')");

      stmt.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
            "'derby.database.fullAccessUsers', 'testuser')");

      stmt.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
            "'derby.database.propertiesOnly', 'false')");

      stmt.close();

      con.close();


        boolean gotSQLExc = false;
        try {
            DriverManager.getConnection("jdbc:derby:;shutdown=true");
        } catch (SQLException se) {
            if ( se.getSQLState().equals("XJ015") ) {
                gotSQLExc = true;
            }
        }
        if (!gotSQLExc) {
             System.out.println("Database did not shut down normally");
        } else {
             System.out.println("Database shut down normally");
        }



    }

}

之后,当我使用以下语句连接数据库时,我收到java.sql.SQLSyntaxErrorException: Schema 'TESTUSER' does not exist错误

java.sql.Statement stmt = null;
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
String connectionUrl = "jdbc:derby:sampleDB;create=false;user=testuser;password=ajaxj3x9";
con = DriverManager.getConnection(connectionUrl);
stmt = con.createStatement();

此外,我在CREATE SCHEMA AUTHORIZATION testuser类中定义的所有创建和属性之后尝试了CreateUser(确保我在尝试此操作之前先进行回滚创建过程并在添加此行后运行相同的创建过程)但是当我尝试同一声明我这次收到TESTTABLE Schema Not Exist错误。

0 个答案:

没有答案