Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
Сорри, конечнор же я sqlite по привычке накатала
вот тут список есть
http://ru.wikipedia.org/wiki/Система_уп ... ами_данных
можно выбрать.
вот тут список есть
http://ru.wikipedia.org/wiki/Система_уп ... ами_данных
можно выбрать.
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
Спасибо, за ссылку. Спрашивая здесь, я надеялся получить реальный пример использования базы. Может из собственного опыта. Мне нужна простая база, в которой будут пару столбцов для текста. И с которой приложению проще всего будет "общаться через интернет"Olivka писал(а):Сорри, конечнор же я sqlite по привычке накатала
вот тут список есть
http://ru.wikipedia.org/wiki/Система_уп ... ами_данных
можно выбрать.
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
У вас реально был опыт использования базы в интернете?Olivka писал(а):чтобы общаться - нужно чтобы было с кем, это вам и предлагают тут организовать вначале. иначе тогда как будет работать пример-то?
Re: Урок 34. Хранение данных. SQLite
Добрый день! Прошу прощения, пытаюсь вывести картинку на экран ... никак не соображу как это сделать... В данный момент у меня есть GridView, каждый элемент выводится в виде ImageView и TextView. В базе лежат данные для TextView. Картинки лежат в соответствующих папках проекта.htk писал(а):Вообще хранить изображения в SQLite не рекомендуется её разработчиками, вместо этого лучше хранить там путь к файлам. А насчет ContentValues для работы с БД в Андроид не обязательно использовать данный класс в принципе (и довольно часто это выгоднее), при помощи метода execSQL можно использовать обычные SQL запросы в обход вспомогательных методов и таким образом хранить в БД и извлекать из неё любые данные из разрешенных СУБД. Да и класс Cursor имеет метод getBlob.perelygin писал(а):добрый день. Спасибо за уроки. Не первый источник по андроиду, но на текущий момент лучший!
Скажите, а есть ли возможность хранить в SQLite файлы изображений?
У класса ContentValues вроде как нет метода put с параметрами blob
Код: Выделить всё
db = new DBHelper(this);
cv = new ContentValues();
// Выбор лишь тех записей, у которых parentId = 0
sqlRes = db.getAllRecords(db.TABLE_TASKS, -1);
this.startManagingCursor(sqlRes);
from = new String[] { db.getColumnName() };
to = new int[] { R.id.tvToolName_ItemTools };
scAdapter = new SimpleCursorAdapter(this, R.layout.item_category, sqlRes, from, to);
gv = (GridView)findViewById(R.id.gvRootCategories_LayoutActivityOrganizer);
gv.setAdapter(scAdapter);
Код: Выделить всё
ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(texts.length);
for (int i = 0; i < texts.length; i++) {
Map<String, Object> m = new HashMap<String, Object>();
m.put(ATTRIBUTE_NAME, texts[i]);
m.put(ATTRIBUTE_IMAGE, images[i]);
data.add(m);
}
// массив имен атрибутов, из которых будут читаться данные
String[] from = { ATTRIBUTE_NAME, ATTRIBUTE_IMAGE };
// массив ID View-компонентов, в которые будут вставлять данные
int[] to = { R.id.tvName_LayoutItem, R.id.ivImage_LayoutItem };
1) Каждый раз, когда я буду редактировать данные, мне надо будет снова использовать всю эту конструкцию? sqlRes.require() ведь не поможет, он только сам курсор изменит?
2) Как картинку(пусть даже путь к ней) впихнуть в массив String[] from? Т.е., строку то я впихнул, но тогда как эта строка привязывается к R.id.ivImage_LayoutItem?
Всем заранее спасибо.
Re: Урок 34. Хранение данных. SQLite
два варианта:
1) использовать тип blob;
2) в бд хранить ссылки на картинки, картинки же хранить локально как файлы.
1) использовать тип blob;
2) в бд хранить ссылки на картинки, картинки же хранить локально как файлы.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Прошу прощения, а как ссылки(вариант 2) потом привязать к адаптеру? Я пробовал запихнуть, полученные из БД пути к файлам в массив from, но в массиве to у меня R.id.очередная_картинка. И это не должно работать, да и не работает. Чтоб привязать картинку, как я понимаю, надо через src задать путь/ссылку... но... что-то никаких мыслей на счет того как это сделать. Подскажите хотя бы в какую сторону глядеть.rezak90 писал(а):два варианта:
1) использовать тип blob;
2) в бд хранить ссылки на картинки, картинки же хранить локально как файлы.
Еще раз заранее спасибо и сорри за нубские вопросы.
Re: Урок 34. Хранение данных. SQLite
Если с нативным адаптером то ничего не выйдет, конечно же свой нужен. В кастомный адаптер передаёте курсор, инфлейтом получаете ImageView а путь картинки вытаскиваете cursor.getString() и делаете бекграунд
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Доброго времени суток.
У меня есть некоторые трудности.
Я сделал все в точности как показано в уроке, но когда я в методе onCreate() DbHelper'а попытался создать три таблицы у меня приложение ломается на строчке с кодом
мой кусок кода
В логах никаких ошибок нет.
в чем может быть дело?
Заранее спасибо за ответы.
У меня есть некоторые трудности.
Я сделал все в точности как показано в уроке, но когда я в методе onCreate() DbHelper'а попытался создать три таблицы у меня приложение ломается на строчке с кодом
Код: Выделить всё
SQLiteDatabase db = dbHelper.getWritableDatabase();
Код: Выделить всё
@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" + ");");
//
db.execSQL("CREATE TABLE table1 ("
+ "_id integer primary key autoincrement,"
+ "name text,"
+ "comment text,"
+ "cdate text,"
+ "edate text);");
//
db.execSQL("CREATE TABLE table2 ("
+ "_id integer primary key autoincrement,"
+ "tid integer,"
+ "etid integer,"
+ "count integer,"
+ "weight integer,"
+ "order integer,"
+ "comment text,"
+ "cdate text);");
}
в чем может быть дело?
Заранее спасибо за ответы.
Re: Урок 34. Хранение данных. SQLite
Под логами я имел ввиду вкладку "LogCat" в Eclipse'еrezak90 писал(а):лог ошибок в студию
Там вообще никаких сообщений нет. Где еще можно логи посмотреть?
Re: Урок 34. Хранение данных. SQLite
под словом "ломается" что Вы имеет в виду? падает приложение? если да то в логе всё есть, красным цветом.у меня приложение ломается
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Вкладка problems, там же где и LogCatmalak писал(а):Доброго времени суток.
В логах никаких ошибок нет.
в чем может быть дело?
Заранее спасибо за ответы.
Re: Урок 34. Хранение данных. SQLite
Когда разбирался с sqlite в андройде наткнулся на то, что он не поддерживает множественные вставки, хотя сам sqlite судя по документации может делать INSERT множеству строк сразу. В чём дело? Типа такая особенность реализации?
Re: Урок 34. Хранение данных. SQLite
Я сам решил свою проблему.
попробовал отловить ошибку при помощи конструкции try{}catch{}
и в логах появилась ошибка:
видимо ругался на название поля "order", которое является зарезервированным словом.
после обрамления этого слова "`"(тильда) все заработало.
проблема была в моей невнимательности.
извините за беспокойство.
попробовал отловить ошибку при помощи конструкции try{}catch{}
Код: Выделить всё
try {
SQLiteDatabase db = dbh.getWritableDatabase();
Log.d(LOG_TAG, "SUCCESSFUL");
db.close();
}catch(Exception e) {
Log.d(LOG_TAG, e.toString());
}
Код: Выделить всё
android.database.sqlite.SQLiteException: near "order": syntax error (code 1): , while compiling: CREATE TABLE exercises (_id integer primary key autoincrement,tid integer,etid integer,count integer,weight integer,order integer,comment text,cdate text);
после обрамления этого слова "`"(тильда) все заработало.
проблема была в моей невнимательности.
извините за беспокойство.
Re: Урок 34. Хранение данных. SQLite
можно ссылочку на документацию, где это написано?dens писал(а):Когда разбирался с sqlite в андройде наткнулся на то, что он не поддерживает множественные вставки, хотя сам sqlite судя по документации может делать INSERT множеству строк сразу. В чём дело? Типа такая особенность реализации?
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
Тоже будет интересно почитать. Но нужно учитывать, что sqlite под android оптимизирована разработчиками ОС, и некоторые вещи могут отсутствовать для скорости работы БД.Olivka писал(а):можно ссылочку на документацию, где это написано?dens писал(а):Когда разбирался с sqlite в андройде наткнулся на то, что он не поддерживает множественные вставки, хотя сам sqlite судя по документации может делать INSERT множеству строк сразу. В чём дело? Типа такая особенность реализации?
Если требуется вставить множество данных, то я обычно открываю транзаксацию.
Re: Урок 34. Хранение данных. SQLite
а я использую орм, никаких ограничений и всё проще, надстройка сделает всё за вас при правильном её настройке.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Помогите плз разобраться с проблемой..как работать с существующей бд..
закинул ее в asserts/db
прикладываю DBHelper и класс откуда пытаюсь получить данные из базы..
DBHelper.java :
Main.java :
ПРикладываю ошибку
закинул ее в asserts/db
прикладываю DBHelper и класс откуда пытаюсь получить данные из базы..
DBHelper.java :
Код: Выделить всё
public class DBHelper extends SQLiteOpenHelper{
private static final String LOG_TAG = DBHelper.class.getName();
private static final String DB_NAME = "dbname";
private static final String DB_FOLDER = "/data/data/package.name/databases/";
private static final String DB_PATH = DB_FOLDER + DB_NAME;
private static final String DB_ASSETS_PATH = "db/" + DB_NAME;
private static final int DB_VERSION = 1;
private static final int DB_FILES_COPY_BUFFER_SIZE = 8192;
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
throw new SQLiteException(
"Call OlimpicRaceSQLhelper.Initialize first. This method should never be called.");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
throw new SQLiteException(
"Call OlimpicRaceSQLhelper.Initialize first. This method should never be called.");
}
public static void Initialize() {
if (isInitialized() == false) {
copyInialDBfromAssets();
}
}
private static boolean isInitialized() {
SQLiteDatabase checkDB = null;
Boolean correctVersion = false;
try {
checkDB = SQLiteDatabase.openDatabase(DB_PATH, null,
SQLiteDatabase.OPEN_READONLY);
correctVersion = checkDB.getVersion() == DB_VERSION;
} catch (SQLiteException e) {
Log.w(LOG_TAG, e.getMessage());
} finally {
if (checkDB != null)
checkDB.close();
}
return checkDB != null && correctVersion;
}
private static void copyInialDBfromAssets() {
Context appContext = App.getInstance().getApplicationContext();
InputStream inStream = null;
OutputStream outStream = null;
try {
inStream = new BufferedInputStream(appContext.getAssets().open(
DB_ASSETS_PATH), DB_FILES_COPY_BUFFER_SIZE);
File dbDir = new File(DB_FOLDER);
if (dbDir.exists() == false)
dbDir.mkdir();
outStream = new BufferedOutputStream(new FileOutputStream(DB_PATH),
DB_FILES_COPY_BUFFER_SIZE);
byte[] buffer = new byte[DB_FILES_COPY_BUFFER_SIZE];
int length;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
outStream.close();
inStream.close();
} catch (IOException ex) {
// Что-то пошло не так
//Log.e(LOG_TAG, ex.getMessage());
//throw new ChainedSQLiteException("Fail to copy initial db from assets", ex);
} finally {
//IOUtils.closeSilent(outStream);
//IOUtils.closeSilent(inStream);
}
}
}
Main.java :
Код: Выделить всё
public class Main extends Template implements OnClickListener{
final int DIALOG_EXIT = 1;
private DBHelper dbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dbHelper = new DBHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
...
}
...
}
ПРикладываю ошибку
Код: Выделить всё
02-23 16:46:13.945: FATAL EXCEPTION: main
02-23 16:46:13.945: java.lang.RuntimeException: Unable to resume activity {package.name/a.b.Main}: android.database.sqlite.SQLiteException: Initialize first. This method should never be called.
02-23 16:46:13.945: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
02-23 16:46:13.945: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
02-23 16:46:13.945: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672)
02-23 16:46:13.945: at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-23 16:46:13.945: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
02-23 16:46:13.945: at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 16:46:13.945: at android.os.Looper.loop(Looper.java:130)
02-23 16:46:13.945: at android.app.ActivityThread.main(ActivityThread.java:3691)
02-23 16:46:13.945: at java.lang.reflect.Method.invokeNative(Native Method)
02-23 16:46:13.945: at java.lang.reflect.Method.invoke(Method.java:507)
02-23 16:46:13.945: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
02-23 16:46:13.945: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
02-23 16:46:13.945: at dalvik.system.NativeStart.main(Native Method)
02-23 16:46:13.945: Caused by: android.database.sqlite.SQLiteException: Initialize first. This method should never be called.
02-23 16:46:13.945: at a.b.DBHelper.onCreate(DBHelper.java:33)
02-23 16:46:13.945: at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
02-23 16:46:13.945: at a.b.Main.onResume(MainPage.java:71)
02-23 16:46:13.945: at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
02-23 16:46:13.945: at android.app.Activity.performResume(Activity.java:3858)
02-23 16:46:13.945: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114)
02-23 16:46:13.945: ... 12 more
Последний раз редактировалось gerundii 23 фев 2013, 23:31, всего редактировалось 1 раз.
Re: Урок 34. Хранение данных. SQLite
gerundii, скажите, вы понимаете в какой строчке ошибка?
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