Создание базы данных "Java DB" и связанных таблиц в основной проверке, чтобы увидеть, существуют ли они? - PullRequest
0 голосов
/ 12 октября 2011

Я создаю заявку на Netbeans 7! Мне бы хотелось, чтобы у моего приложения был небольшой код в основном, чтобы оно могло создавать проверку соединения с БД Java, чтобы увидеть, существуют ли база данных и связанные таблицы, если не создать базу данных и таблицы в ней. Если бы вы могли предоставить пример кода, это было бы так же здорово! Я уже посмотрел на http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/, но я все еще не уверен, как проверить существующую базу данных перед ее созданием!

Ответы [ 4 ]

4 голосов
/ 12 октября 2011

Я бы хотел, чтобы у моего приложения был небольшой код на главном, чтобы оно могло создать проверку соединения с БД Java, чтобы проверить, существуют ли база данных и связанные таблицы, если нет, создать базу данных и таблицы в ней.

Вы можете добавить свойство create=true в URL JDBC.Это создает экземпляр базы данных Derby, если база данных, указанная databaseName, не существует во время подключения.Если база данных уже существует, выдается предупреждение, но, насколько мне известно, SQLException не выдается.

Что касается создания таблиц, то лучше всего это делать при запуске приложения до того, как выдоступ к базе данных для типичной транзакционной деятельности.Вам нужно будет запросить системную таблицу SYSTABLES в Derby / JavaDB, чтобы выяснить, существуют ли ваши таблицы.

Connection conn;
try
{
    String[] tableNames = {"tableA", "tableB"};
    String[] createTableStmts = ... // read the CREATE TABLE SQL statements from a file into this String array. First statement is for the tableA, and so on.
    conn = DriverManager.getConnection("jdbc:derby:sampleDB;create=true");
    for(int ctr =0 ; ctr < tableNames.length; ctr++)
    {
        PreparedStatement pStmt = conn.prepareStatement("SELECT t.tablename FROM sys.systables t WHERE t.tablename = ?");
        pStmt.setString(1, tableNames[ctr]);
        ResultSet rs = pStmt.executeQuery();
        if(!rs.next())
        {
            // Create the table
            Statement stmt = conn.createStatement();
            stmt.executeUpdate(createTableStmts[ctr]);
            stmt.close();
        }
        rs.close();
        pStmt.close();
    }
}
catch (SQLException e)
{
    throw new RuntimeException("Problem starting the app...", e);
}

Затем могут быть созданы любые несуществующие таблицы.Это, конечно, не очень хорошая практика, если ваше приложение имеет несколько версий, и схема меняется от одной версии приложения к другой.Если вам необходимо обработать такой сценарий, вы должны сохранить версию приложения в отдельной таблице (которая обычно не меняется в разных версиях), а затем применить дельта-сценарии базы данных, относящиеся к более новой версии, чтобы перенести вашу базу данных из более старой версии.,Рекомендуется использовать инструменты управления изменениями базы данных, такие как DbDeploy или LiquiBase .Под капотом инструменты выполняют ту же операцию, сохраняя номер версии приложения в таблице, и выполняют дельта-сценарии с версиями, превышающими версию в базе данных.

В заключительном примечании нетсущественная разница между JavaDB и Apache Derby .

0 голосов
/ 12 октября 2011

Я не знаю, насколько Oracle изменил Derby до его ребрендинга, но если они не сильно изменились, вам может помочь Удалить все таблицы в DB Derby .Ответы на этот вопрос содержат несколько способов проверить, какие таблицы существуют в базе данных.

База данных будет указана при создании соединения с БД;в противном случае соединение не будет успешно создано.(Точный синтаксис этого зависит от того, как вы подключаетесь к своей БД, но логика этого та же, что и в ответе Шри.)

0 голосов
/ 12 октября 2011

Свойство create=true создаст новую базу данных, если она не существует. Вы можете использовать DatabaseMetadata.getTables() метод для проверки существования Tables.

Connection cn=DriverManager.getConnection("jdbc:derby://localhost:1527/testdb3;create=true", "testdb3", "testdb3");

ResultSet mrs=cn.getMetaData().getTables(null, null, null, new String[]{"TABLE"});

while(mrs.next())
 {
  if(!"EMP".equals(mrs.getString("TABLE_NAME")))
   {
    Statement st=cn.createStatement(); 
    st.executeUpdate("create table emp (eno int primary key, ename varchar(30))");
    st.close();;
   }
}
mrs.close();
cn.close();
0 голосов
/ 12 октября 2011
Connection conn = getMySqlConnection();
    System.out.println("Got Connection.");
    Statement st = conn.createStatement();

    String tableName = ur table name ;
    String query = ur query;
    Statement stmt = null;
    ResultSet rs = null;
    try {
      stmt = conn.createStatement();
      rs = stmt.executeQuery(query);
      System.out.println("Exist");;
    }
    catch (Exception e ) {
      // table does not exist or some other problem
      //e.printStackTrace();
      System.out.println("Not Exist");
    }

    st.close();
    conn.close();
...