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


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

مشکل در استفاده از دیتابیس خارجی

#1
سلام خدمت همه اعضای گل کلیدستان بخصوص مدیر عزیز که همیشه راهنمایی می کنن Heart

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




کد پی‌اچ‌پی:
package BaseClass;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.example.Saadi.BaseClass;
import com.example.Saadi.R;

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 
DataBase extends SQLiteOpenHelper {
     
 String DB_PATH null;
     
     public static  String DB_NAME ;
     
   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 DataBase(Context context) {
     
     
       super(contextDB_NAMEnull1);
     
       this.myContext context;
     
       this.DB_NAME=this.myContext.getResources().getString(R.string.DB_Name);
     
       if(android.os.Build.VERSION.SDK_INT >= 17) {
     
              DB_PATH context.getApplicationInfo().dataDir "/databases/"        
                
} else {
     
              DB_PATH "/data/data/" context.getPackageName() + "/databases/";
     
           }
     
       
        
}
     
     
   public void createDataBase() throws IOException {
     
     
       boolean dbExist checkDataBase();
     
       SQLiteDatabase db_Read null;
     
       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();
     
     
           //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_READONLY);
     
     
       } 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;
     
     
       File f = new FileDB_PATH);    
            if 
(!f.exists()){
     
           f.mkdir();
     
           f.createNewFile();
     
       }
     
       
            
            
// 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_READONLY
                            
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("pwp_singers", null, null, null, null, null,
                    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
     
        
        
}
     
    } 

تو کلاس دیگم که از کلاس بالا استفاده میکنه این تابع ها رو دارم
کد پی‌اچ‌پی:
public String[][] DataBase_Operation(int ColumnDBCount)
{
    
Load_Database();
    
String[][] AllRowQuery null;    
     
db myDbHelper.getReadableDatabase();
     
     
Cursor    c db.rawQuery("SELECT * FROM tblHeader, null);
     AllRowQuery=new String[ColumnDBCount][c.getCount()];
      if(c.moveToFirst()){
            int counter=0;
            do{
                for(int i=0;i<ColumnDBCount;i++)
                {
                    AllRowQuery[i][counter]=c.getString(i);
                }
                
                counter++;
              
            }
            while(c.moveToNext());
        }
      return AllRowQuery;
}
public void Load_Database() throws Error {
    myDbHelper =new DataBase(_context);
    try {

        myDbHelper.createDataBase();

    } catch (IOException ioe) {

        throw new Error("
Unable to create database");

    }

    try {

        myDbHelper.openDataBase();
    } catch (SQLException sqle) {
        throw sqle;

    }


حالا به محض رسیدن به Cursor ینی خط هفتم یه همچین خطایی رو میده

کد پی‌اچ‌پی:
android.database.sqlite.SQLiteExceptionno such table


stackoverflow رو زیر و رو کردم ولی چیزی دستگیرم نشد خواهشا هرکی می تونه کمک کنه دو روزه نتونستم ی خط کد بزنم Huh Huh Huh Huh
پاسخ

مشکل در استفاده از دیتابیس خارجی

#2
سلام
حدس میزنم که این خطا به خاطر این بوجود می آید که از DATABASE_VERSION استفاده نکردید داخل کلاس تون

شما این خط رو به کلاس تون اضافه کنید
کد:
   private static final int DATABASE_VERSION = 1;

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

درضمن به این لینک هم یه نگاهی بندازید اگه مشکلتون حل نشد
http://stackoverflow.com/questions/21069...ompiling-i
فهمیدن بهتر از دانستن است.
پاسخ
 سپاس شده توسط saeedfozol

مشکل در استفاده از دیتابیس خارجی

#3
(۱۳۹۵/۰۹/۱۵, ۱۱:۳۷ ق.ظ)s.saeid نوشته: سلام
حدس میزنم که این خطا به خاطر این بوجود می آید که از DATABASE_VERSION استفاده نکردید داخل کلاس تون

شما این خط رو به کلاس تون اضافه کنید
کد:
   private static final int DATABASE_VERSION = 1;

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

درضمن به این لینک هم یه نگاهی بندازید اگه مشکلتون حل نشد
http://stackoverflow.com/questions/21069...ompiling-i


ممنون سعید جان برای جوابتون  Heart 

ولی من  مستقیما دیتابیس ورژون رو تو سازنده قرار دادم

کد پی‌اچ‌پی:
public DataBase(Context context) {
 
    
            super
(contextDB_NAMEnull1); 

که ورودی چهارم همون دیتابیس ورژن هست

با پاک کردن دوبارم مشکلم حل نشد Confused Confused Confused
پاسخ

مشکل در استفاده از دیتابیس خارجی

#4
مدیرجان کجایی دقیقا کجایی؟ coffee
پاسخ

مشکل در استفاده از دیتابیس خارجی

#5
تو قسمت کپی کردن دیتابیس خارجی مشکلی نبود ولی تو خوندن جدولا به احتمال زیاد مشکلم از آدرس دهی بود.
به هر حال برای باز کردن جدولا از این روش ساده تر استفاده کردم و مشکلم حل شد
کد پی‌اچ‌پی:
SQLiteDatabase mydb myContext.openOrCreateDatabase(DB_NAMEContext.MODE_PRIVATE,null);

     
        Cursor allrows  mydb.rawQuery(QueryStringnull); 
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


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