Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
Не нужно так делать. Просто запусти разок программку (в которой по уроку уже создана структура), скопируй себе файл базы данных в любое место, открой его любым sqlite менеджером, наполни данными и закачай обратно.
Для тестирования - сойдет.
МОжно еще сделать так, чтоб эта база данных со 150 строчками устанавливалась вместе с приложением на любой телефон или что у вас там. Но там свои нюансы.
Для тестирования - сойдет.
МОжно еще сделать так, чтоб эта база данных со 150 строчками устанавливалась вместе с приложением на любой телефон или что у вас там. Но там свои нюансы.
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
db.execSQL(
// где про эти строки почитать?
"create table mytable ("
+ "id integer primary key autoincrement,"
+ "val text"
+ ");"
);
// где про эти строки почитать?
"create table mytable ("
+ "id integer primary key autoincrement,"
+ "val text"
+ ");"
);
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 34. Хранение данных. SQLite
На экране их читать.
Можно поподробнее, в чем вопрос? Если узнать, что они означают, то это SQL язык.
Можно поподробнее, в чем вопрос? Если узнать, что они означают, то это SQL язык.
-
- Сообщения: 56
- Зарегистрирован: 24 июн 2013, 18:50
Re: Урок 34. Хранение данных. SQLite
Помогите пожалуйста. Не могу найти ошибку
MainActivity
CatDataBase
MainActivity
Код: Выделить всё
public class MainActivity extends Activity implements OnClickListener{
CatsDataBase sqh;
SQLiteDatabase sqdb;
EditText txtData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtData = (EditText) findViewById(R.id.txtData);
// Инициализируем наш класс-обёртку
sqh = new CatsDataBase(this);
// База нам нужна для записи и чтения
sqdb = sqh.getWritableDatabase();
}
public void onClick(View v) {
Button buttonCVInsert = (Button) findViewById(R.id.buttonCVInsert);
buttonCVInsert.setOnClickListener(this);
Button buttonQuery = (Button) findViewById(R.id.buttonQuery);
buttonQuery.setOnClickListener(this);
EditText txtData = (EditText) findViewById(R.id.txtData);
switch (v.getId()) {
case R.id.buttonCVInsert:
// Метод 1: INSERT через класс CONTENTVALUE
ContentValues cv = new ContentValues();
cv.put(CatsDataBase.CATNAME, txtData.getText().toString());
// вызываем метод вставки
sqdb.insert(CatsDataBase.TABLE_NAME, CatsDataBase.CATNAME, cv);
txtData.setText("");
break;
case R.id.buttonQuery:
Cursor cursor = sqdb.query(CatsDataBase.TABLE_NAME, new String[] {
CatsDataBase._ID, CatsDataBase.CATNAME }, null, // The
// columns
// for the
// WHERE
// clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
null // The sort order
);
while (cursor.moveToNext()) {
// GET COLUMN INDICES + VALUES OF THOSE COLUMNS
int id = cursor.getInt(cursor.getColumnIndex(CatsDataBase._ID));
String name = cursor.getString(cursor
.getColumnIndex(CatsDataBase.CATNAME));
Log.d("LOG_TAG", "ROW " + id + " HAS NAME " + name);
}
cursor.close();
break;
}
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
// закрываем соединения с базой данных
sqdb.close();
sqh.close();
}
}
Код: Выделить всё
public class CatsDataBase extends SQLiteOpenHelper implements BaseColumns {
private static final String DATABASE_NAME = "cat_database.db";
private static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "contact_table";
public static final String CATNAME = "catname";
final String LOG_TAG = "myLogs";
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
+ TABLE_NAME + " (" + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ CATNAME + ");";
private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS "
+ TABLE_NAME;
public CatsDataBase(Context context) {
// TODO Auto-generated constructor stub
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(SQL_CREATE_ENTRIES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
// Удаляем предыдущую таблицу при апгрейде
db.execSQL(SQL_DELETE_ENTRIES);
// Создаём новый экземпляр таблицы
onCreate(db);
}
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Вы перед INTEGER PRIMARY KEY забыли имя колонки написать.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 56
- Зарегистрирован: 24 июн 2013, 18:50
Re: Урок 34. Хранение данных. SQLite
Спасибо.Исправил.Приложение запустилось но в бд не закидывает.Но в ддмс база создана, а в логе почему то не отображается
Re: Урок 34. Хранение данных. SQLite
ну наверное версию бд нужно сменить на 2.
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
Здравствуйте, у меня по каким-то причинам возникает ошибка при подключении к БД:
В отладчике возникает ошибка "Sourse not found".
Между тем, БД создана, в File Explorer она присутствует.
Заранее спасибо за помощь.
Код: Выделить всё
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
myHelper mHelp; // наследник SQLiteOpenHelper
SQLiteDatabase mDB; // собственно БД
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHelp = new myHelper(this); // Нет проблем, Activity создаётся
}
// Но как только нажимаю на кнопку - ВСЁ, стоп-машина. Видно даже по отладчику.
public void DB_Clk(View v){
mDB = mHelp.getWritableDatabase(); // Здесь!
}
public class myHelper extends SQLiteOpenHelper{
public myHelper(Context context){
super(context, "mydb", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table mytable {" +
"_id integer primary key autoincrement, " +
"name text, " +
"email text);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
Между тем, БД создана, в File Explorer она присутствует.
Заранее спасибо за помощь.
Re: Урок 34. Хранение данных. SQLite
kost-nab
повеселил перед сном
повеселил перед сном
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Извините, я решил проблему.)))
Оказалось, что в константе текста команды создания таблицы (CREATE TABLE) отсутствовал пробел в строке-слагаемом "create teble", а нужно "create table ".
Недосмотрел. Бывает.
Другим будет уроком.
Оказалось, что в константе текста команды создания таблицы (CREATE TABLE) отсутствовал пробел в строке-слагаемом "create teble", а нужно "create table ".
Недосмотрел. Бывает.
Другим будет уроком.
Re: Урок 34. Хранение данных. SQLite
А как "забить" базу, если есть такой запрос из "интернет-базы" ?
[syntax=java]public void ParseQueryMap() {
query = new ParseQuery("MyObject");
query.findInBackground(new FindCallback() {
public void done(List<ParseObject> myObject, ParseException e) {
if (e == null) {
for ( int i = 0; i < myObject.size(); i++) {
stranaGet = myObject.get(i).getString("Country");
oblastGet = myObject.get(i).getString("District");
gorodGet = myObject.get(i).getString("City");
}
}
}
[/syntax]
Пробовал по примеру в уроке в этот код вставить
[syntax=java]
for ( int i = 0; i < myObject.size(); i++) {
stranaGet = myObject.get(i).getString("Country");
oblastGet = myObject.get(i).getString("District");
gorodGet = myObject.get(i).getString("City");
cv.put("name", stranaGet);
cv.put("email", oblastGet);
db.insert("mytable", null, cv);
}
[/syntax]
На выходе получаю только 50 записей.
Если добавляю ещё один столбец cv.put("first", gorodGet);, то на выходе вообще ничего нету. Приложение работает, но записей вообще никаких не вижу
[syntax=java]public void ParseQueryMap() {
query = new ParseQuery("MyObject");
query.findInBackground(new FindCallback() {
public void done(List<ParseObject> myObject, ParseException e) {
if (e == null) {
for ( int i = 0; i < myObject.size(); i++) {
stranaGet = myObject.get(i).getString("Country");
oblastGet = myObject.get(i).getString("District");
gorodGet = myObject.get(i).getString("City");
}
}
}
[/syntax]
Пробовал по примеру в уроке в этот код вставить
[syntax=java]
for ( int i = 0; i < myObject.size(); i++) {
stranaGet = myObject.get(i).getString("Country");
oblastGet = myObject.get(i).getString("District");
gorodGet = myObject.get(i).getString("City");
cv.put("name", stranaGet);
cv.put("email", oblastGet);
db.insert("mytable", null, cv);
}
[/syntax]
На выходе получаю только 50 записей.
Если добавляю ещё один столбец cv.put("first", gorodGet);, то на выходе вообще ничего нету. Приложение работает, но записей вообще никаких не вижу
Re: Урок 34. Хранение данных. SQLite
всем привет!
попыталась создать по аналогичному коду таблицу чуть больше, но все время выдает ошибку "Unfortunately, ... has stopped". по логам вижу, что не создается БД. Этот SQLite я не устанавливала на телефоне, как узнать, что он вообще есть? или может в коде какие ошибки?
package com.example.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 etTime, etFunc, etLine, etMach,
etTable, etZhou, etRight, etWrong, etStuff;
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);
etTime = (EditText) findViewById(R.id.etTime);
etFunc = (EditText) findViewById(R.id.etFunc);
etLine = (EditText) findViewById(R.id.etLine);
etMach = (EditText) findViewById(R.id.etMach);
etTable = (EditText) findViewById(R.id.etTable);
etZhou = (EditText) findViewById(R.id.etZhou);
etRight = (EditText) findViewById(R.id.etRight);
etWrong = (EditText) findViewById(R.id.etWrong);
etStuff = (EditText) findViewById(R.id.etStuff);
// создаем объект для создания и управления версиями БД
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
// создаем объект для данных
ContentValues cv = new ContentValues();
Log.d(LOG_TAG, "создаем объект для данных");
// получаем данные из полей ввода
String Time1 = etTime.getText().toString();
String Func1 = etFunc.getText().toString();
String Line1 = etLine.getText().toString();
String Mach1 = etMach.getText().toString();
String Table1 = etTable.getText().toString();
String Zhou1 = etZhou.getText().toString();
String Right1 = etRight.getText().toString();
String Wrong1 = etWrong.getText().toString();
String Stuff1 = etStuff.getText().toString();
Log.d(LOG_TAG, "получаем данные из полей ввода");
// подключаемся к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();
Log.d(LOG_TAG, "подключаемся к БД");
switch (v.getId()) {
case R.id.btnAdd:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца - значение
Log.d(LOG_TAG, "подготовим данные для вставки в виде пар: наименование столбца - значение");
cv.put("time", Time1);
cv.put("func", Func1);
cv.put("line", Line1);
cv.put("mach", Mach1);
cv.put("table", Table1);
cv.put("zhou", Zhou1);
cv.put("right", Right1);
cv.put("wrong", Wrong1);
cv.put("stuff", Stuff1);
// вставляем запись и получаем ее ID
long rowID = db.insert("mytable1", 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("mytable1", null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {
// определяем номера столбцов по имени в выборке
int idColIndex = c.getColumnIndex("id");
int timeColIndex = c.getColumnIndex("time");
int funcColIndex = c.getColumnIndex("func");
int lineColIndex = c.getColumnIndex("line");
int machColIndex = c.getColumnIndex("mach");
int tableColIndex = c.getColumnIndex("table");
int zhouColIndex = c.getColumnIndex("zhou");
int rightColIndex = c.getColumnIndex("right");
int wrongColIndex = c.getColumnIndex("wrong");
int stuffColIndex = c.getColumnIndex("stuff");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) +
",time = " + c.getString(timeColIndex) +
",func = " + c.getString(funcColIndex) +
",line = " + c.getString(lineColIndex) +
",mach = " + c.getString(machColIndex) +
",table = " + c.getString(tableColIndex) +
",zhou = " + c.getString(zhouColIndex) +
",right = " + c.getString(rightColIndex) +
",wrong = " + c.getString(wrongColIndex) +
",stuff = " + c.getString(stuffColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то 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("mytable1", null, null);
Log.d(LOG_TAG, "deleted rows count = " + clearCount);
break;
}
// закрываем подключение к БД
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// конструктор суперкласса
super(context, "myDB1", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
// создаем таблицу с полями
db.execSQL("create table mytable1 ("
+ "id integer primary key autoincrement,"
+ "time text,"
+ "func text,"
+ "line text,"
+ "mach text,"
+ "table text,"
+ "zhou text,"
+ "right text,"
+ "wrong text,"
+ "stuff text);");
Log.d(LOG_TAG, "создаем таблицу с полями");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
попыталась создать по аналогичному коду таблицу чуть больше, но все время выдает ошибку "Unfortunately, ... has stopped". по логам вижу, что не создается БД. Этот SQLite я не устанавливала на телефоне, как узнать, что он вообще есть? или может в коде какие ошибки?
package com.example.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 etTime, etFunc, etLine, etMach,
etTable, etZhou, etRight, etWrong, etStuff;
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);
etTime = (EditText) findViewById(R.id.etTime);
etFunc = (EditText) findViewById(R.id.etFunc);
etLine = (EditText) findViewById(R.id.etLine);
etMach = (EditText) findViewById(R.id.etMach);
etTable = (EditText) findViewById(R.id.etTable);
etZhou = (EditText) findViewById(R.id.etZhou);
etRight = (EditText) findViewById(R.id.etRight);
etWrong = (EditText) findViewById(R.id.etWrong);
etStuff = (EditText) findViewById(R.id.etStuff);
// создаем объект для создания и управления версиями БД
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
// создаем объект для данных
ContentValues cv = new ContentValues();
Log.d(LOG_TAG, "создаем объект для данных");
// получаем данные из полей ввода
String Time1 = etTime.getText().toString();
String Func1 = etFunc.getText().toString();
String Line1 = etLine.getText().toString();
String Mach1 = etMach.getText().toString();
String Table1 = etTable.getText().toString();
String Zhou1 = etZhou.getText().toString();
String Right1 = etRight.getText().toString();
String Wrong1 = etWrong.getText().toString();
String Stuff1 = etStuff.getText().toString();
Log.d(LOG_TAG, "получаем данные из полей ввода");
// подключаемся к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();
Log.d(LOG_TAG, "подключаемся к БД");
switch (v.getId()) {
case R.id.btnAdd:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца - значение
Log.d(LOG_TAG, "подготовим данные для вставки в виде пар: наименование столбца - значение");
cv.put("time", Time1);
cv.put("func", Func1);
cv.put("line", Line1);
cv.put("mach", Mach1);
cv.put("table", Table1);
cv.put("zhou", Zhou1);
cv.put("right", Right1);
cv.put("wrong", Wrong1);
cv.put("stuff", Stuff1);
// вставляем запись и получаем ее ID
long rowID = db.insert("mytable1", 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("mytable1", null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {
// определяем номера столбцов по имени в выборке
int idColIndex = c.getColumnIndex("id");
int timeColIndex = c.getColumnIndex("time");
int funcColIndex = c.getColumnIndex("func");
int lineColIndex = c.getColumnIndex("line");
int machColIndex = c.getColumnIndex("mach");
int tableColIndex = c.getColumnIndex("table");
int zhouColIndex = c.getColumnIndex("zhou");
int rightColIndex = c.getColumnIndex("right");
int wrongColIndex = c.getColumnIndex("wrong");
int stuffColIndex = c.getColumnIndex("stuff");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) +
",time = " + c.getString(timeColIndex) +
",func = " + c.getString(funcColIndex) +
",line = " + c.getString(lineColIndex) +
",mach = " + c.getString(machColIndex) +
",table = " + c.getString(tableColIndex) +
",zhou = " + c.getString(zhouColIndex) +
",right = " + c.getString(rightColIndex) +
",wrong = " + c.getString(wrongColIndex) +
",stuff = " + c.getString(stuffColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то 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("mytable1", null, null);
Log.d(LOG_TAG, "deleted rows count = " + clearCount);
break;
}
// закрываем подключение к БД
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// конструктор суперкласса
super(context, "myDB1", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
// создаем таблицу с полями
db.execSQL("create table mytable1 ("
+ "id integer primary key autoincrement,"
+ "time text,"
+ "func text,"
+ "line text,"
+ "mach text,"
+ "table text,"
+ "zhou text,"
+ "right text,"
+ "wrong text,"
+ "stuff text);");
Log.d(LOG_TAG, "создаем таблицу с полями");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Без логов ничего конкретного не могу сказать.
Попробуйте удалить приложение с телефона и установить заново.
Попробуйте удалить приложение с телефона и установить заново.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 34. Хранение данных. SQLite
создается бд или нет можно посмотреть не в логах, а в FileExplorer в папке data/data...
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
Появилась такая проблема...указал в DBHelper сначала неверный путь DB_PATH, запустил приложение - появилась ошибка что типо база не найдена и ее не открыть.. меняю DB_PATH на нужный и после этого получаю ошибку что не может выполниться запрос INSERT к таблице которая не существует..но база и таблица существует и если переустановить приложение с чисткой кешей то все работает отл..как программно выйти из положения?Подскажите плзз
На всякий случай прикрепляю DBHELPER
На всякий случай прикрепляю DBHELPER
Код: Выделить всё
package linux.terminale;
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.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper{
private static String DB_PATH = "/data/data/package.name/databases/";
private static String DB_NAME = "db.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
}else{
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
private boolean checkDataBase(){
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Re: Урок 34. Хранение данных. SQLite
Подскажите как лучше импортировать готовую базу в приложение? Порядка 12 тыс записей
Re: Урок 34. Хранение данных. SQLite
откуда импортировать? 1 раз или в каждое приложение?
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
Для чего нужен контекст в конструкторе SQLiteOpenHelper ? Верно ли я понимаю, что у каждого активити свой контекст? Возможно ли указать какой-либо универсальный контекст для работы с базой в синглтоне?
Re: Урок 34. Хранение данных. SQLite
У любой Activity или любого контекста есть метод getApplicationContext(), можно использовать его.Norman писал(а):Для чего нужен контекст в конструкторе SQLiteOpenHelper ? Верно ли я понимаю, что у каждого активити свой контекст? Возможно ли указать какой-либо универсальный контекст для работы с базой в синглтоне?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 34. Хранение данных. SQLite
а каким образом onCreate в DBHelper срабатывает только если БД не существует?
По идее, при вызове
он уже должен отработать, разве нет?
По идее, при вызове
Код: Выделить всё
dbHelper = new DBHelper(this);