Урок 34. Хранение данных. SQLite

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 12 дек 2013, 14:29

вам выше ссылку дали, как делать, а вы отказались.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 12 дек 2013, 15:09

Всем спасибо огромное. Получилось сделать по ссылке вверху.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 17 дек 2013, 16:45

Добрый день!

Подскажите, пожалуйста, а как обрабатываются данные, если используется одна БД с несколькими таблицами?
То есть на эмуляторе можно работать с разными таблицами, а на реальном устройстве данные из таблиц не читаются (если одна таблица, то всё Ok).
Как то надо особенно подключать таблицы, так же как и БД?

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

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 17 дек 2013, 17:12

нет, ничего особенного делать не нужно. Только в запросах указывать имя таблицы.
Что у тебя там происходит - не ясно.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 19 дек 2013, 18:51

Все мучаюсь с БД с несколькими таблицами и не получается как-то решить этот вопрос.

У меня есть класс DbHelper:

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

package com.example.oncreate_001_1_word;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


class DbHelper extends SQLiteOpenHelper {

	final String LOG_TAG = "myLogs";
	SQLiteDatabase db;
	DbHelper dbHelper;

	private final Context myContext;
	private static final String DATABASE_NAME = "DBWords";
	public final static String DATABASE_PATH = "/data/data/com.example.oncreate_001_1_word/databases/";
	public static final int DATABASE_VERSION = 1;

	
	public DbHelper(Context context) {
		super(context, DATABASE_NAME, null, 1);
		this.myContext = context;
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		 // TODO Auto-generated method stub
		 Log.d(LOG_TAG, "===Создаем новую ДБ===");
		
		 db.execSQL("create table mytable ("
		 + "_id integer primary key autoincrement,"
		 + "engWord text," + "rusWord text, " + "indLearn text"
		 + ");");
	}

