آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل کار با دیتابیس در برنامه

sadra  11 سال پیش  11 سال پیش
0 0

سلام به همه

دوستان من اومدم برای برنامه یک کلاس database تعریف کردم که دستورات دیتابیس رو توی خودش قرار بده.که کد های قسمت دیتابیس اینه:

 package com.appnegar.book.fireyourself;

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

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

public class database extends SQLiteOpenHelper {

   
    public final String path="data/data/com.appnegar.book.fireyourself/databases/";
    public final String Name="database";
    public SQLiteDatabase mydb;
   
    private final Context mycontext;
   
   
    public database(Context context) {
        super(context, "database", null, 1);
        mycontext=context;
       
    }

   
    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
       
    }
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
       
    }
   
   
    public void useable(){
       
        boolean checkdb=checkdb();
       
        if(checkdb){

        }else{
           
            this.getReadableDatabase();
           
            try{
            copydatabase();
            }catch(IOException e){
            }
           
        }
       
       
       
    }
   
    public void open(){
       
        mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);
       
    }
   
    public void close(){
        mydb.close();
    }
   
    public boolean checkdb(){
       
        SQLiteDatabase db=null;
        try{   
        db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
        }
        catch(SQLException e)
        {

        }
        //mydb.close();
        return db !=null ? true:false ;
       
    }
   
    public void copydatabase() throws IOException{
        OutputStream myOutput = new FileOutputStream(path+Name);
        byte[] buffer = new byte[1024];
        int length;
        InputStream myInput = mycontext.getAssets().open(Name);
        while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
        }
        myInput.close();
        myOutput.flush();
        myOutput.close();
    }
}

و در اکتیویتی Main هم کد اینه:

 package com.appnegar.book.fireyourself;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class Main extends ActionBarActivity {

    private database db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        db = new database(this);
        db.useable();
    }


}

فایل دیتابیس رو هم گذاشتم توی assets ( در ایکلیپس ) و اسمش رو گذاشتم database و اون .db آخرش رو ورداشتم. اما وقتی نرم افزار RUN میشه. این خطا رو میده. حالا باید چیکار کنم؟ کجای کار مشکل داره؟ :( گزارش کامل لاگ کت رو گذاشتم تو این لینک: http://txt.do/olu6

 10-22 21:05:48.924: E/SqliteDatabaseCpp(1631): sqlite3_open_v2("data/data/com.appnegar.book.fireyourself/databases/database", &handle, 1, NULL) failed
10-22 21:05:48.954: E/SQLiteDatabase(1631): Failed to open the database. closing it.
10-22 21:05:48.954: E/SQLiteDatabase(1631): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
sadra  11 سال پیش
0 0

با خودم گفتم شاید دیتابیسی که من ایجاد می کنم مشکل داره. اما از دیتابیس های دیگه هم که تو سورس بود استفاده کردم. بازم همین مشکل رو داشت :(

+1 0
دوست عزیز خطا درخط های 44،77 actyvity database هستشو 17 main که تو این کدها که شما گذاشتین شماره خط معلوم نیست اگه میشه از این خط هاتون یک عکس قرار بدین تا دوستان بتونن کمکتون کنن. (11 سال پیش)
پاسخ به سوال 
sadra  11 سال پیش
+1 0

مشکل حل شد!

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

اگه کسی این مشکل رو مثل من داشت از برنامه روت اکسپلورر استفاده کنه میبینه که دیتبابیس کپی شده <3

+1 0
بی زحمت (حل شد) رو به صورت سوالتون اظافه کنید تا دوستان هم متوجه بشن. (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .