رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در باز کردن دیتابیس کپی شده توسط برنامه
#1
با سلام من یه برنامه دارم که میاد دیتابیس رو از assets می گیره و اونو کپی میکنه،همه ی مراحل انجام میشه،برنامه خطا نمیده،دیتابیس هم در آدرس مورد نظر کپی میشه،به طور کامل هم کپی میشه حجم دیتابیس رو مشاهده کردم،اما وقتی یه دستور Cursor برای گرفتن مقادیر از دیتابیس مینویسم و کارهاشو انجام میدم توی قسمت run این ارور ها رو میده

E/SQLiteDatabase: Failed to open database 'data/data/ir.dream.a28raz/databases/database'.
                android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (Sqlite code 14): Could not open database, (OS error - 2:No such file or directory)
                    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
                    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:217)
                    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:201)
                    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493)
                    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:194)
                    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:183)
                    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:827)
                    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:814)
                    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
                    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:689)
                    at ir.dream.ssssssssss.database.open(database.java:68)
                    at ir.dream.ssssssssss.MainActivity.onCreate(MainActivity.java:16)
                    at android.app.Activity.performCreate(Activity.java:6367)
                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2397)
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2504)
                    at android.app.ActivityThread.access$900(ActivityThread.java:165)
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
                    at android.os.Handler.dispatchMessage(Handler.java:102)
                    at android.os.Looper.loop(Looper.java:150)
                    at android.app.ActivityThread.main(ActivityThread.java:5546)
                    at java.lang.reflect.Method.invoke(Native Method)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
I/Process: Sending signal. PID: 28755 SIG: 9
Application terminated.



این فایل main جاوا
package ir.dream.a28raz;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private database db;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       db = new database(this);
       db.usedb();

       db.opendb();

       String s = db.dasplay_title();
       Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
       db.close();

   }
}

اینم database کلاس
package ir.dream.a28raz;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

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


public class database extends SQLiteOpenHelper {
   private Context context;
   private static String db_name = "database";
   private String db_path = "data/data/ir.dream.a28raz/databases/" + db_name;
   private SQLiteDatabase mydb = null;

   public database(Context context) {
       super(context, db_name, null, 1);
       this.context = context;
   }

   @Override
   public void onCreate(SQLiteDatabase sqLiteDatabase) {

   }

   @Override
   public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

   }

   public void usedb() {
       if (checkdb()) {
           //do nothing;
       } else {
           this.getReadableDatabase();

           try {
               copyDB();
           } catch (IOException e) {
           }
       }
   }

   public void opendb() {
       mydb = SQLiteDatabase.openDatabase(db_path, null, SQLiteDatabase.OPEN_READWRITE);
   }

   public boolean checkdb(){
       try{
     opendb();
       }
       catch(SQLException e)
       {
           if (mydb.isOpen()){
               mydb.close();
           }

       }
       //mydb.close();
       return mydb !=null ? true:false ;

   }

   private void copyDB() throws IOException {
       InputStream dbInput = context.getAssets().open(db_name);
       String outFile = db_path ;
       OutputStream dbOutput = new FileOutputStream(outFile);

       byte[] buffer = new byte[1024];
       int length;
       while ((length = dbInput.read(buffer))>0) {
           dbOutput.write(buffer,0,length);
       }

       dbOutput.flush();
       dbOutput.close();
       dbInput.close();

   }

   public void close(){
       mydb.close();
   }

   public String dasplay_title(){
       Cursor cursor = mydb.rawQuery("select * from table" , null);
       cursor.moveToFirst();
       String s = cursor.getString(1);
       return s;
   }
}


فایل‌های پیوست
.rar   copy_database1.rar (اندازه 1.67 MB / تعداد دانلود: 0)
پاسخ
تشکر شده توسط:
#2
توی اپلیکیشن SuperSU یا Super User (هرکدوم نصب کردین) چک کنید Root Explorer مجوز دسترسی داره یا نه.
پاسخ
تشکر شده توسط:
#3
بله استاد داده،کلا هیچ مشکلی نیست فقط وقتی دیتابیس در آدرس مورد نظر کپی میشه این ارور رو میده.
پاسخ
تشکر شده توسط:
#4
پست اولی بروز شده همهاطلاعات رو دادم،مرسی ممنون میشم کمکم کنید.
پاسخ
تشکر شده توسط:
#5
الان اسم پکیجی که توی خطا اعلام شده با اون اسمی که شما توی کدتون نوشتین فرق میکنه. کدها رو بررسی کنید. بهتره مسیر پوشه data برنامه رو اینطوری بخونین:
String dataDir = getApplicationContext().getFilesDir().getAbsolutePath() + "/";
پاسخ
تشکر شده توسط:
#6
سورس قرار داده شد
پاسخ
تشکر شده توسط:
#7
کسی مشکلشو نفهمید؟
پاسخ
تشکر شده توسط:




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