مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۱/۲۰, ۰۶:۰۹ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۱/۲۲, ۱۰:۴۰ ب.ظ توسط admin.)
با سلام
اینکه db در داخل برنامه بسازم و بهش دسترسی داشته باشم و بلدم.
مشکل من این هست که یک سری اطلاعات در قالب جدول در SqLite دارم با پسوند SqLite .
چطور اونها رو در برنامه استفاده کنم؟
این کدیست که من استفاده کردم اما از حلقه Try خارج میشه و پیام Could not open database میده.
کد پیاچپی: String DB_PATH = "/data/data/my_package_name/databases/"; String DB_NAME = "DB1.sqlite";
SQLiteDatabase checkDB = null;
try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); if (checkDB.equals(null)) ; else Toast.makeText(getApplicationContext(), "DB Opened...", Toast.LENGTH_LONG).show();
} catch (Exception e) { Toast.makeText(getApplicationContext(), e+"\ndatabase does't exist yet...", Toast.LENGTH_LONG).show(); }
نکته مهم اینکه در اندروید استدیو به طور پیش فرض پوشه Assets وجود نداره و من خودم ایجادش کردم و db1.sqlite رو توش قرار دادم.
ممنون میشم راهنمایی بفرمایین.
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 116
موضوعها: 20
تاریخ عضویت: دى ۱۳۹۴
اعتبار:
19
سپاس ها 32
سپاس شده 138 بار در 74 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۱/۲۱, ۰۱:۴۲ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۱/۲۲, ۱۰:۴۱ ب.ظ توسط admin.)
(۱۳۹۴/۱۱/۲۰, ۰۶:۰۹ ب.ظ)msh نوشته: با سلام
اینکه db در داخل برنامه بسازم و بهش دسترسی داشته باشم و بلدم.
مشکل من این هست که یک سری اطلاعات در قالب جدول در SqLite دارم با پسوند SqLite .
چطور اونها رو در برنامه استفاده کنم؟
این کدیست که من استفاده کردم اما از حلقه Try خارج میشه و پیام Could not open database میده.
کد پیاچپی: String DB_PATH = "/data/data/my_package_name/databases/"; String DB_NAME = "DB1.sqlite";
SQLiteDatabase checkDB = null;
try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); if (checkDB.equals(null)) ; else Toast.makeText(getApplicationContext(), "DB Opened...", Toast.LENGTH_LONG).show();
} catch (Exception e) { Toast.makeText(getApplicationContext(), e+"\ndatabase does't exist yet...", Toast.LENGTH_LONG).show(); }
نکته مهم اینکه در اندروید استدیو به طور پیش فرض پوشه Assets وجود نداره و من خودم ایجادش کردم و db1.sqlite رو توش قرار دادم.
ممنون میشم راهنمایی بفرمایین.
سلام
اول یه کلاس مثل زیر بساز:
کد پیاچپی: package com.sinabelle.marriagepsychology;
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;
import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseConnecter extends SQLiteOpenHelper { String DB_PATH = null; public static String DB_NAME = "mydb"; private SQLiteDatabase myDataBase; private final Context myContext;
/** * Constructor Takes and keeps a reference of the passed context in order to * access to the application assets and resources. * * @param context */ public DatabaseConnecter(Context context) {
super(context, DB_NAME, null, 2); this.myContext = context; DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; }
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) { // do nothing - database already exist } else {
// By calling this method and empty database will be created into // the default system path // of your application so we are gonna be able to overwrite that // database with our database. this.getReadableDatabase(); this.getWritableDatabase(); try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
} }
} private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
} catch (SQLiteException e) {
// database does\'t exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false; }
/** * Copies your database from your local assets-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. This is done by transfering bytestream. * */ private void copyDataBase() throws IOException {
// Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db String outFileName = DB_PATH + DB_NAME;
// Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); }
// Close the streams myOutput.flush(); myOutput.close(); myInput.close();
}
public void openDataBase() throws SQLException {
// Open the database String myPath = DB_PATH + DB_NAME; // SQLiteDatabase.NO_LOCALIZED_COLLATORS myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
}
@Override public synchronized void close() {
if (myDataBase != null) myDataBase.close();
super.close();
}
// return cursor public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { return myDataBase.query("tbl_mp", null, null, null, null, null, null);
}
@Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub }
@Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub }
}
بعد اینجوری ازش استفاده کن:
کد پیاچپی: Load_Database(); db = myDbHelper.getReadableDatabase(); Cursor c = db.rawQuery("SELECT * FROM tbl_mp where WitchPart = 1", null); data = new ArrayList<HashMap<String, String>>();
for (; c.moveToNext() ; ) { HashMap<String, String> map = new HashMap<String, String>(); id = c.getString(c.getColumnIndex("Id")); String name = c.getString(c.getColumnIndex("Topic")); map.put("id", id); map.put("name", name); data.add(map); } adapter = new list_view(this, data);
lv.setAdapter(adapter);
private void Load_Database() throws Error { myDbHelper = new DatabaseConnecter(this); try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("ناتوان در ساخت پایگاه داده.");
}
try {
myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle;
} }
اینا کدهای برنامه خودم بودن دیگه شما طبق مصرفت تغییرشون بده.
همین....!!
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
ممنون.
پس جایی که پوشه assets رو درست کردم درسته؟
مهم نیست پسوندش db باشه یا sqlite ؟
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۱/۲۱, ۱۰:۵۷ ق.ظ)msh نوشته: ممنون.
پس جایی که پوشه assets رو درست کردم درسته؟
مهم نیست پسوندش db باشه یا sqlite ؟
سلام دوست عزیز تا جایی که من اطلاع دارم برای بهتر کار کردن دیتابیس میتونی پسوندشو برداری، هم توی برنامه هم توی فایل پوشه از روی خود فایل تا یه دیتابیس بدون پسوند داشته باشی، برای پوشه asset هم روی پروژت کلیک راست کن خودش در قسمت اضافه کردن پوشه، یه گزینه داره که به اسم Folder asset هست که میتونی اضافه کنی. بقیه کارا هم مثل استفاده از دیتابیس توی eclips . موفق باشی
ErfanMahigir
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۱/۲۱, ۰۳:۵۲ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۱/۲۱, ۰۳:۵۹ ب.ظ توسط msh.)
این کدهایی که فرستادید. خب کلاس DatabaseConnector رو ایجاد کردم . مشکلی نبود.
اما داخل اکتیویتی اصلی مشکل داره :
این روش یه مقدار برام گنگ هست . ممنون میشم کسی بیشتر توضیح بده.
ضمنا مشکل روش خودم که در اولین پست گذاشتم چیه؟؟ چرا باید از کلاس جداگانه استفاده کنیم؟؟
من در حال حاضر تنها هدفم این هست که چطور یک دیتا بیس خارجی و به درستی در برنامه اندروید بازش کنم. در همین حد دوستان راهنمایی کنن و مشکل کد بالام را بگن کافیه.
ممنون
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 39
موضوعها: 0
تاریخ عضویت: شهریور ۱۳۹۴
اعتبار:
9
سپاس ها 0
سپاس شده 55 بار در 28 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۱/۲۱, ۰۳:۵۲ ب.ظ)msh نوشته: این کدهایی که فرستادید. خب کلاس DatabaseConnector رو ایجاد کردم . مشکلی نبود.
اما داخل اکتیویتی اصلی مشکل داره :
این روش یه مقدار برام گنگ هست . ممنون میشم کسی بیشتر توضیح بده.
ضمنا مشکل روش خودم که در اولین پست گذاشتم چیه؟؟ چرا باید از کلاس جداگانه استفاده کنیم؟؟
من در حال حاضر تنها هدفم این هست که چطور یک دیتا بیس خارجی و به درستی در برنامه اندروید بازش کنم. در همین حد دوستان راهنمایی کنن و مشکل کد بالام را بگن کافیه.
ممنون
سلام
db رو یک شی از کلاس دیتا بیست بگیر
cursor رو هم باید امپورت کنی به برنامت
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 116
موضوعها: 20
تاریخ عضویت: دى ۱۳۹۴
اعتبار:
19
سپاس ها 32
سپاس شده 138 بار در 74 ارسال
حالت من: هیچ کدام
نه دوست عزیز پسوند مهم نیست شما فقط اسمشو بده به کلاس.
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۱/۲۱, ۱۰:۵۷ ق.ظ)msh نوشته: ممنون.
پس جایی که پوشه assets رو درست کردم درسته؟
مهم نیست پسوندش db باشه یا sqlite ؟
سلامی مجدد دوست عزیز
من برای اینکه بهتر نحوه استفاده از ذیتابیس خارجی رو متوجه بشید یک پروژه آماده کرده و اون رو برای شما آپلود میکنم.
البته لازمه بگم که این پروژه با اکلیپس
برای استفاده از اون در android studio کافیه محتوای کلاس های جاوا و layout و پوشه assets به پوشه های متناظر در android studio کپی کنید
لینک دانلود
ErfanMahigir
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
سلام
ممنون از وقتی که گذاشتید.
فقط پوشه assets خالی هست و db تون داخلش نیست. میشه لطفا اون رو هم آپ نید؟
تشکر
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۴, ۰۸:۲۸ ب.ظ)msh نوشته: سلام
ممنون از وقتی که گذاشتید.
فقط پوشه assets خالی هست و db تون داخلش نیست. میشه لطفا اون رو هم آپ نید؟
تشکر
خواهش میکنم. لینکی که گذاشتم مربوط به دستابیس داخلی بود که با کد دیتابیس رو ایجاد کنه
این لینک جدید مربوط به دیتابیس خارجی
لینک دانلود
ErfanMahigir
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۲/۰۵, ۰۹:۵۳ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۲/۰۵, ۰۹:۵۴ ق.ظ توسط msh.)
با تشکر.
کاملا کابردی بود.
فقط میشه بهم بگید مشکل کد خودم کجاست؟؟؟ (فقط این کد قراره چک کنه اگه DB باز شد یا نه پیام بده )
کد پیاچپی: String DB_PATH = "/data/data/package_name/databases/"; String DB_NAME = "dbtest";
SQLiteDatabase checkDB = null;
try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
if (checkDB.equals(null)) Toast.makeText(getApplicationContext(),"", Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(),"DB Opened...", Toast.LENGTH_LONG).show();
} catch (Exception e) { Toast.makeText(getApplicationContext(),"database does't exist yet..." + e, Toast.LENGTH_LONG).show(); }
وقتی به خط checkdb میرسه که فایل و باز کنه، میپره تو cath و پیغام میده. (ضمنا فایل dbtest هم داخل پوشه assets وجود داره.)
ممنون
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
کد خیلی خوبی بود واقعا ممنون.
فقط میشه خواهش کنم از نحوه ذخیره کردن دیتابیستون یه اسکرین شات بذارین؟ من وقتی به جدول شما اطلاعات بیشتری اضافه میکنم و ذخیره میکنم، متفاوت میشه و اون رو نمیخونه:
فرمت من :
فرمت شما :
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۲/۰۵, ۰۲:۰۶ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۲/۰۵, ۰۲:۰۷ ب.ظ توسط e.mahi.)
(۱۳۹۴/۱۲/۰۵, ۰۹:۵۳ ق.ظ)msh نوشته: با تشکر.
کاملا کابردی بود.
فقط میشه بهم بگید مشکل کد خودم کجاست؟؟؟ (فقط این کد قراره چک کنه اگه DB باز شد یا نه پیام بده )
کد پیاچپی: String DB_PATH = "/data/data/package_name/databases/"; String DB_NAME = "dbtest";
SQLiteDatabase checkDB = null;
try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
if (checkDB.equals(null)) Toast.makeText(getApplicationContext(),"", Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(),"DB Opened...", Toast.LENGTH_LONG).show();
} catch (Exception e) { Toast.makeText(getApplicationContext(),"database does't exist yet..." + e, Toast.LENGTH_LONG).show(); }
وقتی به خط checkdb میرسه که فایل و باز کنه، میپره تو cath و پیغام میده. (ضمنا فایل dbtest هم داخل پوشه assets وجود داره.)
ممنون
سلام
شما برای این کار از مقادیر Boolean استفاده کنید دستور opendatabase رو توی یک تابع بنویسید که مقدار true یا false رو برمیگردونه
کد پیاچپی: public boolean open(){ try{ mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE); return true; } catch (Exception e) { return false; } }
بعد توی کدهای خودتون مقدار بازگشتی رو دریک مقدار Boolean ذخیره کنید و اون مقدار رو چک کنید
کد پیاچپی: boolean check; check = open(); if (check) { Toast.mackeText(getApplicationContaxt(), "Open DataBase", Toast.LENGTH_LONG).show(); }else { Toast.mackeText(getApplicationContaxt(), "No Open DataBase", Toast.LENGTH_LONG).show(); }
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۵, ۱۲:۴۲ ب.ظ)msh نوشته: کد خیلی خوبی بود واقعا ممنون.
فقط میشه خواهش کنم از نحوه ذخیره کردن دیتابیستون یه اسکرین شات بذارین؟ من وقتی به جدول شما اطلاعات بیشتری اضافه میکنم و ذخیره میکنم، متفاوت میشه و اون رو نمیخونه:
فرمت من :
فرمت شما :
دقیق نمیدونم مشکل شما کجاست. ولی احتمال داره چون با اکلیپس نوشته شده باشه و ورژن اولیه SQLite و شما از ورژن های متفاوت بالاتر استفاده میکنید رخ داده باشه.
اگه خروجی مورد نظر رو میگیرید پس نباید دیگه مشکل داشته باشید
موفق باشید
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
ممنون حل شد.
فقط یه سوال شما در text نام رو نمایش دادید، اگر بخوام نام و فامیل رو هر دو رو نشون بدم کد زیر رو چطور تغییر بدم؟
کد پیاچپی: text1.setText(db.Display(0,1));
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۵, ۰۷:۲۳ ب.ظ)msh نوشته: ممنون حل شد.
فقط یه سوال شما در text نام رو نمایش دادید، اگر بخوام نام و فامیل رو هر دو رو نشون بدم کد زیر رو چطور تغییر بدم؟
کد پیاچپی: text1.setText(db.Display(0,1));
میتونید برای راحتی کار از دستورات زیر استفاده کنید
فرض کنید که نام در ستون اول و فامیلی در ستون دومی است
کد پیاچپی: string name = db.Display(0,1); string family = db.Display(0,2); text1.setText(name +" " + family);
موفق باشید
ErfanMahigir
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۲/۰۹, ۱۱:۰۲ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۲/۰۹, ۱۱:۰۲ ق.ظ توسط msh.)
سلام
باز هم ممنون از شما و راهنماییتون.
میشه بفرمایید در این نوع استفاده از دیتابیس،
چطور می تونم سایز db رو بگیرم و توی حلقه for قرار بدم تا بتونه خودش تا آخرین فیلد و بخونه و نمایش بده؟
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
ضمنا
در این رو فراخوانی دیتابیس، با هر بار تغییر دیتا بیس، نیاز هست تا برنامه remove و مجدد نصب بشه تا اطلاعات تغییر یافته دیده شه.
علت چیه؟ و آیا راهی برای حل این مشکل وجود داره؟
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۹, ۱۲:۰۲ ب.ظ)msh نوشته: ضمنا
در این رو فراخوانی دیتابیس، با هر بار تغییر دیتا بیس، نیاز هست تا برنامه remove و مجدد نصب بشه تا اطلاعات تغییر یافته دیده شه.
علت چیه؟ و آیا راهی برای حل این مشکل وجود داره؟
سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید و برای بدست آوردن تعداد سطرهای جدول از دستور لثاگه اشتباه نکرده باشم می تونید استفاده کنید
کد پیاچپی: Cursor cu= database.query(dbhelper.tblname, null, null, null, null, null, null); int s=cu.getCount();
موفق باشید
ErfanMahigir
سپاس شده توسط | msh |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
تشکر از شما.
در این روش می تونم کوئری هم بزنم؟
باید کدش را در کلاس دیتا بیس بنویسم یا Maiin ؟
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید
سلام.
من سرچ زدم ولی دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)msh نوشته: (۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید
سلام.
من سرچ زدم ولی دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر
با دستور زیر میتونید Adapter خودتون رو رفرش کنید
کد پیاچپی: adapter.notifyDataSetChanged(); adapter.notifyDataSetInvalidated();
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)msh نوشته: (۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید
سلام.
من سرچ زدم ولی دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر
از تابع زیر هم میتونید استفاده کنید
کد پیاچپی: public void refresh(){ db.open(); int count=db.count(); name=new String[count]; for(int i=0;i<count;i++){ name[i]=db.Display(i,1)+"\n"+db.Display(i, 2); } db.close(); list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,name)); }
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
۱۳۹۴/۱۲/۱۰, ۰۲:۳۸ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۲/۱۰, ۰۲:۳۹ ب.ظ توسط msh.)
(۱۳۹۴/۱۲/۱۰, ۰۳:۳۱ ق.ظ)e.mahi نوشته: (۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)msh نوشته: (۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید
سلام.
من سرچ زدم ولی دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر
از تابع زیر هم میتونید استفاده کنید
کد پیاچپی: public void refresh(){ db.open(); int count=db.count(); name=new String[count]; for(int i=0;i<count;i++){ name[i]=db.Display(i,1)+"\n"+db.Display(i, 2); } db.close(); list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,name)); }
db.count رو ازم ایراد میگیره. این کدها رو درون Main قرار بدم درسته؟
یه راه دیگه هم خودم نتیجه گرفتم وقتی توی کلاس database ، چک میکنه که اگه دیتابیس وجود نداره کپیش کنه در غیر این صورت کارینکنه. من بهش گفتم در هر حالت db رو کپی کن. آیا این سربار درست میکنه یا خیر؟
کد پیاچپی: boolean checkdb=checkdb(); if(checkdb) { copydatabase(); }else{ this.getReadableDatabase(); try { copydatabase(); } catch(IOException e) { } }
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۱۰, ۰۲:۳۸ ب.ظ)msh نوشته: (۱۳۹۴/۱۲/۱۰, ۰۳:۳۱ ق.ظ)e.mahi نوشته: (۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)msh نوشته: (۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید
سلام.
من سرچ زدم ولی دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر
از تابع زیر هم میتونید استفاده کنید
کد پیاچپی: public void refresh(){ db.open(); int count=db.count(); name=new String[count]; for(int i=0;i<count;i++){ name[i]=db.Display(i,1)+"\n"+db.Display(i, 2); } db.close(); list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,name)); }
db.count رو ازم ایراد میگیره. این کدها رو درون Main قرار بدم درسته؟
یه راه دیگه هم خودم نتیجه گرفتم وقتی توی کلاس database ، چک میکنه که اگه دیتابیس وجود نداره کپیش کنه در غیر این صورت کارینکنه. من بهش گفتم در هر حالت db رو کپی کن. آیا این سربار درست میکنه یا خیر؟
کد پیاچپی: boolean checkdb=checkdb(); if(checkdb) { copydatabase(); }else{ this.getReadableDatabase(); try { copydatabase(); } catch(IOException e) { } }
هدفتون از این کار چیه ؟
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
با این کار هر دفعه، چون db رو کپی میکنه، نیازی به رفرش نیست و یا حدف و نصب مجدد نرم افزار نیست و جدیدترین تغییرات روش لحاظ شده.
ولی نمیدونم سربار ایجاد میکنه یانه
یعنی هر دفعه کپی رو با نسخه قبلش replace میکنه یا خیر؟
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۱۰, ۰۳:۰۲ ب.ظ)msh نوشته: با این کار هر دفعه، چون db رو کپی میکنه، نیازی به رفرش نیست و یا حدف و نصب مجدد نرم افزار نیست و جدیدترین تغییرات روش لحاظ شده.
ولی نمیدونم سربار ایجاد میکنه یانه
یعنی هر دفعه کپی رو با نسخه قبلش replace میکنه یا خیر؟
این کار شما هم یک روش میشه ولی به دیدگاه من بیاید کدهارو به دو روش بنویسید
روش اول بصورت کدهایی که براتون فرستادم و روش دوم بصورت کدی که خودتون نوشتید.
توی دیتاهای کم شاید تفاوتی به چشم نیاد ولی توی حجم دیتاهای بالاتر مطمن باشید کندی کدهارو خواهید دید.
ولی بازم دیدگاه من اینه که شما فیلدهای جدول دیتابیس رو چک کنید و تغیرات رو دریافت کنید بهتر از اینه که مسیر دیتابیس رو چک کنید و هربار اون رو کپی کنید و هربار بیاد خودشو بسازه. یکبار برای همیشه ایجاد شده و شما فقط دریافت تغییرات فیلدهای جدول رو چک میکنید. اگه میگم چک منظورم Adapter هستش که اطلاعات رو توسط اون به لیست ویو میدید.
کپی مجدد مطمنن کاری اضافه و سرعت گیری برای برنامه خواهد بود.
درون لینک اولی که براتون فرستادم در این بحث نحوه گرفتن Count و نحوه رفرش کردن Adapter توی کلاس MainActivity.java قرار داده شده.
همچنین نحوه استفاده از Count نیز در ان قرار دارد.
موفق و پیروز باشید
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
سلام . تشکر.
یه سوال.
من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.
مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟
کد پیاچپی: db.query("t", null, "شرط", null, null, null, null);
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 71
موضوعها: 4
تاریخ عضویت: بهمن ۱۳۹۴
اعتبار:
13
سپاس ها 0
سپاس شده 122 بار در 55 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۱۷, ۰۷:۲۳ ب.ظ)msh نوشته: سلام . تشکر.
یه سوال.
من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.
مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟
کد پیاچپی: db.query("t", null, "شرط", null, null, null, null);
از geury زیر میتونی الگو برداری کنی
کد پیاچپی: SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
ErfanMahigir
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 258
موضوعها: 8
تاریخ عضویت: دى ۱۳۹۴
اعتبار:
99
سپاس ها 36
سپاس شده 482 بار در 215 ارسال
حالت من: هیچ کدام
سلام
باید به این شکل عمل کنید
کد پیاچپی: String whereClause = "Column1 =? AND Column2 =?"; String[] whereArgs = new String[]{"value1", "value2"};
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۲۰, ۰۸:۵۷ ق.ظ)mahdi10539 نوشته: سلام
باید به این شکل عمل کنید
کد پیاچپی: String whereClause = "Column1 =? AND Column2 =?"; String[] whereArgs = new String[]{"value1", "value2"};
سلام .
میشه لطفا در مورد خط دوم توضیح بدید متوجه نمیشم.
ممنون
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
(۱۳۹۴/۱۲/۲۰, ۰۱:۰۰ ق.ظ)e.mahi نوشته: (۱۳۹۴/۱۲/۱۷, ۰۷:۲۳ ب.ظ)msh نوشته: سلام . تشکر.
یه سوال.
من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.
مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟
کد پیاچپی: db.query("t", null, "شرط", null, null, null, null);
از geury زیر میتونی الگو برداری کنی
کد پیاچپی: SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
سلام.
این فرمتی که شما فرمودید روش اصلی و کلاسیک هست و کاملا درسته.
اما در قالب همون کلاس database خارجی که ابتدای همین تاپیک خودتون گفتید دنبال روش کوئری زدن هستم.
لینک دانلود
کد پیاچپی: db.query("t", null, "شرط", null, null, null, null);
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 258
موضوعها: 8
تاریخ عضویت: دى ۱۳۹۴
اعتبار:
99
سپاس ها 36
سپاس شده 482 بار در 215 ارسال
حالت من: هیچ کدام
Value1 و value2 مقادیر مورد جستجوی ما هستن
که به جهت جلوگیری از هک پایگاه داد یا همون sqlinjection به این صورت نوشته شده
سپاس شده توسط | |
|
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید
ارسالها: 90
موضوعها: 24
تاریخ عضویت: فروردین ۱۳۹۴
اعتبار:
9
سپاس ها 32
سپاس شده 68 بار در 34 ارسال
حالت من: هیچ کدام
(۱۳۹۵/۰۱/۱۹, ۱۲:۳۵ ق.ظ)mahdi10539 نوشته: Value1 و value2 مقادیر مورد جستجوی ما هستن
که به جهت جلوگیری از هک پایگاه داد یا همون sqlinjection به این صورت نوشته شده
می تونم خواهش کنم یه sample کوچک بذارید. اینکه در کلاس دیتابیس چه تغییراتی لازمه و در خود اکتیویتی اصلی .
تشکر
|