	@Override
	public void onUpgrade (SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

	// Create a empty database on the system
	public void createDatabase() throws IOException {

		boolean dbExist = checkDataBase();

		if (dbExist) {
			Log.v("DB Exists", "db exists");
			// By calling this method here onUpgrade will be called on a
			// writeable database, but only if the version number has been
			// bumped
			// onUpgrade(myDataBase, DATABASE_VERSION_old,
			// DATABASE_VERSION);
		}

		boolean dbExist1 = checkDataBase();
		if (!dbExist1) {
			this.getReadableDatabase();
			try {
				this.close();
				copyDataBase();
			} catch (IOException e) {
				throw new Error("Error copying database");
			}
		}

	}

	// Check database already exist or not
	private boolean checkDataBase() {
		boolean checkDB = false;
		try {
			String myPath = DATABASE_PATH + DATABASE_NAME;
			File dbfile = new File(myPath);
			checkDB = dbfile.exists();
		} catch (SQLiteException e) {
		}
		return checkDB;
	}

	// Copies your database from your local assets-folder to the just
	// created empty database in the system folder
	private void copyDataBase() throws IOException {

		String outFileName = DATABASE_PATH + DATABASE_NAME;

		OutputStream myOutput = new FileOutputStream(outFileName);
		InputStream myInput = myContext.getAssets().open(DATABASE_NAME);

		byte[] buffer = new byte[1024];
		int length;
		while ((length = myInput.read(buffer)) > 0) {
			myOutput.write(buffer, 0, length);
		}
		myInput.close();
		myOutput.flush();
		myOutput.close();
	}

	// delete database
	// public void db_delete()
	// {
	// File file = new File(DATABASE_PATH + DATABASE_NAME);
	// if(file.exists())
	// {
	// file.delete();
	// System.out.println("delete database file.");
	// }
	// }

	// Open database
	public void openDatabase() throws SQLException {
		String myPath = DATABASE_PATH + DATABASE_NAME;
		db = SQLiteDatabase.openDatabase(myPath, null,
				SQLiteDatabase.OPEN_READWRITE);
	}

	public synchronized void closeDataBase() throws SQLException {
		if (db != null)
			db.close();
		super.close();
	}

}

Если я работаю с БД с одной таблицей, то все ok. Но если я работаю с БД, в которой несколько таблиц, то ничего не получается.
Мне кажется, что проблема в методе onCreate(SQLiteDatabase db), так как в нем создается таблица "create table mytable..."
а у меня таблицы: mytable, mytable_1, mytable_2.
Тут как-то надо подменять значение mytable на значения mytable_1 или mytable_2.
Или я вообще не в том месте ищу ошибку?
Заранее спасибо за отклики!

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 34. Хранение данных. SQLite

Сообщение trew » 19 дек 2013, 19:49

-Alex- писал(а):Все мучаюсь с БД с несколькими таблицами и не получается как-то решить этот вопрос.

а у меня таблицы: mytable, mytable_1, mytable_2.
Тут как-то надо подменять значение mytable на значения mytable_1 или mytable_2.
Или я вообще не в том месте ищу ошибку?
Заранее спасибо за отклики!
Как вы думаете, что делает команда ?
[syntax=sql]create table mytable[/syntax]
а у меня таблицы: mytable, mytable_1, mytable_2.
Вы умеете копировать код?

(и прочитайте мою подпись, как выкладывать код в правильных тегах)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 19 дек 2013, 20:00

Alex, разберитесь с каждой строчкой своего кода, нельзя так слепо копировать код, не понимая, что он делает.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 19 дек 2013, 20:27

Спасибо огромное за помощь.

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 25 дек 2013, 20:49

Мне тут вот что интересно, если моя база будет состоять из нескольких тысяч строк, то можно ее забивать допустим как в Акцесе, напрямую с таблицей работать, а не программно и не через эмулятор?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 25 дек 2013, 21:00

зачем в аксесе? Есть разные менеджеры sqlite специально для этого
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 02 янв 2014, 13:44

Просто я раньше работал только с аксесом, по этому и привел пример на нем. Подскажите тогда пожалуйста мне наилучший менеджер и нужную документацию по нему. За ранее спасибо!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 02 янв 2014, 15:48

я не знаю наилучшего, устала наверное.. попробовала 2 или три, оставила себе sqliteStudio и еще более легкий, без установки, с минимальными функциями SQLite Database Browser
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 34. Хранение данных. SQLite

Сообщение altwin » 02 янв 2014, 17:39

Joker1989 писал(а):Просто я раньше работал только с аксесом, по этому и привел пример на нем. Подскажите тогда пожалуйста мне наилучший менеджер и нужную документацию по нему. За ранее спасибо!
Еще никто не жаловался - http://www.navicat.com/ (SQLite - http://www.navicat.com/products/navicat-for-sqlite)
Изображение

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 06 янв 2014, 08:19

А все здесь пользуются эклипсом или может еще какими либо редакторами? Я вот почему интересуюсь, когда я писал на делфи, то во время написания кода он выдавал различные подсказки по коду и это очень удобно по скольку код бывает очень большим, а эклипс такое делает крайне редко. Я по пробовал андроид студио, у него с этим все в порядке, но ни одно приложение я не смог запустить из-за какой-то ошибки, что то типо "не может пройти синхронизацию с Gradle". Помогите чем можите...

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 06 янв 2014, 10:37

И вот еще вопрос, который меня чесно говоря уже бесит! Почему когда я с книги в ручную переписываю код, то он запускается, но не выполняется, а когда этот же самый код тупо копирую - все нормально? А переписываю я его в точности, до последнего символа.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 34. Хранение данных. SQLite

Сообщение Mikhail_dev » 06 янв 2014, 10:58

А все здесь пользуются эклипсом или может еще какими либо редакторами?
Лично я использую еще и AndroidStudio, но новичкам советую Eclipse, потому как к нему на любой вопрос можно найти ответ.
я не смог запустить из-за какой-то ошибки, что то типо "не может пройти синхронизацию с Gradle". Помогите чем можите...
Вот именно по этой причине советую пока работать с Eclipse =)
И вот еще вопрос, который меня чесно говоря уже бесит! Почему когда я с книги в ручную переписываю код, то он запускается, но не выполняется, а когда этот же самый код тупо копирую - все нормально? А переписываю я его в точности, до последнего символа.
5 баллов! :lol:

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 06 янв 2014, 12:01

а как подключить уже имеющуюся табдицу (myTab.s3db) к приложению, и где она должна лежать что бы корректно работала?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 34. Хранение данных. SQLite

Сообщение altwin » 06 янв 2014, 12:16

Joker1989 писал(а):а как подключить уже имеющуюся табдицу (myTab.s3db) к приложению, и где она должна лежать что бы корректно работала?
таблица хранится в базе данных и существование ее отдельно не возможно, потому подключить вы можете только базу, предварительно создав там нужную таблицу. Ее нужно просто скопировать в папку /data/data/yout_app_name/databases/. О том, как это сделать уже не раз писали на этом форуме.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 34. Хранение данных. SQLite

Сообщение altwin » 06 янв 2014, 13:04

m090050 писал(а): Вот именно по этой причине советую пока работать с Eclipse =)
Никогда не мог понять - почему так часто советуют eclipse, вообще как можно это советовать :lol: ? Понятно, что gradle способен создать проблемы новичку, но зачем этому новичку вообще трогать продукт у которого еще релиза не было, то, что он не падает - не значит ничего - это beta и представляет из себя во многом костыль.

Чем IDEA не угодила? бесплатной версии для андрюхи более, чем достаточно, работает она без "затмений" да и собирает без gradle не хуже, чем с ним.
Изображение

Joker1989
Сообщения: 45
Зарегистрирован: 04 дек 2013, 12:22

Re: Урок 34. Хранение данных. SQLite

Сообщение Joker1989 » 06 янв 2014, 13:37

А можно ссылку где ее скачать и нужную документацию по ней если токовая есть?

Ответить