انجمن سایت کلیدستان



مشکل در استفاده از دیتابیس خارجی (آماده) در اندرویدزمان کنونی: ۱۳۹۵/۰۹/۲۱، ۰۶:۱۳ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: msh
آخرین ارسال: msh
پاسخ 34
بازدید 2857

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#1
با سلام

اینکه 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(myPathnullSQLiteDatabase.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 رو توش قرار دادم.

ممنون میشم راهنمایی بفرمایین.
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#2
(۱۳۹۴/۱۱/۲۰, ۰۶:۰۹ ب.ظ)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(myPathnullSQLiteDatabase.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(contextDB_NAMEnull2);
 
      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(myPathnull,
 
                  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(buffer0length);
 
      }

 
      // 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(myPathnull,
 
              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 tableString[] columnsString selection,
 
          String[] selectionArgsString groupByString having,
 
          String orderBy) {
 
      return myDataBase.query("tbl_mp"nullnullnullnullnull,
 
              null);

 
  }

 
  @Override
   
public void onCreate(SQLiteDatabase arg0) {
 
      // TODO Auto-generated method stub
 
       
   
}

 
  @Override
   
public void onUpgrade(SQLiteDatabase arg0int arg1int 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<StringString>>();

 
          for (; c.moveToNext() ; ) {
 
              HashMap<StringStringmap = new HashMap<StringString>();
 
               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(thisdata);

 
          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;

 
      }
 
  

اینا کدهای برنامه خودم بودن دیگه شما طبق مصرفت تغییرشون بده.

همین....!!
پاسخ
 سپاس شده توسط mahdi10539 ، admin ، sohrabjam

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#3
ممنون.

پس جایی که پوشه assets رو درست کردم درسته؟

   

مهم نیست پسوندش db باشه یا sqlite ؟
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#4
(۱۳۹۴/۱۱/۲۱, ۱۰:۵۷ ق.ظ)msh نوشته: ممنون.

پس جایی که پوشه assets رو درست کردم درسته؟



مهم نیست پسوندش db باشه یا sqlite ؟

سلام دوست عزیز تا جایی که من اطلاع دارم برای بهتر کار کردن دیتابیس میتونی پسوندشو برداری، هم توی برنامه هم توی فایل پوشه از روی خود فایل تا یه دیتابیس بدون پسوند داشته باشی، برای پوشه asset هم روی پروژت کلیک راست کن خودش در قسمت اضافه کردن پوشه، یه گزینه داره که به اسم Folder asset هست که میتونی اضافه کنی. بقیه کارا هم مثل استفاده از دیتابیس توی eclips . موفق باشی
Iran PROGRAMER2016
پاسخ
 سپاس شده توسط programmerirani

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#5
این کدهایی که فرستادید. خب کلاس DatabaseConnector رو ایجاد کردم . مشکلی نبود.
اما داخل اکتیویتی اصلی مشکل داره :


   



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

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

ممنون
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#6
(۱۳۹۴/۱۱/۲۱, ۰۳:۵۲ ب.ظ)msh نوشته: این کدهایی که فرستادید. خب کلاس DatabaseConnector رو ایجاد کردم . مشکلی نبود.
اما داخل اکتیویتی اصلی مشکل داره :






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

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

ممنون
سلام
db رو یک شی از کلاس دیتا بیست بگیر
cursor  رو هم باید امپورت کنی به برنامت
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#7
نه دوست عزیز پسوند مهم نیست شما فقط اسمشو بده به کلاس.
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#8
(۱۳۹۴/۱۱/۲۱, ۱۰:۵۷ ق.ظ)msh نوشته: ممنون.

پس جایی که پوشه assets رو درست کردم درسته؟



مهم نیست پسوندش db باشه یا sqlite ؟

سلامی مجدد دوست عزیز

من برای اینکه بهتر نحوه استفاده از ذیتابیس خارجی رو متوجه بشید یک پروژه آماده کرده و اون رو برای شما آپلود میکنم.
البته لازمه بگم که این پروژه با اکلیپس
برای استفاده از اون در android studio کافیه محتوای کلاس های جاوا و layout و پوشه assets به پوشه های متناظر در android studio کپی کنید

لینک دانلود
Iran PROGRAMER2016
پاسخ
 سپاس شده توسط programmerirani

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#9
سلام

ممنون از وقتی که گذاشتید.
فقط پوشه assets خالی هست و db تون داخلش نیست. میشه لطفا اون رو هم آپ نید؟
تشکر
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#10
(۱۳۹۴/۱۲/۰۴, ۰۸:۲۸ ب.ظ)msh نوشته: سلام

ممنون از وقتی که گذاشتید.
فقط پوشه assets خالی هست و db تون داخلش نیست. میشه لطفا اون رو هم آپ نید؟
تشکر

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

لینک دانلود
Iran PROGRAMER2016
پاسخ
 سپاس شده توسط programmerirani ، msh

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#11
با تشکر.
کاملا کابردی بود.

فقط میشه بهم بگید مشکل کد خودم کجاست؟؟؟ (فقط این کد قراره چک کنه اگه 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(myPathnullSQLiteDatabase.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..." eToast.LENGTH_LONG).show();
 
       

وقتی به خط checkdb میرسه که فایل و باز کنه، میپره تو cath و پیغام میده. (ضمنا فایل dbtest هم داخل پوشه assets وجود داره.)
ممنون
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#12
کد خیلی خوبی بود واقعا ممنون.

فقط میشه خواهش کنم از نحوه ذخیره کردن دیتابیستون یه اسکرین شات بذارین؟  من وقتی به جدول شما اطلاعات بیشتری اضافه میکنم و ذخیره میکنم، متفاوت میشه و اون رو نمیخونه:


   


فرمت من :

   



فرمت شما :

   
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#13
(۱۳۹۴/۱۲/۰۵, ۰۹:۵۳ ق.ظ)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(myPathnullSQLiteDatabase.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..." eToast.LENGTH_LONG).show();
 
       

وقتی به خط checkdb میرسه که فایل و باز کنه، میپره تو cath و پیغام میده. (ضمنا فایل dbtest هم داخل پوشه assets وجود داره.)
ممنون


سلام

شما برای این کار از مقادیر Boolean استفاده کنید دستور opendatabase رو توی یک تابع بنویسید که مقدار true یا false رو برمیگردونه
کد پی‌اچ‌پی:
public boolean open(){
        
        try{
         
   mydb=SQLiteDatabase.openDatabase(path+NamenullSQLiteDatabase.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();

Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#14
(۱۳۹۴/۱۲/۰۵, ۱۲:۴۲ ب.ظ)msh نوشته: کد خیلی خوبی بود واقعا ممنون.

فقط میشه خواهش کنم از نحوه ذخیره کردن دیتابیستون یه اسکرین شات بذارین؟  من وقتی به جدول شما اطلاعات بیشتری اضافه میکنم و ذخیره میکنم، متفاوت میشه و اون رو نمیخونه:





فرمت من :





فرمت شما :

دقیق نمیدونم مشکل شما کجاست. ولی احتمال داره چون با اکلیپس نوشته شده باشه و ورژن اولیه SQLite و شما از ورژن های متفاوت بالاتر استفاده میکنید رخ داده باشه.
اگه خروجی مورد نظر رو میگیرید پس نباید دیگه مشکل داشته باشید
موفق باشید
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#15
ممنون حل شد.

فقط یه سوال شما در text نام رو نمایش دادید، اگر بخوام نام و فامیل رو هر دو رو نشون بدم کد زیر رو چطور تغییر بدم؟
کد پی‌اچ‌پی:
               text1.setText(db.Display(0,1)); 
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#16
(۱۳۹۴/۱۲/۰۵, ۰۷:۲۳ ب.ظ)msh نوشته: ممنون حل شد.

فقط یه سوال شما در text نام رو نمایش دادید، اگر بخوام نام و فامیل رو هر دو رو نشون بدم کد زیر رو چطور تغییر بدم؟
کد پی‌اچ‌پی:
               text1.setText(db.Display(0,1)); 

میتونید برای راحتی کار از دستورات زیر استفاده کنید

فرض کنید که نام در ستون اول و فامیلی در ستون دومی است
کد پی‌اچ‌پی:
string name db.Display(0,1);
string family db.Display(0,2);
text1.setText(name +" " family); 
موفق باشید
Iran PROGRAMER2016
پاسخ
 سپاس شده توسط programmerirani ، msh

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#17
سلام

باز هم ممنون از شما و راهنماییتون.
میشه بفرمایید در این نوع استفاده از دیتابیس،
 چطور می تونم سایز db رو بگیرم و توی حلقه for قرار بدم تا بتونه خودش تا آخرین فیلد و بخونه و نمایش بده؟
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#18
ضمنا
در این رو فراخوانی دیتابیس، با هر بار تغییر دیتا بیس، نیاز هست تا برنامه remove و مجدد نصب بشه تا اطلاعات تغییر یافته دیده شه.
علت چیه؟  و آیا راهی برای حل این مشکل وجود داره؟
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#19
(۱۳۹۴/۱۲/۰۹, ۱۲:۰۲ ب.ظ)msh نوشته: ضمنا
در این رو فراخوانی دیتابیس، با هر بار تغییر دیتا بیس، نیاز هست تا برنامه remove و مجدد نصب بشه تا اطلاعات تغییر یافته دیده شه.
علت چیه؟  و آیا راهی برای حل این مشکل وجود داره؟

سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید و برای بدست آوردن تعداد سطرهای جدول از دستور لثاگه اشتباه نکرده باشم می تونید استفاده کنید
کد پی‌اچ‌پی:
Cursor cudatabase.query(dbhelper.tblnamenullnullnullnullnullnull);
        
int s=cu.getCount(); 
موفق باشید
Iran PROGRAMER2016
پاسخ
 سپاس شده توسط msh

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#20
تشکر از شما.
در این روش می تونم کوئری هم بزنم؟
باید کدش را در کلاس دیتا بیس بنویسم یا Maiin ؟
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#21
(۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید

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

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#22
(۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)msh نوشته:
(۱۳۹۴/۱۲/۰۹, ۰۲:۲۴ ب.ظ)e.mahi نوشته: سلام
شما می تونید با دستورات رفرش کردن اطلاعات خودتون رو بدون حدف و نصب مجدد اعمال کنید

سلام.
من سرچ زدم ولی  دستوری برای اینکار پیدا نکردم. میشه لطفا راهنمایی کنید.تشکر

با دستور زیر میتونید Adapter خودتون رو رفرش کنید
کد پی‌اچ‌پی:
adapter.notifyDataSetChanged();
 
       adapter.notifyDataSetInvalidated(); 
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#23
(۱۳۹۴/۱۲/۰۹, ۱۰:۳۶ ب.ظ)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(i2);
 
       }
 
       db.close();
 
       list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,name));
 
       
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#24
(۱۳۹۴/۱۲/۱۰, ۰۳:۳۱ ق.ظ)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(i2);
 
       }
 
       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)
 
           {
                
                
            }
            
        } 
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#25
(۱۳۹۴/۱۲/۱۰, ۰۲:۳۸ ب.ظ)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(i2);
 
       }
 
       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)
 
           {
                
                
            }
            
        } 

