Если я правильно понял, предполагается промежуточный сервак ? Сервак хотелось бы обойти. Немного уточню. В полях записи могут храниться текстовые данные, изображения, документы в формате .doc Эту запись надо достать, как-то упаковать, зашифровать и выложить в любом месте в виде файла. Другим девайсом забрать, не важно откуда, хоть с флешки, распаковать и добавить в свою базу.altwin писал(а):Данные из записи можно достать и передать к примеру в JSON, далее вам нужно только забрать их и сформировать select, по тому же принципу, как "доставали".LesliStr писал(а):День добрый. Такой вопрос. Есть два или несколько девайсов с одной и той же программой. В программе имеется база данных, но количество записей в базах на разных девайсах разное. Базы между собой синхронизировать не надо. Как передать одну или несколько записей с одного девайса на другой ? Можно использовать блитуз, вайфай, мыло, выложить запись на форуме и потом слить её на девайс и добавить в свою базу. Как эту запись передать и соответственно принять ?
Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
Нет, вы можете сериализовать JSON объект и передать по тому же bluetooth. Единственная проблема в ваших словах - "не важно откуда, и как -то". Все что вы описали - можно сделать и важно именно то, что конкретно вы хотите. Из вашего сообщения можно выделить потребность в:LesliStr писал(а): Если я правильно понял, предполагается промежуточный сервак ? Сервак хотелось бы обойти. Немного уточню. В полях записи могут храниться текстовые данные, изображения, документы в формате .doc Эту запись надо достать, как-то упаковать, зашифровать и выложить в любом месте в виде файла. Другим девайсом забрать, не важно откуда, хоть с флешки, распаковать и добавить в свою базу.
- 1. достать
2. упаковать
3. зашифровать
4. выложить
5. забрать
6. распаковать
7. добавить
- 1. select запрос.
2+3. используйте zip с паролем.
4. выкладывайте(там, куда выкладываете - описанно как это делается у них)
5. забирайте (там, где забираете - описанно как это делается у них)
6. распакуйте архив
7. insert запрос
Re: Урок 34. Хранение данных. SQLite
Спасибо, теперь понял. Ключевое - zip. Главное сформировать файл. А уже передать и принять его можно любым доступным способом. Т.е. я могу использовать его в виде сериализованного объекта.altwin писал(а):Нет, вы можете сериализовать JSON объект и передать по тому же bluetooth. Единственная проблема в ваших словах - "не важно откуда, и как -то". Все что вы описали - можно сделать и важно именно то, что конкретно вы хотите. Из вашего сообщения можно выделить потребность в:LesliStr писал(а): Если я правильно понял, предполагается промежуточный сервак ? Сервак хотелось бы обойти. Немного уточню. В полях записи могут храниться текстовые данные, изображения, документы в формате .doc Эту запись надо достать, как-то упаковать, зашифровать и выложить в любом месте в виде файла. Другим девайсом забрать, не важно откуда, хоть с флешки, распаковать и добавить в свою базу.
в чем проблема?
- 1. достать
2. упаковать
3. зашифровать
4. выложить
5. забрать
6. распаковать
7. добавить
У вас проблема с пунктами 4 и 5? ну так только потому, что как то и куда -то. Определитесь как и куда и все.
- 1. select запрос.
2+3. используйте zip с паролем.
4. выкладывайте(там, куда выкладываете - описанно как это делается у них)
5. забирайте (там, где забираете - описанно как это делается у них)
6. распакуйте архив
7. insert запрос
Re: Урок 34. Хранение данных. SQLite
Подскажите, пожалуйста, что я неправильно делаю? Почему не создается БД?
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 Kvartiry extends Activity implements OnClickListener {
final String LOG_TAG = "myLogs";
Button btnSave, btnRead, btnDelete;
EditText etName, etCity, etStreet, etHome, etKvartira, etPrice;
DBHelper dbHelper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kvartiry);
btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(this);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnDelete = (Button) findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(this);
etName = (EditText) findViewById(R.id.etName);
etCity = (EditText) findViewById(R.id.etCity);
etStreet = (EditText) findViewById(R.id.etStreet);
etHome = (EditText) findViewById(R.id.etHome);
etKvartira = (EditText) findViewById(R.id.etKvartira);
etPrice = (EditText) findViewById(R.id.etPrice);
// создаем объект для создания и управления версиями БД
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
// создаем объект для данных
ContentValues cv = new ContentValues();
// получаем данные из полей ввода
String name = etName.getText().toString();
String city = etCity.getText().toString();
String street = etStreet.getText().toString();
String home = etHome.getText().toString();
String kvartira = etKvartira.getText().toString();
String price = etPrice.getText().toString();
// подключаемся к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnSave:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца -
// значение
cv.put("name", name);
cv.put("city", city);
cv.put("street", street);
cv.put("home", home);
cv.put("kvartira", kvartira);
cv.put("price", price);
// вставляем запись и получаем ее 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 cityColIndex = c.getColumnIndex("city");
int streetColIndex = c.getColumnIndex("street");
int homeColIndex = c.getColumnIndex("home");
int kvartiraColIndex = c.getColumnIndex("kvartira");
int priceColIndex = c.getColumnIndex("price");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) + ", name = "
+ c.getString(nameColIndex) + ", city = "
+ c.getString(cityColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false -
// выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
case R.id.btnDelete:
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,"
+ "city text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
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 Kvartiry extends Activity implements OnClickListener {
final String LOG_TAG = "myLogs";
Button btnSave, btnRead, btnDelete;
EditText etName, etCity, etStreet, etHome, etKvartira, etPrice;
DBHelper dbHelper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kvartiry);
btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(this);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnDelete = (Button) findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(this);
etName = (EditText) findViewById(R.id.etName);
etCity = (EditText) findViewById(R.id.etCity);
etStreet = (EditText) findViewById(R.id.etStreet);
etHome = (EditText) findViewById(R.id.etHome);
etKvartira = (EditText) findViewById(R.id.etKvartira);
etPrice = (EditText) findViewById(R.id.etPrice);
// создаем объект для создания и управления версиями БД
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
// создаем объект для данных
ContentValues cv = new ContentValues();
// получаем данные из полей ввода
String name = etName.getText().toString();
String city = etCity.getText().toString();
String street = etStreet.getText().toString();
String home = etHome.getText().toString();
String kvartira = etKvartira.getText().toString();
String price = etPrice.getText().toString();
// подключаемся к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnSave:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца -
// значение
cv.put("name", name);
cv.put("city", city);
cv.put("street", street);
cv.put("home", home);
cv.put("kvartira", kvartira);
cv.put("price", price);
// вставляем запись и получаем ее 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 cityColIndex = c.getColumnIndex("city");
int streetColIndex = c.getColumnIndex("street");
int homeColIndex = c.getColumnIndex("home");
int kvartiraColIndex = c.getColumnIndex("kvartira");
int priceColIndex = c.getColumnIndex("price");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) + ", name = "
+ c.getString(nameColIndex) + ", city = "
+ c.getString(cityColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false -
// выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
case R.id.btnDelete:
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,"
+ "city text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
Re: Урок 34. Хранение данных. SQLite
не правильно оформляешь код на форуме...
Re: Урок 34. Хранение данных. SQLite
допустим у меня приложение с несколькими Activity. Если я создам БД в одной из них, другие Activity будут иметь к ней доступ? Ведь это все в одном приложении.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Будут. БД создается для всего приложения.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 34. Хранение данных. SQLite
В уроке описано три способа
А мне нужен четвертый, где БД не существует, но она есть готовая в апк. Чтобы при установки приложения, БД просто скидывалась куда нужно, а не создавалась за счет приложения. Это возможно? и как это сделать?1) БД не существует. Это может быть например в случае первичной установки программы. В этом случае приложение должно само создать БД и все таблицы в ней. И далее оно уже работает с только что созданной БД.
2) БД существует, но ее версия устарела. Это может быть в случае обновления программы. Например новой версии программы нужны дополнительные поля в старых таблицах или новые таблицы. В этом случае приложение должно апдейтить существующие таблицы и создать новые, если это необходимо.
3) БД существует и ее версия актуальна. В этом случае приложение успешно подключается к БД и работает.
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
Да тут 29 страниц, я пытался найти. Ни как ни получается( И поисковый запрос не напишешь
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
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Подсказываю ключевые слова для поиска: android база данных assets
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 34. Хранение данных. SQLite
Доброго времени суток!
Почему не срабатывает onCreate?
В комментариях к коду вопрос уточняется в нужном месте
MainActivity.java
DBHelper.java
лог ошибок:
Если файл базы данных присутствует, хотя бы с пустыми таблицами, всё работает как часы!
в чём моя ошибка?
Почему не срабатывает onCreate?
В комментариях к коду вопрос уточняется в нужном месте
MainActivity.java
Код: Выделить всё
public class MainActivity extends Activity {
...
DBHelper dbHelper;
...
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
dbHelper = new DBHelper(this);
dbHelper.dbInsert(TN_SPRACHEN,myTable);
...
}
}
Код: Выделить всё
public class DBHelper extends SQLiteOpenHelper {
public void dbInsert(int table, ArrayList<HashMap<String,Object>> daten) {
if(LOG) Log.d(LOG_TAG,"#### DBHelper.dbInsert ####");
String id,pid,name,language,title,header,content;
try {
// создаем объект для данных
ContentValues cv = new ContentValues();
//Если я правильно понимаю, то при отсутствии базы данных при исполнении следующей строки должно вызываться onCreate и она создаётся... Но этого не происходит, а падает с исключением и ошибкой "unable to open database file"! ПОЧЕМУ?
mdb = getWritableDatabase();
...
mdb.insert(Tables[table], null, cv);
mdb.close();
} catch (SQLException e) {
e.printStackTrace();
Log.d(LOG_TAG, "### Datenbank existiert nicht! (\""+e.getMessage().toString()+"\")");
}
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG,"--- onCreate database ---");
// создаем таблицу с полями
// Create Table 'jkSprachen'
String SQL_CT_SPRACHE="CREATE TABLE "+Tables[TN_SPRACHEN]+" ("
+ID+" INT, "
+NAME+" VARCHAR(255), "
+LANGUAGE+" VARCHAR(255))";
try {
db.execSQL(SQL_CT_SPRACHE);
if(LOG) Log.d(LOG_TAG,">> # Table "+Tables[TN_SPRACHEN]+" is created: "+SQL_CT_SPRACHE+" #");
} catch (SQLiteException e){
if (e.getMessage().contains("already exists")){
db.execSQL("DROP TABLE "+Tables[TN_SPRACHEN]);
db.execSQL(SQL_CT_SPRACHE);
if(LOG) Log.d(LOG_TAG,">> # Table "+Tables[TN_SPRACHEN]+" is reCreated: "+SQL_CT_SPRACHE+" #");
}
}
}
Код: Выделить всё
02-24 07:55:35.237: INFO/Database(6330): sqlite returned: error code = 14, msg = cannot open file at source line 25467
02-24 07:55:35.237: ERROR/Database(6330): sqlite3_open_v2("/data/data/com.example.Todo_List/databases/myDBank", &handle, 6, NULL) failed
02-24 07:55:35.248: WARN/System.err(6330): android.database.sqlite.SQLiteException: unable to open database file
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
02-24 07:55:35.257: WARN/System.err(6330): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
02-24 07:55:35.257: WARN/System.err(6330): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-24 07:55:35.257: WARN/System.err(6330): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
02-24 07:55:35.257: WARN/System.err(6330): at com.example.Todo_List.DBHelper.dbInsert(DBHelper.java:140)
в чём моя ошибка?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Даже не представляю в чем причина. Как выглядит конструктор у хелпера?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
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
KamiSempai писал(а):Даже не представляю в чем причина. Как выглядит конструктор у хелпера?
Код: Выделить всё
private static final String LOG_TAG = "myLogs";
private static final String Tables[]={"jkSprachen","jkMenuLevel1","jkMenuLevel2","jkMenuLevel3"};
private static final int DATABASE_VERSION = 1;
private static final String DBName = "myDBank";
public boolean LOG=false;
SQLiteDatabase mdb;
public DBHelper(Context context) {
super(context,DBName,null,DATABASE_VERSION);
}
myDBankFoenix писал(а):а как база данных называется?
А как это связано может быть с названием? Есть какие-то ограничения на имена?
ps: а понял, из ошибки имя... Совпадает да, обявлено константой, чтобы не путать специально
Какое-то ограничение на создание файлов в эмуляторе может быть?
на v2.2 работает, стираю базу, она создаётся
на v2.3.3 если копирую базу с v2.2 всё работает, если стираю, то первоначальная ошибка
при чём в процессе работы она успешно расширяется, а вот создаться с нуля не может
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
-
- Сообщения: 1
- Зарегистрирован: 02 мар 2014, 14:43
Re: Урок 34. Хранение данных. SQLite
Здравствуйте!
Подскажите пожалуйста, как осуществить связь приложения с бд, находящейся на сервере. Например, составляется рейтинг игроков по набранным очкам, и каждый раз при достижении игроком максимального результата(рекорда) его рекорд записывается в общую таблицу игроков, и эта таблица, т.е. рейтинг видна всем. Как именно связать приложение с бд, находящейся на сервере?
Подскажите пожалуйста, как осуществить связь приложения с бд, находящейся на сервере. Например, составляется рейтинг игроков по набранным очкам, и каждый раз при достижении игроком максимального результата(рекорда) его рекорд записывается в общую таблицу игроков, и эта таблица, т.е. рейтинг видна всем. Как именно связать приложение с бд, находящейся на сервере?
Re: Урок 34. Хранение данных. SQLite
В уроках написано, что при отсутствии базы данных при первом обращении к ней вызывается метод onCreate в котором её и можно создать... В моём случае он не вызывается вообще, если базы данных нет, то вылезает ошибка в которой это написано, что нет её... в начале onCreate вывод в лог о его вызове, который никогда не происходитFoenix писал(а):я бы на твоем месте сделала бы все как в уроках - по-простому, без этих странных обработок ошибок и так далее, начать нужно сначала. А уже потом добавлять.
так проверял конечно, и написал же, что пока её нет, выходит ошибка, как только она есть, всё работаетFoenix писал(а):и проверь - на самом деле есть ли база данных или нет - с помощью эксплорера.
но почему до onCreate не доходит дело, пока её нет... вот вопрос в чем