2016-01-05 2 views
0

Есть ли способ перезагрузить данные после сервера вниз?База данных H2, есть ли способ перезагрузить прошлые данные?

Я думал, что мне нужно сохранить данные как тип файла, поэтому я набрал url добавил ': file:' также я мог бы найти файл базы данных (databasename.mv.db). Но каждый раз, когда я снова подключаюсь, файл перезаписывается. Если кто-то знает, как с этим бороться, скажите мне.

+0

Вы используете сервер H2, а затем подключаетесь к нему? Какую строку соединения JDBC вы используете для сервера и какую строку подключения используете в клиентах? –

+0

Я использую весеннюю загрузку на стороне сервера и создаю некоторые данные (вызов сценария на стороне сервера для создания 20 случайных данных для теста) и поиск их через консоль H2. Строка соединения обеих сторон: «jdbc: h2: файл: ~/data/DBTest». – Jay

ответ

-1

Способ, которым я хотел бы сделать это на начальной стадии разработки/для загрузки тестовых данных в приложение, - это хранить данные в файле CSV и просто загружать его в H2, когда приложение загрузки весны запускается с помощью ContextRefreshedEvent как показано ниже:

@Component 
public class RootVerbLoader implements ApplicationListener<ContextRefreshedEvent> { 

private static final int SOURCE_LANGUAGE = 1; 
private static final int TARGET_LANGUAGE = 2; 
private RootVerbRepository repo; 

@Autowired 
public void setRepo(RootVerbRepository repo) { 
    this.repo = repo; 
} 

@Override 
public void onApplicationEvent(ContextRefreshedEvent arg0) { 

    loadDataFromCSV("classpath:hanasu.csv", "to speak", "はなす"); 
    loadDataFromCSV("classpath:iku.csv", "to go", "いく"); 
    loadDataFromCSV("classpath:iu.csv", "to say", "いう"); 
    loadDataFromCSV("classpath:kaku.csv", "to write", "かく"); 
    loadDataFromCSV("classpath:kasegu.csv", "to earn", "かせぐ"); 
    loadDataFromCSV("classpath:kuru.csv", "to come", "くる"); 
    loadDataFromCSV("classpath:matsu.csv", "to wait", "まつ"); 
    loadDataFromCSV("classpath:miru.csv", "to look", "みる"); 
    loadDataFromCSV("classpath:naru.csv", "to become", "なる"); 
    loadDataFromCSV("classpath:nomu.csv", "to drink", "のむ"); 
    loadDataFromCSV("classpath:shinu.csv", "to die", "しぬ"); 
    loadDataFromCSV("classpath:suru.csv", "to do", "する"); 
    loadDataFromCSV("classpath:yobu.csv", "to call", "よぶ"); 
} 

private void loadDataFromCSV(String filename, String source, String target) { 

    Set<TranslationPair> conjugations = new HashSet<>(); 

    try { 

     ResultSet rs = new Csv().read(filename, null, null); 
     int i = 1; 
     while (rs.next()) { 
      conjugations.add(
       new TranslationPair(
        rs.getString(SOURCE_LANGUAGE), 
        rs.getString(TARGET_LANGUAGE), 
        i 
       ) 
      ); 
      i++; 
     } 

     rs.close(); 

    } catch(SQLException se) { 
     se.printStackTrace(); 
    } 

    repo.save(new RootVerb(source, target, conjugations)); 
} 

}

код для записи из данных в файл CSV также невероятно прост:

SimpleResultSet rs = new SimpleResultSet(); 
rs.addColumn("NAME", Types.VARCHAR, 255, 0); 
rs.addColumn("EMAIL", Types.VARCHAR, 255, 0); 
rs.addRow("Bob Meier", "[email protected]"); 
rs.addRow("John Jones", "[email protected]"); 
new Csv().write("data/test.csv", rs, null); 

Я считаю, что это очень быстрый способ прототипа структуры данных/схемы таблиц без необходимости писать какие-либо sql-скрипты или вообще много работать. Очень быстро начать.

+0

Благодарим вас за помощь :) – Jay

+0

Добро пожаловать. Я был очень рад обнаружить, что у h2 была эта функциональность и насколько это было легко реализовать, поэтому более чем рады поделиться знаниями. Если этот ответ решил вашу проблему, пожалуйста, отметьте его как принятый ответ, поэтому сообщество знает :) –

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