بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
الی 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام من یه برنامه نوشتن با یه دیتابیس ازبرنامه SQLite expert براش یه دکمه گذاشتم که وقتی روش کلیک بشه دیتابیس رو نشون بده ولی وقتی روش کلیلک میکنم فورس کلوز میکنه هرچی هم میگردم نمیتونم مشکلش رو پیدا کنم .

public class ActivityDatabase extends SQLiteOpenHelper {

    public final String   path = "data/data/com.elham.app.database/databases/";

    public final String   Name = "database";

    public SQLiteDatabase mydb;

    private final Context mycontext;

    public ActivityDatabase(Context context) {

        super(context, "database", null, 1);

        mycontext = context;

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    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) {}

        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();

 

    }

 

 

    public String Display(int row, int field, String table) {

        Cursor cu = mydb.rawQuery("select *from " + table, null);

        cu.moveToPosition(row);

        String s = cu.getString(field);

        return s;

    }

 

}

 

نظرات

احمد 10 سال پیش
تو این خط Cursor cu = mydb.rawQuery("select *from " + table, null) بین * و from فاصله نداره. البته شاید جاهای دیگه هم مشکل داشته باشه ولی داخل تگ بزارید تا قابل خواندن باشه.
میرحسین 10 سال پیش
لطفا کدتون را داخل Source Code قرار دهید
الی 10 سال پیش
احمد اقا متوجه نشدم دقیق باید فاصله داشته باشه یا نه ؟ در هر دو صورت کرش میکنه

پاسخ‌ها 2

الی 10 سال پیش

اینم کد

 public class ActivityDatabase extends SQLiteOpenHelper {

    public final String   path = "data/data/com.elham.app.chocolate/databases/";
    public final String   Name = "database";
    public SQLiteDatabase mydb;
    private final Context mycontext;


    public ActivityDatabase(Context context) {
        super(context, "database", null, 1);
        mycontext = context;
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    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) {}

        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();

    }


    public String Display(int row, int field, String table) {
        Cursor cu = mydb.rawQuery("select * from" + table, null);
        cu.moveToPosition(row);
        String s = cu.getString(field);
        return s;
    }

}

 

نظرات

nmotaghed 10 سال پیش
دستوری که برای اجرا نوشتین و نام دیتابیس و تیبلتون چیه؟
الی 10 سال پیش

اینم دستورات اجرا 

 
public class ChocolateActivity extends Activity {

    private ActivityDatabase db;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button) findViewById(R.id.button1);
        db = new ActivityDatabase(this);

        db.useable();

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                db.open();
                String s = db.Display(0, 1, "chocolate");
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
                db.close();
            }

        });

    }
}

نظرات

الی 10 سال پیش
اسم دیتابیسم database اسم تیبلم chocolate
احمد 10 سال پیش
بعد از from" یه فاصله بزارید اینجوری from به نام table چسبیده
MeY3am 10 سال پیش
اجازه دسترسی به SD Card رو در منیفست چک کنید، احتمالا دسترسی نوشتن روی SD Card رو ننوشتین !
احمد 10 سال پیش
اگه اشتباه نکنم شاید : در متد Display در کلاس دیتابیس مقدار row از یک شروع میشه نه صفر...
الی 10 سال پیش
فهیدم مشکلش کجاست کافی بود به جای tabale + اسم تیبلم رو تویه تگ بعد از from بذارم یعنی "select * from chocolate" ممنونم از راهنمایی همه تون

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