رفتن به مطلب
  • 0

سؤال: استفاده از دیتابیس Sqlite در اندورید استودیو


Kazem Forghani

سوال

سلام ،

در حال نوشتن برنامه ای هستم سوال زیاد می پرسم. :fekr:

می خوام از دیتابیس Sqlite در برنامه استفاده می کنم. آموزش آقای شاهدی رو دنبال کردم اما ارور می ده! :wacko1:

دوستان اگر روش دیگه ای می شناسید لطفاً بیان کنید.

با تشکر :)

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

10 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام ،

تو Stackoverflow جستجو کردم  و به نتیجه رسیدم!

برنامه رو که قبلا روی شبیه ساز نصب شده بود پاک کردم و و از داخل پروژه هم فایل دیتابیس رو حذف کردم. بعد دوباره دیتابیس رو توی پوشه assets کپی کردم و از پروژه ران گرفتم ، بدون هیچ مشکلی اجرا شد و رکورد ها هم نشون داده شد.

http://stackoverflow.com/questions/32939748/sqliteassethelper-no-such-table-error

موفق و مؤید باشید

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

سلام

من از SQLiteOpenHelper  استفاده کردم و می تونید فایل دیتابیس رو هر کجای حافظه که هستش استفاده کنید

package com.taakapps.arta.noteapp;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class DBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = G.DIR_DATABASE + "information.sqlite";

    public DBHelper(Context context, String table) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
     /*   // TODO Auto-generated method stub
        db.execSQL(
                "create table contacts " +
                        "(id integer primary key, name text,phone text,email text, street text,place text)"
        );
    */
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  /*      // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS contacts");
        onCreate(db);
  */
    }

    public boolean insertData(String tableName,ContentValues contentValues ) {
        SQLiteDatabase db = this.getWritableDatabase();

    /*    ContentValues contentValues = new ContentValues();
        contentValues.put("name", name);
        contentValues.put("family", family);
        contentValues.put("desc", desc);
    */
        db.insert(tableName, null, contentValues);
        return true;
    }

    public Cursor getDataOfId(String tableName ,int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("SELECT * FROM " + tableName + " WHERE id=" + id + "", null);
        return res;
    }

    public int numberOfRows() {
        SQLiteDatabase db = this.getReadableDatabase();
        int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
        return numRows;
    }

    public boolean updateContact(Integer id, String name, String family, String desc) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", name);
        contentValues.put("family", family);
        contentValues.put("desc", desc);
        db.update(mTable, contentValues, "id = ? ", new String[]{Integer.toString(id)});

        return true;
    }

    public Integer deleteDataOfId(String tableName,Integer id) {

        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(tableName,
                "id = ? ",
                new String[]{Integer.toString(id)});
    }

    public Cursor getAllRecords(String tableName) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("SELECT * FROM " + tableName, null);
        return res;
    }

}

فقط اگر خودتون دیتابیسی رو با داده های خودتون دارید و یا اصلا دیتابیستون رو خودتون از قبل ساختید بهتره که رویداد OnCreate  رو چیزی ننویسید.

توابعی که نوشته شده سفارشی هستش و خودتون می تونید بسته به نیازتون تعریف کنید و استفاده کنید.

 

مثال »

                 DBHelper dbHelper = new DBHelper(getContext(),"notes");
                 G.notes = new ArrayList<StructNote>();
                 Cursor c;
                 c = dbHelper.getAllRecords("notes");
                 c.moveToFirst();
                 while(!c.isAfterLast()){
                     StructNote structNote = new StructNote();
                     structNote.title = c.getString(c.getColumnIndex("title"));
                     structNote.date = c.getString(c.getColumnIndex("date"));
                     structNote.text = c.getString(c.getColumnIndex("text"));
                     G.notes.add(structNote);
                 }
                 c.close();

اطلاعات رو از دیتابیس میگیره و داخل یک ارایه از نوع StructNote  قرار میده.

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

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

سلام ،

خیلی ممنون ، متوجه شدم. من دیتابیس خودم رو از قبل در نویکت طراحی کردم. چطوری باید به متغیر DATABASE_NAME آدرس فایل رو بدم؟ ( فایل در Assets/databases/name.db هست. )

با تشکر.

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

سلام ،

در حال نوشتن برنامه ای هستم سوال زیاد می پرسم. :fekr:

می خوام از دیتابیس Sqlite در برنامه استفاده می کنم. آموزش آقای شاهدی رو دنبال کردم اما ارور می ده! :wacko1:

دوستان اگر روش دیگه ای می شناسید لطفاً بیان کنید.

با تشکر :)

 

میتونید بگید چه اروری میده ؟

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

میتونید بگید چه اروری میده ؟

سلام ، صبر کنید دوباره امتحان کنم ارور رو گزارش می دم.

با تشکر...

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

سلام ،

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

CustomArrayAdapter adapter = new CustomArrayAdapter(this, R.layout.item_layout, database.getListOfRow("SELECT * FROM tbl", "Text"));

ارور no such table: tbl در لاگ نشون داده می شه ، در حالی که من در دیتابیس خودم جدولی تحت عنوان tbl دارم. دیتابیس رو هم در پوشه assets و در زیر شاخه databases قرار دادم. نام دیتابیس مربوطه رو هم به درستی در کلاس MyDatabase وارد کردم. از وجود ستون Text در دیتابیس هم مطمئن هستم.

با تشکر فراوان

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

دقت کنید پوشه Assets رو درست ساخته باشین و توی پوشه res نرفته باشه

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

دقت کنید پوشه Assets رو درست ساخته باشین و توی پوشه res نرفته باشه

سلام ، خیر پوشه assets دقیقا جایی که باید قرار گرفته باشه هست:

project_image_file.PNG

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

سلام ، خیر پوشه assets دقیقا جایی که باید قرار گرفته باشه هست:

project_image_file.PNG

 

بله درسته پس ممکنه مشکل دیتابیس و یا دادن اطلاعات اشتباه باشه ، 

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

 http://stackoverflow.com/questions/33450950/sqlite-database-error-no-such-table/33452404#33452404

آخرش خودم کتابخونه رو پیدا کردم از github که خیلی خوب بود و آموزنشش و گذاشتم و همه هم استفاده میکنن و مشکلی نداشته 

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

بله درسته پس ممکنه مشکل دیتابیس و یا دادن اطلاعات اشتباه باشه ، 

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

 http://stackoverflow.com/questions/33450950/sqlite-database-error-no-such-table/33452404#33452404

آخرش خودم کتابخونه رو پیدا کردم از github که خیلی خوب بود و آموزنشش و گذاشتم و همه هم استفاده میکنن و مشکلی نداشته 

بنده هم از همین کتابخانه ای که معرفی کردید استفاده می کنم ، اما مشکل ممکنه از کجا باشه؟!

منظورتون از این قسمت چیه؟ :

بله درسته پس ممکنه مشکل دیتابیس و یا دادن اطلاعات اشتباه باشه ،
لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...