Страница 1 из 1

Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 22:02
Xroft
Доброго времени суток!
Благодаря соседней теме как прочитать данные из *.csv узнал как загнать данные в Базу :roll:
.... теперь собсно, стал вопрос как достать оттуда таблицу и загнать ее в .CSV :lol:
Тема очень актуальна.
Заранее ОГРОМНОЕ спасибо за хороший пример:)

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 22:08
rezak90
http://stackoverflow.com/questions/4632 ... ble-values

Второй ответ показывает как читать данные с sqlite и записывать их в csv.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 22:15
Xroft
rezak90 писал(а):http://stackoverflow.com/questions/4632 ... ble-values

Второй ответ показывает как читать данные с sqlite и записывать их в csv.
Вот это наверно то что надо!!! :D :D :D Огромное спасибо, ща буду кодить....:)))

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 22:47
Xroft
А вообще, во что умеет экспортировать Android?
Основная цель - импорт из базы устройства через инет в 1С.
В принципе .... думаю ... CSV тут вполне хватит ... но хочется послушать мнения умных людей:)

Заранее спасибо!!!

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 22:59
rezak90
Если подробней опишите функционал то может и созреет какая то мысль. Потому что я не совсем понял что вам нужно. То что я понял: передаётся бд по http а потом как то её пихнуть в 1С))) каша, подробнее ТЗ нужно.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 23:03
Xroft
rezak90 писал(а):Если подробней опишите функционал то может и созреет какая то мысль. Потому что я не совсем понял что вам нужно. То что я понял: передаётся бд по http а потом как то её пихнуть в 1С))) каша, подробнее ТЗ нужно.
ну по 1С есть свой программер:) втягивать будет он ... пока разговора не было, но скоро будет. Главное, как говорится, не ударить лицом в грязь:)

Вопрос как бы не конкретный, просто интересует во что еще можно выгрузить таблицу(цы) из SQLite под андроидом.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 23:07
rezak90
так вопрос по моему нужно ставить иначе, как удобней будет принимать эти данные? как передавать? Например можно json, можно вообще по-байтно, можно таким прекрасным средством protobuf - это всё если по и-нету. Если же какими то другими путями то уже размышлять нужно.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 23:22
Xroft
Вот вот, тыкните носом пожалуйста где можно почитать про json и protobuf на русском:)
P.S. Я просто сам пока не знаю что мне надо будет:)

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 11 сен 2012, 23:54
rezak90
protobuf:
https://developers.google.com/protocol- ... vatutorial
а здесь можно почитать про время сериализации и десериализации, что может быть важно для большого объёма инфы:
http://thejava.info/j2ee/45-other/82-protobuf-overview-
json:
http://www.json.org/java/

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 12 сен 2012, 03:48
Xroft
rezak90 писал(а):http://stackoverflow.com/questions/4632 ... ble-values

Второй ответ показывает как читать данные с sqlite и записывать их в csv.
Все здорово, вот только все окультурил. Спасибо за ссылку, помогло.
В итоге код превратился в :

Код: Выделить всё

private void exportTheDB() throws IOException
    {
        String fil = "myexp.csv";
        String encoding="Windows-1251";

        try {       	Log.d(TAG, "Траим .....");
            
            FileOutputStream fOut = openFileOutput(fil, Context.MODE_WORLD_READABLE);
            OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, encoding);
            Log.d(TAG, "Пишем .....Шапку      ");
            myOutWriter.append("_id;company;name;summa;type;date_time;confirm");
            myOutWriter.append("\n");
            Cursor zero = mDbHelper.fatchAllOrderHd();
            startManagingCursor(zero);
        	Log.d(TAG, "Выгружаем ..............................      ");
            if (zero != null) {
                if (zero.moveToFirst()) {
                    do {
                    	String _id = zero.getString(zero.getColumnIndex("_id"));
                        String company = zero.getString(zero.getColumnIndex("company"));
                        String name = zero.getString(zero.getColumnIndex("name"));
                        String summa = zero.getString(zero.getColumnIndex("summa"));
                        String type = zero.getString(zero.getColumnIndex("type"));
                        String date_time = zero.getString(zero.getColumnIndex("date_time"));
                        String confirm = zero.getString(zero.getColumnIndex("confirm"));
                        Log.d(TAG, _id +"  "+ company +"  "+ name +"  "+ summa +"  "+ type +"  "+ date_time +"  "+confirm);
                        
                        myOutWriter.append(_id+";"+company+";"+name+";"+summa+";"+type+";"+date_time+";"+confirm);  
                        myOutWriter.append("\n");
                    }

                    while (zero.moveToNext());
                }

                zero.close();
                myOutWriter.close();
                fOut.close();

            }
        } catch (SQLiteException se) 
        {
            //Log.e(getClass().getSimpleName(),"Could not create or Open the database");
        }

        finally {

          //  sampleDB.close();

        }
Надеюсь это кому то поможет.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 12 сен 2012, 03:49
Xroft
rezak90 писал(а):protobuf:
https://developers.google.com/protocol- ... vatutorial
а здесь можно почитать про время сериализации и десериализации, что может быть важно для большого объёма инфы:
http://thejava.info/j2ee/45-other/82-protobuf-overview-
json:
http://www.json.org/java/
Спасибо, обязательно почитаю

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 12 сен 2012, 04:34
neoksi
Извиняюсь, но мой мой мозг автоматом зацепился за возможность слома алгоритма.
Гипотетически, если в одном из полей БД в тексте будет использован знак ";", то произойдет сбой при передаче данных между источниками.
Думаю тут нужно предусмотреть подмену этого знака.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 12 сен 2012, 05:10
Xroft
neoksi писал(а):Извиняюсь, но мой мой мозг автоматом зацепился за возможность слома алгоритма.
Гипотетически, если в одном из полей БД в тексте будет использован знак ";", то произойдет сбой при передаче данных между источниками.
Думаю тут нужно предусмотреть подмену этого знака.
Да, вы правы на все 100%. Не очень удачный выбор сепаратора ... :D
Думаю что выбор сепаратора диктует экспортируемый текст.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 17 ноя 2013, 10:27
razmus
Подскажите пожалуйста, как можно записать данные в CSV без использования библиотек?

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 17 ноя 2013, 11:40
trew
razmus писал(а):Подскажите пожалуйста, как можно записать данные в CSV без использования библиотек?
Запиши данные в текстовый файл, в формате csv, а затем переименуй файл из txt в csv.

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 17 ноя 2013, 14:17
Foenix
trew писал(а): Запиши данные в текстовый файл, в формате csv, а затем переименуй файл из txt в csv.
:P

Re: Как загнать таблицу из SQLite в .CSV?

Добавлено: 18 ноя 2013, 11:37
razmus
Спасибо, код для истории, может кому понадобится.

Код: Выделить всё

    @SuppressLint("NewApi")
	public void writeToFile(String data) {
		final File DATABASE_DIRECTORY = new File(
				   Environment.getExternalStorageDirectory(), "ImportExport");
				 final File PATH = new File(DATABASE_DIRECTORY,"log.csv");
	    try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(PATH, true)))) {
	        bw.append(data+ "\r\n");
	    }
	    catch (IOException e) {
	        Log.e("Exception", "File write failed: " + e.toString());
	    } 
	}