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

Обсуждение уроков
razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

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

Сообщение razmus » 05 дек 2014, 10:42

Sanek517s писал(а):неа) как его обьявить?)
Возьмите лучше ArrayList<String> some = new ArrayList<String>();
читать some.get(i) писать some.add(cursor.getString(cursor.getColumnIndex(DataBaseRecords.RECORDS)))

И почитайте учебник...

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

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

Сообщение Sanek517s » 05 дек 2014, 10:50

Разобрался, спасибо. Java действительно стоит подучить)

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

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

Сообщение Foenix » 05 дек 2014, 11:21

Sanek517s, проходи по ссылкам в подписи.
R.id.team

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

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

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

Сообщение Sanek517s » 05 дек 2014, 11:37

ок, спс

AleksReD87
Сообщения: 1
Зарегистрирован: 19 дек 2014, 11:18

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

Сообщение AleksReD87 » 19 дек 2014, 12:39

Привет всем.
я недавно начал изучать Андройд. Работаю в Студии. по уроку №34 собрал проект.
Запускаю, заполняю поля. жмем ADD - ошибка!!

в логах нашел вот это
12-19 09:35:38.555 608-608/aleksred87.contacts D/My Logs﹕ --- onCreate database---
12-19 09:35:38.565 608-608/aleksred87.contacts I/Database﹕ sqlite returned: error code = 1, msg = near "cteate": syntax error
12-19 09:35:38.565 608-608/aleksred87.contacts E/Database﹕ Failure 1 (near "cteate": syntax error) on 0x497e00 when preparing 'cteate table mytable (idname textphone text);'.

Подскажите где можно искать проблему

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

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

Сообщение Sanek517s » 19 дек 2014, 12:45

с телефона не особи вижу но иожет cReate а не cteate

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

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

Сообщение Foenix » 19 дек 2014, 13:29

AleksReD87 писал(а): Подскажите где можно искать проблему
проблема тут
AleksReD87 писал(а): 12-19 09:35:38.555 608-608/aleksred87.contacts D/My Logs﹕ --- onCreate database---
12-19 09:35:38.565 608-608/aleksred87.contacts I/Database﹕ sqlite returned: error code = 1, msg = near "cteate": syntax error
12-19 09:35:38.565 608-608/aleksred87.contacts E/Database﹕ Failure 1 (near "cteate": syntax error) on 0x497e00 when preparing 'cteate table mytable (idname textphone text);'.
R.id.team

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

Ivan2007
Сообщения: 22
Зарегистрирован: 05 янв 2015, 19:55

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

Сообщение Ivan2007 » 20 янв 2015, 15:02

Здравствуйте друзья.Тут такая беда...В Log Cat не отображаются логи с тагом mylogs Log.d вроде везде прописан...ниже код активити...
[syntax=java5]package r.p0341_simplesqlite;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;




public class MainActivity extends Activity implements OnClickListener {
final String LOG_TAG = "myLogs";
Button btnAdd, btnRead, btnClear;
EditText etName, etEmail;
DBHelper dbHelper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(this);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(this);
etName = (EditText) findViewById(R.id.etName);
etEmail = (EditText) findViewById(R.id.etEmail);
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
ContentValues cv = new ContentValues();
String name = etName.getText().toString();
String email = etEmail.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
cv.put("name", name);
cv.put("email", email);
long rowID = db.insert("mytable", null, cv);
Log.d(LOG_TAG, "row inserted, ID = " + rowID);
break;
case R.id.btnRead:
Log.d(LOG_TAG, "--- Rows in mytable: ---");
Cursor c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
int idColIndex = c.getColumnIndex("id");
int nameColIndex = c.getColumnIndex("name");
int emailColIndex = c.getColumnIndex("email");
do {
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) +
", name = " + c.getString(nameColIndex) +
", email = " + c.getString(emailColIndex));
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
break;
case R.id.btnClear:
Log.d(LOG_TAG, "--- Clear mytable: ---");
int clearCount = db.delete("mytable", null, null);
Log.d(LOG_TAG, "deleted rows count = " + clearCount);
break;
}
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "email text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}[/syntax]

Ivan2007
Сообщения: 22
Зарегистрирован: 05 янв 2015, 19:55

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

Сообщение Ivan2007 » 21 янв 2015, 04:21

Нашел решение,но появился вопрос..Логи начали отображаться только когда я изменил код в MainActivity.
Я заменил строку final String LOG_TAG = "myLogs";
на
private static final String LOG_TAG = "myLogs";
Но я так не понял в чем была причина и от чего логи не отображались...если кто в курсе объясните, буду благодарен

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

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