هدفتون از این کار چیه ؟
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#26
با این کار هر دفعه، چون db  رو کپی میکنه، نیازی به رفرش نیست و یا حدف و نصب مجدد نرم افزار نیست و جدیدترین تغییرات روش لحاظ شده.
ولی نمیدونم سربار ایجاد میکنه یانه
یعنی هر دفعه کپی رو با نسخه قبلش replace میکنه یا خیر؟
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#27
(۱۳۹۴/۱۲/۱۰, ۰۳:۰۲ ب.ظ)msh نوشته: با این کار هر دفعه، چون db  رو کپی میکنه، نیازی به رفرش نیست و یا حدف و نصب مجدد نرم افزار نیست و جدیدترین تغییرات روش لحاظ شده.
ولی نمیدونم سربار ایجاد میکنه یانه
یعنی هر دفعه کپی رو با نسخه قبلش replace میکنه یا خیر؟

این کار شما هم یک روش میشه ولی به دیدگاه من بیاید کدهارو به دو روش بنویسید
روش اول بصورت کدهایی که براتون فرستادم و روش دوم بصورت کدی که خودتون نوشتید.
توی دیتاهای کم شاید تفاوتی به چشم نیاد ولی توی حجم دیتاهای بالاتر مطمن باشید کندی کدهارو خواهید دید.

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

