ورود

View Full Version : نشناخته شدن دیتابیس در اندروید استدیو



mehrdad85
سه شنبه 02 بهمن 1397, 15:54 عصر
با سلام
من میخوام داخل برنامه ار دیتابیس آماده شده از قبل استفاده کنم. توی فرم که چیزی پیدانکردم واگه هست و نباید سوالم را مطرح میکردم بفرمایید که تاپیکم را حذفکنم.
دوم اینکه دیتابیس را وقتی توی اندروید استدیو کپی میکنم کنارش یه علامت سوال میاد انگار که فرمت اونو نمیشناسه. عکسش را گذاشتم149667
کسی میدوه دلیلش چیه و چطور میشه حلش کرد و از دیتابیس آماده در پروژه اندروید استفاده کرد؟
ممنون میشم راهنمایی کنین و یا اگه منبعی وجود داره معرفی کنید.


سپاس

farhad_shiri_ex
سه شنبه 02 بهمن 1397, 16:19 عصر
علامت سوال ربطی به شناسایی فرمت توسط اندروید استودیو نداره! اصلا لازم نیست که اندروید استودیو بشناسه! یعنی طرز تفکری که راجع به نحوه کاربرد دیتابیس دارید در ویژوال استودیو و اندروید استودیو خیلی متفاوته!
در حقیقت اینجا شما یک فایل دیتابیس به عنوان ملحقات پروژه دارید تعریف میکنید! بنابراین برای اینکه بتونید ازش استفاده کنید باید با استفاهد از کلاس SqliteConnection ,.... در اندروید بهش متصل بشید و کارهایی که لازم دارید انجام بدید.
در زمان open کردن دیتابیس توسط کلاس فوق می تونید بگید که از یک فایل دیتابیس عضو پروژه بخونه ! به همین سادگی !
اگر هم که کلا با کلاسهای Sqlite کار نکردید بفرمایید اینجا یک مثال کامل از نحوه استفاده براتون ارسال کنم!
البته من یک ORM ساده برای خودم نوشتم که کار نوشتن روی دیتابیس را به صورت آبجکتی انجام بدم اگر لازم بود بگید همین جا براتون آپلود کنم

capitan_nemesis
سه شنبه 02 بهمن 1397, 16:27 عصر
من از طریق دیگه از پایگاه داده استفاده میکنم
ولی این درسته گذاشتین فقط کدش رو خواستین بدم که بتونید استفاده کنید از ایان پوشه

mehrdad85
سه شنبه 02 بهمن 1397, 22:13 عصر
من از طریق دیگه از پایگاه داده استفاده میکنم
ولی این درسته گذاشتین فقط کدش رو خواستین بدم که بتونید استفاده کنید از ایان پوشه

سلام ممنونم از وقتی که گذاشتید و پاسخ دادید .
ممنون میشم اگه کدتون را برام بفرستید که من هم استفاده کنم .
سپاس

mehrdad85
سه شنبه 02 بهمن 1397, 22:14 عصر
علامت سوال ربطی به شناسایی فرمت توسط اندروید استودیو نداره! اصلا لازم نیست که اندروید استودیو بشناسه! یعنی طرز تفکری که راجع به نحوه کاربرد دیتابیس دارید در ویژوال استودیو و اندروید استودیو خیلی متفاوته!
در حقیقت اینجا شما یک فایل دیتابیس به عنوان ملحقات پروژه دارید تعریف میکنید! بنابراین برای اینکه بتونید ازش استفاده کنید باید با استفاهد از کلاس SqliteConnection ,.... در اندروید بهش متصل بشید و کارهایی که لازم دارید انجام بدید.
در زمان open کردن دیتابیس توسط کلاس فوق می تونید بگید که از یک فایل دیتابیس عضو پروژه بخونه ! به همین سادگی !
اگر هم که کلا با کلاسهای Sqlite کار نکردید بفرمایید اینجا یک مثال کامل از نحوه استفاده براتون ارسال کنم!
البته من یک ORM ساده برای خودم نوشتم که کار نوشتن روی دیتابیس را به صورت آبجکتی انجام بدم اگر لازم بود بگید همین جا براتون آپلود کنم

سلام
بسسسسیار سپاسگزار مررسی

اگه زحمتی نیست کد را برام بفرستید یا اینجا اپلود کنین که من و دیگر دوستان استفاده کنیم .
دعاگو هستیم .


ممنون

farhad_shiri_ex
سه شنبه 02 بهمن 1397, 23:19 عصر
سلام
بسسسسیار سپاسگزار مررسی

اگه زحمتی نیست کد را برام بفرستید یا اینجا اپلود کنین که من و دیگر دوستان استفاده کنیم .
دعاگو هستیم .


ممنون

خواهش میکنم شما لطف دارید
فقط چون من از جاوای ۸ استفاده میکنم کلاس هام وابستگی های زیادی دارند مدتی طول میکشه بخوام آماده کنم واینجا قرار بدم. به همین علت فعلا قسمتی که از روی assets فایل دیتابیس را کپی میکنه قرار میدم امیدوارم مفید باشه! در صورتی که نیاز به بخش های دیگه داشتید اطلاع بدید!
البته قبلش باید یک کلاس از روی کلاس SQLiteOpenHelper اندروید مشتق کنید و الباقی داستان....