Сообщение Sky-VIN » 01 фев 2015, 18:29

Добрый день.
Тестирую на своем телефоне.
Подскажите, как считать базу из другого package? ( /data/data/другой_package/databases/base.db )
или как импортировать другой package в свой проект в Android Studio?
или может есть универсальная переменная пути будильников? ( Environment.DIRECTORY_ALARMS не подходит )
Завтра будет.
Лучше.

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

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

Сообщение Foenix » 01 фев 2015, 22:56

база шарится контент-провайдерами. Если у будильников шарится,то должен быть контент провайдер у него.
R.id.team

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

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

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

Сообщение AlexeyFedor » 22 фев 2015, 13:45

Доброго дня.
Я конечно понимаю что програмировать элементарно, просто надо знать правильную последовательность нажатия кнопок.
ПЛЗ. Если не трудно с примером на уровне колбасы.
Имеется папка с картинками. Эти картинки надо поместить в БД потом их показать. Почему то гугл предлагает только примеры где картинки конвертируются в двоичную последовательность. И тут же говорит так делать нельзя. Или еще лучше какой нить умник по его мнению скажет дельный совет, ну там вообще без матов не получается.
И еще если не сложно, чтобы с картинками работать на SD карте. и как это все сделать в эклипсе. Лучше всего пошагово.
Если картинки хранить непосредственно в проекте в какой нить папке ресурсов, и доставать их через ид, то у мну все получилось.
картинки лежат сдесь
Вложения
картинки лежат сдесь.JPG
картинки лежат сдесь.JPG (29.13 КБ) 15144 просмотра

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

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

Сообщение Foenix » 22 фев 2015, 13:54

Вместо кучи лишних слов и осуждений других, что где-то кто-то не так сказал, лучше бы понятно объяснили задачу - что вам нужно делать.
Зачем картинки вообще в БД помещать? так не делают. В БД помещают ссылки на картинки, а потом отображают их где нужно. Но если бы вы объяснили четко что нужно - ответ был бы точнее.
R.id.team

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

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

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

Сообщение AlexeyFedor » 22 фев 2015, 14:21

Foenix писал(а):Вместо кучи лишних слов и осуждений других, что где-то кто-то не так сказал, лучше бы понятно объяснили задачу - что вам нужно делать.
Зачем картинки вообще в БД помещать? так не делают. В БД помещают ссылки на картинки, а потом отображают их где нужно. Но если бы вы объяснили четко что нужно - ответ был бы точнее.
ОК. С самого начала.
Есть интересная методика изучения буржуинских слов. Можно выучить до несколких сотен за пару часов с перекурами. Работает проверено на себе. Очень хочу написать приложение по этой методике. Там без картинок не обойтись, желательно еще звук и микрофон, но это потом.
Итак создаю БД такой код.

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

public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("create table " +TABLE_NAME
				+" (id integer primary key autoincrement, "
				+ENG_WORD+" text not null, "
				+RUS_WORD+" text not null, "
				+ASSOCIATION+" text, "
				+ID_IMAGE+" integer );"
				);
		ContentValues values=new ContentValues();
		values.put(ENG_WORD, "compare");
		values.put(RUS_WORD, "сравнивать");
		values.put(ASSOCIATION, "СРАВНЕНИЕ сигналов на компараторе");
		values.put(ID_IMAGE, R.drawable.compare);
		db.insert(TABLE_NAME, ENG_WORD, values);
		
		values.put(ENG_WORD, "may");
		values.put(RUS_WORD, "мочь, иметь право");
		values.put(ASSOCIATION, "дед  в мае МОЖЕТ но прав не имеет");
		values.put(ID_IMAGE, R.drawable.may);
		db.insert(TABLE_NAME, ENG_WORD, values);
Далее при нажатии кнопки вытаскиваю из БД.

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

case R.id.btnBack://показываем предыдущего слова если записи больше нет, показ последнего слова
			if(!cur.moveToPrevious()){
				cur.moveToLast();
			}
			engWordColIndex=cur.getColumnIndex("engWord");
			rusWordColIndex=cur.getColumnIndex("rusWord");
			assWordColIndex=cur.getColumnIndex("association");
			idImageColIndex=cur.getColumnIndex("id_image");
			engWord.setText(cur.getString(engWordColIndex));
			rusWord.setText(cur.getString(rusWordColIndex));
			association.setText(cur.getString(assWordColIndex));
			imageWord.setImageResource(cur.getInt(idImageColIndex));
			break;