کپی مجدد مطمنن کاری اضافه و سرعت گیری برای برنامه خواهد بود.

درون لینک اولی که براتون فرستادم در این بحث نحوه گرفتن Count و نحوه رفرش کردن Adapter توی کلاس MainActivity.java قرار داده شده.
همچنین نحوه استفاده از Count نیز در ان قرار دارد.

موفق و پیروز باشید
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#28
سلام . تشکر.

یه سوال.

من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.

مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟

کد پی‌اچ‌پی:
db.query("t"null"شرط"nullnullnullnull); 
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#29
(۱۳۹۴/۱۲/۱۷, ۰۷:۲۳ ب.ظ)msh نوشته: سلام . تشکر.

یه سوال.

من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.

مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟

کد پی‌اچ‌پی:
db.query("t"null"شرط"nullnullnullnull); 

از geury زیر میتونی الگو برداری کنی
کد پی‌اچ‌پی:
SELECT sql FROM sqlite_master WHERE type 'table' AND tbl_name 'COMPANY'
Iran PROGRAMER2016
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#30
سلام 
باید به این شکل عمل کنید
کد پی‌اچ‌پی:
String whereClause "Column1 =? AND Column2 =?";
String[] whereArgs = new String[]{"value1""value2"}; 
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#31
(۱۳۹۴/۱۲/۲۰, ۰۸:۵۷ ق.ظ)mahdi10539 نوشته: سلام 
باید به این شکل عمل کنید
کد پی‌اچ‌پی:
String whereClause "Column1 =? AND Column2 =?";
String[] whereArgs = new String[]{"value1""value2"}; 

