Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
1. private static final int DATABASE_VERSION = 2;
2. onUpgrade не вижу.
3. имя базы смени на что-то типа "mdb.db" (у меня во всех проектах указано с расширение и с маленькой буквы. Проблем при таком формате не возникало ни разу.)
Я не пойму в чем у тебя ошибка, но выше список что я попробовал бы для решения проблемы. Начинай с конца списка(подозреваю что 3 пункт поможет).
2. onUpgrade не вижу.
3. имя базы смени на что-то типа "mdb.db" (у меня во всех проектах указано с расширение и с маленькой буквы. Проблем при таком формате не возникало ни разу.)
Я не пойму в чем у тебя ошибка, но выше список что я попробовал бы для решения проблемы. Начинай с конца списка(подозреваю что 3 пункт поможет).
Re: Урок 34. Хранение данных. SQLite
тю блин ну, ну возьми отладчик да пройди по шагам куда оно у тебя идет
И сразу бы нашел то, что у тебя код до строчки
dbHelper = new DBHelper(this);
не доходит, у тебя ж там ... стоит? скорее всего ты там обращаешься к бд, а ее нет еще.
Чего сидеть-то неделями?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
dbHelper = new DBHelper(this);
dbHelper.dbInsert(TN_SPRACHEN,myTable);
...
}
И сразу бы нашел то, что у тебя код до строчки
dbHelper = new DBHelper(this);
не доходит, у тебя ж там ... стоит? скорее всего ты там обращаешься к бд, а ее нет еще.
Чего сидеть-то неделями?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
dbHelper = new DBHelper(this);
dbHelper.dbInsert(TN_SPRACHEN,myTable);
...
}
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
По какой-то причине приложение из урока не обрабатывает нажатия на кнопку (соответственно, не работает БД). Код скопировала верно.
Когда-нибудь я научусь!
Re: Урок 34. Хранение данных. SQLite
"По какой-то причине я простоял сегодня на остановке полчаса (соответственно, замерз). На остановку пришёл как обычно."IriDolG писал(а):По какой-то причине приложение из урока не обрабатывает нажатия на кнопку (соответственно, не работает БД). Код скопировала верно.
Ну как из представленной информации сделать какой-либо вывод? =)
У других код работает. Сам лично не проверял, но увлеченных бд тут много людей вряд ли бы они это не заметили.
Почти уверен, что есть какая-то маленькая опечатка/недоделка в вашем коде. В конце концов понаставте логов и проверте, что обрабатывается, а что нет.
Re: Урок 34. Хранение данных. SQLite
Вот код, как в уроке:
Никаких опечаток, но не работает... Больше ведь никаких отдельно классов не нужно создавать?
Код: Выделить всё
package comcc.exavmple.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.activity_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);
// вставляем запись и получаем ее ID
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: ---");
// делаем запрос всех данных из таблицы mytable, получаем Cursor
Cursor c = db.query("mytable", null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
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));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
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) {
}
}
}
Когда-нибудь я научусь!
Re: Урок 34. Хранение данных. SQLite
тянете кота за хвост
"не работает" - мы тут такого не понимаем. Для урока не только нужно правильно скопировать куда-то код, но и выполнить ВСЕ, что сказано в уроке с самого начала.
"не работает" - мы тут такого не понимаем. Для урока не только нужно правильно скопировать куда-то код, но и выполнить ВСЕ, что сказано в уроке с самого начала.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
А логи хоть какие-то выводятся? в onClick отрабатывает? в onCreate к Хелперу заходит? Проверить на другом устройстве/эмуляторе нет возможности?IriDolG писал(а):Вот код, как в уроке:Никаких опечаток, но не работает... Больше ведь никаких отдельно классов не нужно создавать?Код: Выделить всё
package comcc.exavmple.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.activity_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); // вставляем запись и получаем ее ID 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: ---"); // делаем запрос всех данных из таблицы mytable, получаем Cursor Cursor c = db.query("mytable", null, null, null, null, null, null); // ставим позицию курсора на первую строку выборки // если в выборке нет строк, вернется false 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)); // переход на следующую строку // а если следующей нет (текущая - последняя), то false - выходим из цикла } while (c.moveToNext()); } else Log.d(LOG_TAG, "0 rows"); c.close(); 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) { } } }
скопировал полностью ваш код, скопировал layout, запустил и... все работает. Странно это. Может у вас logcat заглючил или фильтры какие-то неправильные стоят?
Re: Урок 34. Хранение данных. SQLite
Логи тоже не выводятся. Проверяла на двух устройствах. А что за фильтры могут быть?
Когда-нибудь я научусь!
Re: Урок 34. Хранение данных. SQLite
Попробуйте выводить на экран (при нажатии кнопки read записывать текст куда-нить в TextView). Ну просто не должно быть проблем, код точно рабочий.IriDolG писал(а):Логи тоже не выводятся. Проверяла на двух устройствах. А что за фильтры могут быть?
-
- Сообщения: 42
- Зарегистрирован: 18 дек 2013, 14:54
Re: Урок 34. Хранение данных. SQLite
Доброго времени суток!
У меня возникла проблема с методом ContentValues.put: когда я вношу в ContentValues два или три значения, то все в дальнейшем протекает успешно, но если я вношу туда 4 или более значений, то почему-то ContentValues отображает ключи и значения не в том порядке, в котором я их туда закладывал.
Думаю, что в связи с этим метод SQLiteDataBase.insert возвращает -1 и Cursor.getColumnIndex также возвращает -1.
Кто-нибудь знает почему ContentValues самостоятельно меняет (возможно, сортирует по какому-либо признаку) местами мои данные? Как это устранить?
Буду благодарен любому ответу.
У меня возникла проблема с методом ContentValues.put: когда я вношу в ContentValues два или три значения, то все в дальнейшем протекает успешно, но если я вношу туда 4 или более значений, то почему-то ContentValues отображает ключи и значения не в том порядке, в котором я их туда закладывал.
Думаю, что в связи с этим метод SQLiteDataBase.insert возвращает -1 и Cursor.getColumnIndex также возвращает -1.
Кто-нибудь знает почему ContentValues самостоятельно меняет (возможно, сортирует по какому-либо признаку) местами мои данные? Как это устранить?
Буду благодарен любому ответу.
Re: Урок 34. Хранение данных. SQLite
кто его знает что вы там делаете, где-то ошиблись.kirka_scant писал(а):Доброго времени суток!
У меня возникла проблема с методом ContentValues.put: когда я вношу в ContentValues два или три значения, то все в дальнейшем протекает успешно, но если я вношу туда 4 или более значений, то почему-то ContentValues отображает ключи и значения не в том порядке, в котором я их туда закладывал.
Думаю, что в связи с этим метод SQLiteDataBase.insert возвращает -1 и Cursor.getColumnIndex также возвращает -1.
Кто-нибудь знает почему ContentValues самостоятельно меняет (возможно, сортирует по какому-либо признаку) местами мои данные? Как это устранить?
Буду благодарен любому ответу.
код и доказательства (логи) в студию.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
Как получить доступ к таблице mytable в другой активити? Какой контекст у DBHelper в другой активити?
Re: Урок 34. Хранение данных. SQLite
viewtopic.php?f=34&t=3822Digetix писал(а):Как получить доступ к таблице mytable в другой активити? Какой контекст у DBHelper в другой активити?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
Как исправить ошибку
Код:
case R.id.btnRead:
Log.d(LOG_TAG, "--- Row in mytable: ---");
//далее запрос всех данных из таблици mytable. получаем Cursor
Cursor c = db.query("mytable", null, null, null, null, null, null);
//ставим курсор на первую строку выборки
//если в выборке нет текстаб вставляется false
if (c.moveToFirst()) {
//определяем номер столбца по имени в выборке
int idColIndex = c.getColumnIndex("Id");
int kod_productColIndex = c.getColumnIndex("kod_product");
int name_productColIndex = c.getColumnIndex("name_product");
int price_productColIndex = c.getColumnIndex("price_product");
int price_product_sellColIndex = c.getColumnIndex("price_product_sell");
do {
//получаем значение по номеру столбца и пишем все в лог
Log.d(LOG_TAG,
"Id = " + c.getInt(idColIndex) +
"kod_product = " + c.getString(kod_productColIndex) +
"name_product = " + c.getString(name_productColIndex) +
"price_product = " + c.getString(price_productColIndex) +
"price_product_sell = " + c.getString(price_product_sellColIndex));
//переходим на следующую строку
//а если следующей нет, то false - выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
лог:
Код:
case R.id.btnRead:
Log.d(LOG_TAG, "--- Row in mytable: ---");
//далее запрос всех данных из таблици mytable. получаем Cursor
Cursor c = db.query("mytable", null, null, null, null, null, null);
//ставим курсор на первую строку выборки
//если в выборке нет текстаб вставляется false
if (c.moveToFirst()) {
//определяем номер столбца по имени в выборке
int idColIndex = c.getColumnIndex("Id");
int kod_productColIndex = c.getColumnIndex("kod_product");
int name_productColIndex = c.getColumnIndex("name_product");
int price_productColIndex = c.getColumnIndex("price_product");
int price_product_sellColIndex = c.getColumnIndex("price_product_sell");
do {
//получаем значение по номеру столбца и пишем все в лог
Log.d(LOG_TAG,
"Id = " + c.getInt(idColIndex) +
"kod_product = " + c.getString(kod_productColIndex) +
"name_product = " + c.getString(name_productColIndex) +
"price_product = " + c.getString(price_productColIndex) +
"price_product_sell = " + c.getString(price_product_sellColIndex));
//переходим на следующую строку
//а если следующей нет, то false - выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
лог:
Re: Урок 34. Хранение данных. SQLite
Вообще не там ошибку ищешь!
Посмотри ссылку в подписи. Ошибка другая, но способ нахождения - тот же.
Посмотри ссылку в подписи. Ошибка другая, но способ нахождения - тот же.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
Спасибо за ответ. Но не помогло... Я вижу, что проблема в курсор. Поэтому и выставил лог там где о нем написано. Кнопка ввода в бд работает, кнопка удалить тоже. А проблема именно с чтением. И прежде чем задать вопрос тут, воспользовался гуглом. Я не задаю вопрлсов до того, пока сам не попробую найти ответ.
Re: Урок 34. Хранение данных. SQLite
на какую именно строку указывает лог?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 34. Хранение данных. SQLite
Как я понял он ругается на
Cursor c = db.query("mytable", null, null, null, null, null, null);
или на
if (c.moveToFirst()) {
Как написанно в логе, он не может прочесть строку 0, колонка -1. А вот почему это,я не пойму. Если не сложно, то поясните почему он так пишет.
Cursor c = db.query("mytable", null, null, null, null, null, null);
или на
if (c.moveToFirst()) {
Как написанно в логе, он не может прочесть строку 0, колонка -1. А вот почему это,я не пойму. Если не сложно, то поясните почему он так пишет.
Re: Урок 34. Хранение данных. SQLite
или - не или
точную строку!
по ссылке в моей подписи написано как ее ТОЧНО найти. Никаких "приблизительно-или" в программировании нет.
точную строку!
по ссылке в моей подписи написано как ее ТОЧНО найти. Никаких "приблизительно-или" в программировании нет.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198