public static final String DB_NAME = "your_db_Name";

public static int attachedDatabase(Context ctx) throws Exception {
int req;
try (InputStream _upgraded_db = ctx.getAssets().open(DB_NAME)){
String _current_db = ctx.getDatabasePath(DB_NAME).getPath();
File _DataBaseFile_= new File(_current_db);
if (_DataBaseFile_.exists() && dbInstalled(_current_db)) {
ifNeededUpGradeDb(ctx);
if (sDbOldVersion < sDbNewVersion)
req = setupScript(ctx, sDbOldVersion, sDbNewVersion) ? 1 : -1;
else
req =2 ;
} else {
String _empty_db_ = _current_db.substring(1,_current_db.indexOf(DB_NAM E)) ;
File _MainPath_ = new File(_empty_db_);
_MainPath_.mkdirs();
req = copyDb(_upgraded_db, new FileOutputStream(_current_db)) ? 1 : -1;
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return req;
}

private static boolean copyDb(InputStream _inputStream_, OutputStream _outputStream_) {
int _length_;
boolean req;
byte[] _buffer_;
try {
_buffer_ = new byte[_inputStream_.available()];
while ((_length_ = _inputStream_.read(_buffer_)) > 0) {
_outputStream_.write(_buffer_, 0, _length_);
}
req = true;
_outputStream_.flush();
_outputStream_.close();
_inputStream_.close();
} catch (IOException e) {
req = false;
}
return req;
}

private static boolean dbInstalled(String _current_db) {
SQLiteDatabase db;
try {
db = SQLiteDatabase.openDatabase(_current_db, null, 0);
db.rawQuery("SELECT "+KEY_ID+" FROM "+TABLE_PROFILE, null);
} catch (SQLiteException e) {
db = null;
}
if (db != null) {
db.close();
}
return db != null;
}

mehrdad85
سه شنبه 02 بهمن 1397, 23:49 عصر
خواهش میکنم شما لطف دارید
فقط چون من از جاوای ۸ استفاده میکنم کلاس هام وابستگی های زیادی دارند مدتی طول میکشه بخوام آماده کنم واینجا قرار بدم. به همین علت فعلا قسمتی که از روی assets فایل دیتابیس را کپی میکنه قرار میدم امیدوارم مفید باشه! در صورتی که نیاز به بخش های دیگه داشتید اطلاع بدید!
البته قبلش باید یک کلاس از روی کلاس SQLiteOpenHelper اندروید مشتق کنید و الباقی داستان....

public static final String DB_NAME = "your_db_Name";

public static int attachedDatabase(Context ctx) throws Exception {
int req;
try (InputStream _upgraded_db = ctx.getAssets().open(DB_NAME)){
String _current_db = ctx.getDatabasePath(DB_NAME).getPath();
File _DataBaseFile_= new File(_current_db);
if (_DataBaseFile_.exists() && dbInstalled(_current_db)) {
ifNeededUpGradeDb(ctx);
if (sDbOldVersion < sDbNewVersion)
req = setupScript(ctx, sDbOldVersion, sDbNewVersion) ? 1 : -1;
else
req =2 ;
} else {
String _empty_db_ = _current_db.substring(1,_current_db.indexOf(DB_NAM E)) ;
File _MainPath_ = new File(_empty_db_);
_MainPath_.mkdirs();
req = copyDb(_upgraded_db, new FileOutputStream(_current_db)) ? 1 : -1;
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return req;
}

private static boolean copyDb(InputStream _inputStream_, OutputStream _outputStream_) {
int _length_;
boolean req;
byte[] _buffer_;
try {
_buffer_ = new byte[_inputStream_.available()];
while ((_length_ = _inputStream_.read(_buffer_)) > 0) {
_outputStream_.write(_buffer_, 0, _length_);
}
req = true;
_outputStream_.flush();
_outputStream_.close();
_inputStream_.close();
} catch (IOException e) {
req = false;
}
return req;
}

private static boolean dbInstalled(String _current_db) {
SQLiteDatabase db;
try {
db = SQLiteDatabase.openDatabase(_current_db, null, 0);
db.rawQuery("SELECT "+KEY_ID+" FROM "+TABLE_PROFILE, null);
} catch (SQLiteException e) {
db = null;
}
if (db != null) {
db.close();
}
return db != null;
}



مرسی ممنونم از شما.لطف کردید.
چون من ابتداری راه هستم لطفا هر موقع که امکانش بود بخش های دیگه هم بزارید.البته هر موقع که فرصت کردید.
دوست دارم که این بخش را برای یکبار متوجه بشم و ذهنم ازاد بشه.راستش تا الان دست به عصا بخش به بخش پیش رفتم و متاسفانه اون خلاقیت را به خرج ندادم که مستقل این کارو انجام بدم بهمین خاطر دوست دارم که
کلیت قضیه را متوجه بشم.

ممنونم از زمانی که گذاشتید.طلب های خیر برای شما

farhad_shiri_ex
چهارشنبه 03 بهمن 1397, 08:14 صبح
ممنونم از زمانی که گذاشتید.طلب های خیر برای شما

احسنت بر این متانت و بزرگواری شما دوست گرامی !
حتما در اولین فرصت کلاسها را ارسال خواهم کرد