سلام .
میشه لطفا در مورد خط دوم توضیح بدید متوجه نمیشم.

ممنون
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#32
(۱۳۹۴/۱۲/۲۰, ۰۱:۰۰ ق.ظ)e.mahi نوشته:
(۱۳۹۴/۱۲/۱۷, ۰۷:۲۳ ب.ظ)msh نوشته: سلام . تشکر.

یه سوال.

من میخوام یک کوئری بزنم از دیتابیس آماده که توش یک where داشته باشه.
میدونم که پارامتر سوم رو باید برای selection پر کنم اما موفق نشدم فرمتش رو بدست بیارم.

مثلا اگر بخوام بگم از جدول t ردیفی رو با id=15 و name=ali پیدا کن چطور باید بنویسم؟

کد پی‌اچ‌پی:
db.query("t"null"شرط"nullnullnullnull); 

از geury زیر میتونی الگو برداری کنی
کد پی‌اچ‌پی:
SELECT sql FROM sqlite_master WHERE type 'table' AND tbl_name 'COMPANY'



سلام.

این فرمتی که شما فرمودید روش اصلی و کلاسیک هست و کاملا درسته.

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

لینک دانلود


کد پی‌اچ‌پی:
db.query("t"null"شرط"nullnullnullnull); 
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#33
Value1 و value2 مقادیر مورد جستجوی ما هستن
که به جهت جلوگیری از هک پایگاه داد یا همون sqlinjection به این صورت نوشته شده
پاسخ

مشکل در استفاده از دیتابیس خارجی (آماده) در اندروید

#34
(۱۳۹۵/۰۱/۱۹, ۱۲:۳۵ ق.ظ)mahdi10539 نوشته: Value1 و value2  مقادیر مورد جستجوی ما هستن
که به جهت جلوگیری از هک پایگاه داد یا همون sqlinjection  به این صورت نوشته شده

می تونم خواهش کنم یه sample کوچک بذارید. اینکه در کلاس دیتابیس چه تغییراتی لازمه و در خود اکتیویتی اصلی  .

تشکر
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)