Все работает, но как при этом добавить в БД новые записи с новыми картинками. ИМХО картинки нужно хранить в отдельной папке, а в БД записывать путь к картинкам, потом по запросу показывать. Вот с этим у мну большие проблемы.
Мне необходимо вместо строчки values.put(ID_IMAGE, R.drawable.may); прописать путь.
Потом показать картинку по этому пути.

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

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

Сообщение Foenix » 22 фев 2015, 14:44

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

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

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

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

Сообщение AlexeyFedor » 22 фев 2015, 15:27

Foenix писал(а):из бд читаешь путь, потом берешь какой-нибудь picasso и в одну строчку грузишь картинку им, притом асинхронно.
Если картинки будут распространяться с версией - то их в папку assets вначале запиши. Если отдельно - то через интернет грузи, и все тем же picasso.
Таблицы я бы заполняла не через код, т.к. раз это словарь, то там много чего должно быть, поэтому просто менеджером и базу так же в assets
При всем уважении.
Таких матерных слов я и на работе не слышал. Если не трудно, последовательность нажатия кнопочек.

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

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

Сообщение Foenix » 22 фев 2015, 15:41

С планшета одним пальцем неудобно
Почитай про пикассо. Он грузит картинки откуда угодно. Раз.
Почитай как работать с бд в assets.2
Если картанки поставляются с версией почитай как с нмми работать из assets.3
Бд сам подготовь вручную через любой менеджер sqlite manager найди в гугле.
Придет какая то ясность у тебя тогда. Задача стандартная.
R.id.team

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

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

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

Сообщение AlexeyFedor » 22 фев 2015, 16:15

Foenix писал(а):С планшета одним пальцем неудобно
Почитай про пикассо. Он грузит картинки откуда угодно. Раз.
Почитай как работать с бд в assets.2
Если картанки поставляются с версией почитай как с нмми работать из assets.3
Бд сам подготовь вручную через любой менеджер sqlite manager найди в гугле.
Придет какая то ясность у тебя тогда. Задача стандартная.
Феникс плз пожалуйста не пытайтесь больше мне помочь в этом вопросе. Ну не получается у меня летать как вы в высоких материях.
Если кто сталкивался с такой задачей плз откликнитесь. Я понимаю что решение стандартное, но как правильно кнопочки нажать?

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

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

Сообщение AlexeyFedor » 23 фев 2015, 09:36

Все разобрался вопрос снят. Это целый квест какой то. Потом пошагово напишу.

rustech
Сообщения: 9
Зарегистрирован: 20 янв 2015, 12:27
Откуда: Москва

Скачать, скопировать базу данных без рут (root)

Сообщение rustech » 10 мар 2015, 00:40

Задача: скопировать/записать базу данных с телефона/на телефон, не имея рут (root).
К примеру, вот расположение искомой базы данных:
/data/data/com.xxxx.xxxx/databases/dbname.db
Решение (нашел на stackoverflow, здесь):
Работаем через adb, последовательно запуская все нижеперечисленные команды

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

adb shell
$ run-as com.xxxx.xxxx
$ cd ./databases/
$ ls -l
После выполнения последней команды должно отобразиться что-то в этом духе:
-rw-rw---- u0_a278 u0_a278 20480 2014-03-09 00:08 dbname
-rw------- u0_a278 u0_a278 12824 2014-03-09 00:08 dbname-journal
Обратите внимание на текущие разрешения. В данном случае у нас стоит разрешение типа "660", которое означает, что для user и group стоит разрешение на чтение (r) и запись (w). Это значение надо будет вернуть файлу после манипуляций с ним. Подробнее про режим доступа к файлам см. здесь http://chmod.ru/.

Продолжаем работу через adb. Меняем режим доступа к файлам с помощью команды

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

$ chmod 666 ./dbname.db
$ exit
$ exit
Если получите сообщение типа "Unable to chmod ./dbname.db: No such file or directory", попробуйте ввести так:

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

$ chmod 666 ./dbname
$ exit
$ exit
Осуществляем копирование/запись через adb:

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

adb pull /data/data/com.xxxx.xxxx/databases/dbname.db ~/Desktop/
adb push ~/Desktop/dbname.db /data/data/com.xxxx.xxxx/databases/dbname.db
И не забудьте вернуть режим доступа как было:

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

adb shell
$ run-as com.xxxx.xxxx
$ chmod 660 ./databases/dbname.db
$ exit
$ exit

Ответить