💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محمود نیک زاد
اضافه کردن دیتابیس خارجی به پروژه
یلدا محصلی حل شده توسط یلدا محصلی

سلام وقت بخیر 

اگر بخواهیم از جداول یک فایل دیتابیس اطلاعات بخوانیم و وارد پروژه کنیم چه راهی پیشنهاد میکنید ؟ 

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

 

سلام. دیتابیس رو به قسمت assets اضافه کردید؟ اگه چنین چیزی منظورتون هست به این شیوه قابل انجام هست. تابع await getDatabasesPath() در کتابخانه sqflite تعریف شده. در صورتی که منظورتون چیز دیگری بوده اطلاعات بیشتری در اختیار قرار بدید

 

Future<void> _loadWordsTable() async {
  final path = await join(await getDatabasesPath(), DataBaseConstants.databaseName);
  await Directory(dirname(path)).create(recursive: true);
  ByteData data = await rootBundle.load('asset/db/words.db');
  List<int> bytes =
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
  await File(path).writeAsBytes(bytes);
}
یلدا محصلی ۱۶ اردیبهشت ۱۴۰۳، ۱۳:۳۷

در اندروید با لایبرری روم میشد که یک فایل دیتابیس را به اصطلاح pre-populate کرد .الان چون در بخش آموزش‌های هایو بود اشاره ای نکردم ولی بهتر بود که میگفتم که قصدم این بود که همچین کاری را با استفاده از هایو در صورت امکان انجام بشه . خودم داخل داکیومنتیشن هایو همچین چیزی پیدا نکردم . کاری که انجام دادم همین روشی بود که شما پیشنهاد دادین و الان چون در پروژه از هایو میخوام استفاده کنم همچین کاری انجام دادم : بعد از کپی کردن فایل دیتابیس از assets 

  ...
  ...
   await File(path).writeAsBytes(bytes,flush: true);
   var dbClient = await openDatabase(path,version: 1);
   List<Map> list = await dbClient!.rawQuery('SELECT * FROM SENSOR');

به فایل دیتابیس دسترسی پیدا میکنم حالا که به دیتا فایل کپی شده دسترسی پیدا کردم میخوام که باکس‌های مرتبط با جداول فایل دیتابیس را با هایو بسازم. 

در کل میخواستم بدونم که این کاری که من الان دارم میکنم اوکی هست یا راه پیشنهادی بهتری هست یه چیزی مثل کاری که لایبرری روم قابلیتش داره و هایو هم بتونه مستقیم باکس‌های متناظر با جداول یک فایل دیتابیس ایمپورت شده به پروژه را بسازه و نخواهیم دستی اینکار انجام بدیم

 

محمود نیک زاد ۱۷ اردیبهشت ۱۴۰۳، ۰۵:۲۲

پیاده سازی این کار با هایو ریسکی هست. چون hive از نوع nosql هست ولی room اساسش sql هست. جایی که کلید خارجی و روابط بین جداول باشه ممکنه به مشکل بخورید.

بهترین پاسخ
یلدا محصلی ۱۷ اردیبهشت ۱۴۰۳، ۱۵:۲۳