2015-12-13 4 views
1

Я довольно новичок в Eclipse & Java и в настоящее время работает над проектом, где мне нужно реализовать мою первую базу данных.Как подключиться к базе данных H2 из Java & H2 DB

Поэтому я попытался подключить Eclipse и базу данных H2. Хотя часть базы данных H2 работает сама по себе, я не могу понять, как ее подключить к Eclipse.

Я создал следующий класс и попытался сделать все, как указано на сайте:

package srpTracking; 

import java.sql.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import org.h2.tools.DeleteDbFiles; 

public class DatabaseConnector { 

    public static void main(String... args) throws Exception { 
     DeleteDbFiles.execute("~", "test", true); 

     Class.forName("org.h2.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:h2:~/test"); 
     Statement stat = conn.createStatement(); 


     stat.execute("create table test(id int primary key, name varchar(255))"); 
     stat.execute("insert into test values(1, 'Hello')"); 
     ResultSet rs; 
     rs = stat.executeQuery("select * from test"); 
     while (rs.next()) { 
      System.out.println(rs.getString("name")); 
     } 
    } 
     stat.close(); 
     conn.close(); 
} 

я получаю ошибки идентификатор для двух последних строк кода, но и ничего не подключить.

Я скопировал файл H2.jar в папку проекта в подпапке под названием lib.

К сожалению, я не могу по какой-то причине установить плагин DTP, потому что, по-видимому, мне не хватает файла org.eclipse.core.runtime.

Что нужно изменить о моем коде, подключайте Java и H2? Также мне нужно скопировать и файлы H2 в определенные папки?

+1

Вы пытаетесь обучить две совершенно разные проблемы в один вопрос. Ваша первая проблема заключается в том, что 'stat.close()' и 'con.close()' statement находятся вне метода 'main' и, следовательно, синтаксические ошибки: ваш код не компилируется. Проблема с плагином DTP не связана и проблема конфигурации/установки Eclipse. Измените свой вопрос, чтобы ограничить его только одной проблемой, и задайте новый отдельный вопрос для другой проблемы. –

ответ

0

Рассмотрите эти изменения в своем главном. Используя try-with-resource, вы делегируете близость к JVM - с дополнительным преимуществом, которое даже в случаях исключений вам также не нужно будет закрывать.

Почему это не сработало раньше? Ваши переменные побежали из области - вы пытались закрыть после main() закончился.

public static void main(String... args) throws Exception { 
    DeleteDbFiles.execute("~", "test", true); 

    Class.forName("org.h2.Driver"); 
    try (Connection conn = DriverManager.getConnection("jdbc:h2:~/test"); 
      Statement stat = conn.createStatement()) { 
     stat.execute("create table test(id int primary key, name varchar(255))"); 
     stat.execute("insert into test values(1, 'Hello')"); 
     try (ResultSet rs = stat.executeQuery("select * from test")) { 
      while (rs.next()) { 
       System.out.println(rs.getString("name")); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Каково использование Class.forName? Проверка наличия драйвера? –

+2

До Java 6 это вызвало загрузку класса драйвера, инициализирующего все статические переменные и кодовые блоки, позволяя Драйверу регистрироваться в JDBC. В настоящее время это просто вызовет более убедительное исключение (класс не найден), а не какой-то непонятный драйвер для URL-адреса JDBC. – Jan

+0

Спасибо за разъяснение! –

Смежные вопросы