PDA

View Full Version : مشکل در ابدیت sqlite



Mostafa_
یک شنبه 12 شهریور 1396, 08:09 صبح
سلام خدمت دوستان
یه مشکل داشتم

من تو پروژم از sqlite استفاده میکنم و فایل دیتابیس توی پوشه assete هست
توی کلاس mydbhandler که متدهای ارتباط با Sqlite هست ،،، فایل دیتابیس توی کش کپی میشه ،،، اما فقط برای یه بار ،، و اجراهای بعدی هرکار میکنم ابدیت نمیشه
حتما باید فایل برنامه رو پاک کنم ،، تا دوباره که نصب میشه مقدارهای جدید رو بخونه ،،،

میشه راهنمایی کنین باید چکار کنم ؟؟؟

Mostafa_
یک شنبه 12 شهریور 1396, 21:37 عصر
دوستان راهنمایی لطفا ،،،

Mostafa_
سه شنبه 14 شهریور 1396, 12:54 عصر
دوستان هم اکنون نیازمند یاری و کمک می باشم !!!

opinions
چهارشنبه 15 شهریور 1396, 11:53 صبح
سلام. اگر هربار دیتابیس جدید رو توی پوشه assets میگذاری برای آپدیت. بهتره از کتابخونه sqlite assets helper استفاده کنی کلی کارت راحت میشه. و هر بار شماره ورژن دیتابیس رو یک واحد افزایش بده. خودش برات جابجا و آپدیت میکنه.

hamedg1366
چهارشنبه 15 شهریور 1396, 14:51 عصر
کدهاتون رو قرار بدین ببینیم چیکار کردین و یا کجای کار عیب داره

در ضمن سوالتون کمی ... پیچیده هستش ! شما میخواهید در هنگام آپدیت برنامه دیتابیس تغییر کنه یا اینکه هر بار ک برنامه توسط کاربر باز میشه اطلاعات جدیدی از نت براش ارسال میکنید ک باید تغییر کنه ؟

hamedg1366
شنبه 18 شهریور 1396, 10:14 صبح
با سلام

برای ثبت اطلاعات در دیتابییس بنده از روش زیر استفاده میکنم (این روش وقتی خیلی کاربردی تر میشه ک تعداد فیلدها زیاد باشه) :



public SQLiteDatabase mydb;




public void insert_db(List<String> id, List<String> name, List<String> family, List<String> num){
String sql = "INSERT INTO tbl_Family (id_db, name_db, family_db, num_db) VALUES (?, ?, ?, ?)";
final SQLiteStatement statement = mydb.compileStatement(sql);
mydb.beginTransaction();
int n = (name.size());
try {
for (int i = 0; i < n; i++) {
statement.clearBindings();
statement.bindLong(1, Integer.parseInt(id.get(i)));
statement.bindString(2, name.get(i));
statement.bindString(3, family.get(i));
statement.bindString(4, num.get(i));

statement.execute();
}
mydb.setTransactionSuccessful();
} catch (Exception e) {
//Log.i("BAD"," MOSHKELI HASTESH");
} finally {
mydb.endTransaction();

}

}



حالا اگه شما فقط یه مقدار به هر فیلد میخواهید بفرستید ، بجای آرایه لیست (مثلا) String یا int یا ... قرار دهید و for موجود را حذف کنید

همچنین id_db, name_db, family_db, num_db فیلدهای ما در دیتابیس هستند


امیدوارم بدردتون بخوره ، من سالهاس از این روش استفاده میکنم

hamedg1366
شنبه 18 شهریور 1396, 10:15 صبح
با سلام

برای ثبت اطلاعات در دیتابییس بنده از روش زیر استفاده میکنم (این روش وقتی خیلی کاربردی تر میشه ک تعداد فیلدها زیاد باشه) :



public SQLiteDatabase mydb;




public void insert_db(List<String> id, List<String> name, List<String> family, List<String> num){
String sql = "INSERT INTO tbl_Family (id_db, name_db, family_db, num_db) VALUES (?, ?, ?, ?)";
final SQLiteStatement statement = mydb.compileStatement(sql);
mydb.beginTransaction();
int n = (name.size());
try {
for (int i = 0; i < n; i++) {
statement.clearBindings();
statement.bindLong(1, Integer.parseInt(id.get(i)));
statement.bindString(2, name.get(i));
statement.bindString(3, family.get(i));
statement.bindString(4, num.get(i));

statement.execute();
}
mydb.setTransactionSuccessful();
} catch (Exception e) {
//Log.i("BAD"," MOSHKELI HASTESH");
} finally {
mydb.endTransaction();

}

}



حالا اگه شما فقط یه مقدار به هر فیلد میخواهید بفرستید ، بجای آرایه لیست نوع متغییر خودتون رو بنویسید و for موجود رو حذف کنید
همچنین id_db, name_db, family_db, num_db فیلدهای ما در دیتابیس هستند
و همینطور tbl_Family نام جدول هست

امیدوارم بدردتون بخوره ، من سالهاس از این روش استفاده میکنم