Создание базы данных SQL lite из файла CSV в Android Studio - PullRequest
0 голосов
/ 04 июля 2018

Я получил файл CSV, в основном список городов с некоторыми кодами. В моем приложении пользователи пишут свой город рождения, появляется список городов, предлагающий это, когда выбранный код города используется для других вещей. Могу ли я просто переместить файл .csv в папку Android Studio и использовать его как базу данных, созданную с помощью sql lite? Если нет, я должен создать базу данных sql lite в Android Studio (класс DatabaseManager с SqlOpenHelper и некоторые запросы, если я его получил), а затем скопировать .csv? Как я могу просто "скопировать" это?

РЕДАКТИРОВАТЬ: Извините, но я понял, что в моем CSV-файле слишком много столбцов, и было бы уродливо и утомительно добавлять столбцы вручную. Поэтому я использовал DB Browser для SQLite, теперь я получил файл .db. Могу ли я просто поместить его в определенную папку базы данных и запросить его в моем приложении?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Можно ли просто переместить файл .csv в папку Android Studio и просто использовать это как база данных сделанная с sql lite?

номер

База данных sqlite, т. Е. Файл, должна быть отформатирована так, чтобы подпрограммы SQLite могли получить доступ к содержащимся в ней данным. например первые 16 байтов файла ДОЛЖНЫ БЫТЬ формат SQLite 3 \ 000 и т. д. согласно Формат файла базы данных

Если нет, следует ли создавать базу данных sql lite в Android Studio ( Класс DatabaseManager с SqlOpenHelper и некоторые запросы, если я получил это), затем скопируйте .csv?

У вас есть различные варианты, например, : -

  1. Вы можете скопировать файл csv в соответствующее место, чтобы он был частью пакета (например, папка assets), а затем иметь подпрограмму для генерации соответствующих строк в соответствующих таблицах. Это потребует создания базы данных в приложении.

  2. Вы можете просто жестко закодировать вставки в приложении. Опять же, это потребует создания базы данных в приложении.

  3. Вы можете использовать инструмент SQLite для создания предварительно заполненной базы данных, скопировать ее в папку ресурсов (assets / database, если используется SQLiteAssetHelper) и скопировать базу данных из папки активов. В этом случае не нужно иметь CSV-файл.

Пример варианта 1

В качестве примера, близкого к варианту 1 (хотя данные не хранятся в базе данных), следующий код извлекает данные из файла csv из папки активов.

Этот параметр используется в этом случае, поскольку файл изменяется на ежегодной основе, поэтому изменения файла и последующее распространение приложения применяют изменения.

Файл выглядит так: -

# This file contains annual figures
# 5 figures are required for each year and are comma seperated
# 1) The year to which the figures are relevant
# 2) The annualised MTAWE (Male Total Average Weekly Earnings)
# 3) The annual Parenting Payment Single (used to determine fixed assessment)
# 4) The fixed assessment annual rate
# 5) The Child Support Minimum Annual Rate
# Lines starting with # are comments and are ignored
2006,50648,13040,1040,320
2007,52073,13315,1102,330
2008,54756,13980,1122,339
2009,56425,13980,1178,356
2010,58854,14615,1193,360
2011,61781,15909,1226,370
2012,64865,16679,1269,383
2013,67137,17256,1294,391
2014,70569,18197,1322,399
2015,70829,18728,1352,408
2016,71256,19011,1373,414
2017,72462,19201,1390,420
2018,73606,19568,1416,427

Он хранится в папке активов приложения как year_changes.txt Следующий код используется для получения значений (которые можно легко добавить в таблицу): -

private void BuildFormulaValues() {
    mFormulaValues = new ArrayList<>();
    mYears = new ArrayList<>();
    StringBuilder errors = new StringBuilder();
    try {
        InputStream is = getAssets().open(formula_values_file);
        BufferedReader bf = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = bf.readLine()) != null ) {
            if (line.substring(0,0).equals("#")) {
                continue;
            }
            String[] values = line.split(",");
            if (values.length == 5) {
                try {
                    mFormulaValues.add(
                            new FormulaValues(
                                    this,
                                    Long.parseLong(values[0]),
                                    Long.parseLong(values[1]),
                                    Long.parseLong(values[2]),
                                    Long.parseLong(values[3]),
                                    Long.parseLong(values[4])
                            )
                    );
                } catch (NumberFormatException e) {
                    if (errors.length() > 0) {
                        errors.append("\n");
                    }
                    errors.append(
                            this.getResources().getString(
                                    R.string.invalid_formula_value_notnumeric)
                    );
                    continue;
                }
                mYears.add(values[0]);
            } else {
                if (errors.length() > 0) {
                    errors.append("\n");
                    errors.append(
                            getResources().getString(
                                    R.string.invalid_formula_value_line)
                    );
                }
            }
        }
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    if (errors.length() > 0) {
        String emsg = "Note CS CareCalculations may be inaccurate due to the following issues:-\n\n" +
                errors.toString();
        Toast.makeText(
                this,
                emsg,
                Toast.LENGTH_SHORT
        ).show();
    }
}
0 голосов
/ 04 июля 2018

Попробуйте добавить данные .csv в вашу базу данных

.
FileReader file = new FileReader(fileName);
BufferedReader buffer = new BufferedReader(file);
String line = "";
String tableName = "TABLE_NAME";
String columns = "_id, name, dt1, dt2, dt3";
String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
String str2 = ");";
db.beginTransaction();
while ((line = buffer.readLine()) != null) {
  StringBuilder sb = new StringBuilder(str1);
  String[] str = line.split(",");
  sb.append("'" + str[0] + "',");
  sb.append(str[1] + "',");
  sb.append(str[2] + "',");
  sb.append(str[3] + "'");
  sb.append(str[4] + "'");
  sb.append(str2);
  db.execSQL(sb.toString());
}
db.setTransactionSuccessful();
db.endTransaction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...