رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

مشكل اين كد در ديتابيس چيه؟


پست های پیشنهاد شده

مشكلل اين كد چيه

نميشه ديتابيس رو توي ليست نشون بدم ارور ميده

كد ها ليست و بقيه مشكلي ندارن با ديتابيس ديگه امتحان كردم ليست رو مياره!

________________________

بروز رساني

كد مشكلي نداره

________________________

public class DBAdapter {   public static final String KEY_ID = "id";   public static final String KEY_SMS = "sms";   public static final String KEY_SUB = "sub";   public static final String KEY_FAV = "fav";   public static final String KEY_EXTRA = "extera";   public static final String DATABASE_NAME = "ah";   public static final String DATABASE_TABLE = "data";   public static final String TAG = "S_AH";   static final String CREATE_TABLE = "CREATE  TABLE "           + DATABASE_TABLE + " (" + KEY_ID           + " INTEGER PRIMARY KEY  NOT NULL , " + KEY_SMS + " TEXT, "           + KEY_SUB + " CHAR NOT NULL  DEFAULT بقيه, " + KEY_FAV + " INTEGER NOT NULL  DEFAULT 0, "            + KEY_EXTRA + " TEXT)";   String[] yek_name = new String[] { KEY_ID, KEY_SMS, KEY_SUB,KEY_FAV, KEY_EXTRA };       final Context context;   DatabaseHelper DBHelper;   SQLiteDatabase db;   public DBAdapter(Context ctx) {       this.context = ctx;       DBHelper = new DatabaseHelper(context);   }   private static class DatabaseHelper extends SQLiteOpenHelper {       DatabaseHelper(Context context) {           // DATABASE_VERSION = 1           super(context, DATABASE_NAME, null, 1);       }       @Override       public void onCreate(SQLiteDatabase db) {           try {               db.execSQL(CREATE_TABLE);           } catch (SQLException e) {               e.printStackTrace();           }       }       @Override       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {           Log.w(TAG, "Upgrading database from version " + oldVersion + " to "                   + newVersion + ", which will destroy all old data");           db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);           onCreate(db);       }   }        public DBAdapter open() throws SQLException {       db = DBHelper.getWritableDatabase();       return this;   }   public void close() {       DBHelper.close();   }   /*public long insertContact(String id, String nam, String mavadavaliye,           String dasturpokht, String note, String ezafi, String fav) {       ContentValues initialValues = new ContentValues();       /*       return db.insert(DATABASE_TABLE, null, initialValues);   }*/   public List getAllContacts() {       Cursor cursor = db.query(DATABASE_TABLE, yek_name, null, null, null,               null, null);       List nams = cursorToList(cursor);       return nams;   }   private List cursorToList(Cursor cursor) {       List nams = new ArrayList();       if (cursor.getCount() > 0) {           while (cursor.moveToNext()) {               Sms nam = new Sms();               nam.setId(cursor.getInt(cursor.getColumnIndex(KEY_  ID)));               nam.setSms(cursor.getString(cursor.getColumnIndex(  KEY_SMS)));               nam.setSub(cursor.getString(cursor.getColumnIndex(  KEY_SUB)));               nam.setFav(cursor.getInt(cursor.getColumnIndex(KEY  _FAV)));               nam.setExtera(cursor.getString(cursor.getColumnInd  ex(KEY_EXTRA)));               nams.add(nam);           };       }               return nams;   }   public Sms getContact(int new_id) throws SQLException {               List nams = new ArrayList();               Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, KEY_ID               + " == '" + new_id + "'", null, null, null, null, null);       Sms nam = new Sms();       if (cursor != null) {           cursor.moveToFirst();                       nams = cursorToList(cursor);       }       Log.i(TAG, nam.getSms() + ",database");       return nams.get(0);   }       public List findContacts(String nam, String row)           throws SQLException {       Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, row               + " LIKE '" + nam + "'", null, null, null, null, null);//%ha ro bardashtim chun masalan age do muzu dashtid 1-khnade 2-khande dar vaghti khande ro search mikardid posthaye mozu khande dar niz miumad chun % bad az nam gharar dasht       List nams = cursorToList(cursor);       return nams;   }       public List findFAVContacts() throws SQLException {       Cursor cursor = db.query(true, DATABASE_TABLE, yek_name, KEY_FAV               + " == " + 1 + "", null, null, null, null, null);       List nams = cursorToList(cursor);       return nams;   }          public boolean updateContact(Sms up_nam) {       ContentValues args = new ContentValues();       // bale in method ro faramush kardim meghdar dehi konim . alan mikonim           args.put(KEY_ID, up_nam.getId());           args.put(KEY_SMS, up_nam.getSms());           args.put(KEY_SUB, up_nam.getSub());           args.put(KEY_FAV, up_nam.getFav());           args.put(KEY_EXTRA, up_nam.getExtera());               return db.update(DATABASE_TABLE, args, KEY_ID + "=" + up_nam.getId(),               null) > 0;   }}
لینک ارسال
به اشتراک گذاری در سایت های دیگر
سلام

اسم دیتابیس تون ah هست؟

اسم دیتابیس قبلی رو توی بقیه اکتیویتی ها سرچ کنین اگه هست اسمشو به دیتابیس جدید تغییر بدین

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 3 هفته بعد...

سلام

[shcode=java]

public class DBAdapterAvay {

    // ebteda sotun ha ro tarif mikonim

   

    public static final String KEY_ID = "id";

    public static final String KEY_NAME_SOUND = "namesound";

    public static final String KEY_NAME_ARTIST = "nameartist";

    public static final String KEY_CODE_SONG = "codesong";

    public static final String KEY_URL = "url";

    public static final String KEY_SAVE_SOUND = "savesound";

    public static final String KEY_BOOK_MARK = "bookmark";

    public static final String KEY_TOPIC = "topic";

    public static final String KEY_CATEGORY = "category";

[/shcode]

برای خواندن دیتابیس از طریق لیست ویو

9 تا فیلد درست کردم،

بعد از اجرای با دیباگ debug ، در logcat خطای فیلد اومد

[align=left]08-28 17:37:20.389: E/SQLiteLog(4340): (1) no such column: category

[align=right][shcode=java]

String[] yek_name_all = new String[] { KEY_ID, KEY_NAME_SOUND, KEY_NAME_ARTIST, KEY_CODE_SONG,

            KEY_URL, KEY_SAVE_SOUND, KEY_BOOK_MARK, KEY_TOPIC , KEY_CATEGORY] };

....

[/shcode]

وقتی  فلید KEY_CATEGORY و تابع  cursorToList(Cursor cursor) { مربوط به فلید KEY_CATEGORY حذف می کنم، بعد از اجرا راحت در لیست ویو دیتابیس ها رو نمایش میده، ولی باعث میشه که فلید KEY_CATEGORY در لیست ویو NULL نمایش بده

جالب تر از اینکه بعد از اجرای موفقیت نمایش دیتابیس در لیست ویو و ذخیر فایل دیتابیس در گوشی، بخش String[] yek_name_all رو KEY_CATEGORY  و تابع  cursorToList(Cursor cursor) { از دوباره نوشتم و برگردوندم، و سپس اجرا کردم بدون اینکه خطای no such column: category بیاد، در لیست ویو اطلاعات KEY_CATEGORY  راحت نمایش داد

اینکه خیلی عجیبه، مشکل از بس پیچیده کرده ،چرا به KEY_CATEGORY گیر میده

مگه دیتابیس فقط 8 فلید نمایش میده چرا 9 تا نه؟

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

[shcode=java]

package ir.DB.AvayEntezar432.Data_base_av;

import java.io.FileNotFoundException;

public class DBAdapterAvay {

   

    public static final String KEY_ID = "id";

    public static final String KEY_NAME_SOUND = "namesound";

    public static final String KEY_NAME_ARTIST = "nameartist";

    public static final String KEY_CODE_SONG = "codesong";

    public static final String KEY_URL = "url";

    public static final String KEY_SAVE_SOUND = "savesound";

    public static final String KEY_BOOK_MARK = "bookmark";

    public static final String KEY_TOPIC = "topic";

    public static final String KEY_CATEGORY = "category";

   

    public static final String DATABASE_NAME = "songdb";

    public static final String DATABASE_TABLE_ALL = "soundall";

   

   

    public static final String TAG = "Full Soft Ava";

 

    static final String CREATE_TABLE = "CREATE  TABLE "

            + DATABASE_TABLE_ALL + " (" + KEY_ID

            + " INTEGER PRIMARY KEY  NOT NULL , " + KEY_NAME_SOUND + " TEXT, "

            + KEY_NAME_ARTIST + " TEXT, " + KEY_CODE_SONG + " NUMERIC, " + KEY_URL

            + " TEXT, " + KEY_SAVE_SOUND + " TEXT, "

            + KEY_BOOK_MARK + " INTEGER NOT NULL  DEFAULT 0, " + KEY_TOPIC

            + " TEXT, " + KEY_CATEGORY +  "TEXT)";

   

   

  

    String[] yek_name_all = new String[] { KEY_ID, KEY_NAME_SOUND, KEY_NAME_ARTIST, KEY_CODE_SONG,

            KEY_URL, KEY_SAVE_SOUND, KEY_BOOK_MARK, KEY_TOPIC ,KEY_CATEGORY };

   

    final Context context;

    DatabaseHelper DBHelper;

    SQLiteDatabase db;

    public DBAdapterAvay(Context ctx) {

        this.context = ctx;

        DBHelper = new DatabaseHelper(context);

   

    }

   

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {

            // DATABASE_VERSION = 1

            super(context, DATABASE_NAME, null, 1);

           

        }

        @Override

        public void onCreate(SQLiteDatabase db) {

           

            try {

                db.execSQL(CREATE_TABLE);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        @Override

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

            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "

                    + newVersion + ", which will destroy all old data");

            Log.i(DBAdapterAvay.TAG, "DBHelper.open()....");

            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_ALL);

            onCreate(db);

        }

    }

    public DBAdapterAvay open() throws SQLException {

        db = DBHelper.getWritableDatabase();

       

        return this;

    }

    public void close() {

        DBHelper.close();

   

    }

   

  

        return db.insert(DATABASE_TABLE, null, initialValues);

    }*/

    // ---retrieves all the contacts---

    public List getAllContacts() {

        Cursor cursor = db.query(DATABASE_TABLE_ALL, yek_name_all, null, null, null,

                null, null);

        List avashha = cursorToList(cursor);

        Log.i(DBAdapterAvay.TAG, " getAllContacts()....");

        return avashha;

    }

   

  

   

    private List cursorToList(Cursor cursor) {

        List avash = new ArrayList();

        if (cursor.getCount() > 0) {

            while (cursor.moveToNext()) {

                AvaSh ava = new AvaSh();

                ava.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));

                ava.setNameSound(cursor.getString(cursor.getColumnIndex(KEY_NAME_SOUND)));

                ava.setNameArtist(cursor.getString(cursor.getColumnIndex(KEY_NAME_ARTIST)));

                ava.setCodeSound(cursor.getString(cursor.getColumnIndex(KEY_CODE_SONG)));

                //ava.setCodeSound(cursor.getInt(cursor.getColumnIndex(KEY_CODE_SONG)));

                ava.setUrl(cursor.getString(cursor.getColumnIndex(KEY_URL)));

                ava.setSaveSound(cursor.getString(cursor.getColumnIndex(KEY_SAVE_SOUND)));

                ava.setBookMark(cursor.getInt(cursor.getColumnIndex(KEY_BOOK_MARK)));

                ava.SetTopic(cursor.getString(cursor.getColumnIndex(KEY_TOPIC)));

                ava.setCategory(cursor.getString(cursor.getColumnIndex(KEY_CATEGORY)));

                avash.add(ava);

                Log.i(DBAdapterAvay.TAG, " List add shod..ffff");

            };

        }

       

        Log.i(DBAdapterAvay.TAG, " List cursorToList...");

        return avash;

       

    }

   

    public AvaSh getContact(int new_id) throws SQLException {

       

        List avash = new ArrayList();

       

        Cursor cursor = db.query(true, DATABASE_TABLE_ALL, yek_name_all, KEY_ID

                + " == '" + new_id + "'", null, null, null, null, null);

        AvaSh nama = new AvaSh();

        if (cursor != null) {

            cursor.moveToFirst();

      

           

            avash = cursorToList(cursor);

        }

        Log.i(TAG, nama.getNameSound() + ",database");

     

        return avash.get(0);

    }

    // /search

    public List findContacts(String nam, String row)

            throws SQLException {

        Cursor cursor = db.query(true, DATABASE_TABLE_ALL, yek_name_all, row

                + " LIKE '%" + nam + "%'", null, null, null, null, null);

        List nams = cursorToList(cursor);

        return nams;

    }

    //  BookMark

    public List findFAVContacts() throws SQLException {

        Cursor cursor = db.query(true, DATABASE_TABLE_ALL, yek_name_all, KEY_BOOK_MARK

                + " == " + 1 + "", null, null, null, null, null);

        List nams = cursorToList(cursor);

        Log.i(DBAdapterAvay.TAG, " BookMark....");

        return nams;

    }

   

    public List findKhandeContacts() throws SQLException {

        Cursor cursor = db.query(true, DATABASE_TABLE_ALL, yek_name_all, KEY_BOOK_MARK

                + " == " + 1 + "", null, null, null, null, null);

        List nams = cursorToList(cursor);

        return nams;

    }

    // ---updates a contact---

    public boolean updateContact(AvaSh up_ava) {

        ContentValues argsa = new ContentValues();

            argsa.put(KEY_ID, up_ava.getId());

            argsa.put(KEY_NAME_SOUND, up_ava.getNameSound());

            argsa.put(KEY_NAME_ARTIST, up_ava.getNamArtist());

            argsa.put(KEY_CODE_SONG, up_ava.getCodeSound());

            argsa.put(KEY_URL, up_ava.getURL());

            argsa.put(KEY_SAVE_SOUND, up_ava.getSaveSound());

            argsa.put(KEY_BOOK_MARK, up_ava.getBookMark());

            argsa.put(KEY_TOPIC, up_ava.getTopic());

            argsa.put(KEY_CATEGORY, up_ava.getCategory());

            Log.i(DBAdapterAvay.TAG, " updateContact(AvaSh up_nam)....");

        return db.update(DATABASE_TABLE_ALL, argsa, KEY_ID + "=" + up_ava.getId(),

                null) > 0;

    }

}

[/shcode][/align]

[/align]

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

سلام

يك بار كد ها رو كامل بزار

بعد برنامه رو حذف كن و دوباره نصب ن ببين حل شده؟

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

سلام

نه ساسان جان، بازم حل نشد

یک چیز جا مانده، که نگفته بودم، ادامه نوشته این خواستم بنویسم.

....اینکه خیلی عجیبه، مشکل از بس پیچیده کرده ،چرا به KEY_CATEGORY گیر میده....

وقتی برنامه رو حذف می کنم، و  سپس از دوباره اجرا می کنم، باز خطای no such column: category میاد، مجبورم KEY_CATEGORY در کد String[] yek_name_all  و تابع cursorToList(Cursor cursor) حذف  کنم، تا درست بشه

چرا اینجوریه که؟ آخه فیلد KEY_CATEGORY حیاتی است

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

اره ساسان جان

از قبل اضافه شده بود

وقتی KEY_CATEGORY در  کد String[] yek_name_all  و تابع cursorToList(Cursor cursor) حذف  کنم، درست میشه، ولی بعد از اجرا در لیست ویو مربوط به KEY_CATEGORY  نتیجه null نشون میده

بعدش اگر KEY_CATEGORY در String[] yek_name_all  و تابع cursorToList(Cursor cursor) برمی گردونم، و سپس اجرا می کنم بدون اینکه اون برنامه در گوشی قبل ایجاد شده بود، پاک کنم، راحت نمایش داد، اگر اون برنامه پاکش کنم، همه چه خراب میشه

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

سلام

دسترسی برای چی؟

متوجه نمیشم این دسترسی که چه ربطی به sqlite داره؟

این دسترسی use prosision گفتی کدام باید انتخاب کنم؟

همون Provider_read_....

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

سلام

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

توجه وقتی برای اولین بار اجرا می کنید، فایل دیتابیس در گوشی ذخیره میشه

اجرا کنید

اگر  در logCat خطای  (1) no such column: category  اومد

این کد ها رو امتحان کنید، KEY_CATEGORY رو در کد زیر حذف کنید

[shcode=java]

    String[] yek_name_all = new String[] { KEY_ID, KEY_NAME_SOUND, KEY_NAME_ARTIST, KEY_CODE_SONG,

            KEY_URL, KEY_SAVE_SOUND, KEY_BOOK_MARK, KEY_TOPIC ,KEY_CATEGORY };

[/shcode]

و  کد [shcode=java]ava.setCategory(cursor.getString(cursor.getColumnIndex(KEY_CATEGORY)));[/shcode]

 در کد زیر پیدا کنید، حذف یا اولش سم // اضافه کنید

[shcode=java]

    private List cursorToList(Cursor cursor) {

        List avash = new ArrayList();

        if (cursor.getCount() > 0) {

            while (cursor.moveToNext()) {

                AvaSh ava = new AvaSh();

                ava.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));

                ava.setNameSound(cursor.getString(cursor.getColumnIndex(KEY_NAME_SOUND)));

                ava.setNameArtist(cursor.getString(cursor.getColumnIndex(KEY_NAME_ARTIST)));

                ava.setCodeSound(cursor.getString(cursor.getColumnIndex(KEY_CODE_SONG)));

                //ava.setCodeSound(cursor.getInt(cursor.getColumnIndex(KEY_CODE_SONG)));

                ava.setUrl(cursor.getString(cursor.getColumnIndex(KEY_URL)));

                ava.setSaveSound(cursor.getString(cursor.getColumnIndex(KEY_SAVE_SOUND)));

                ava.setBookMark(cursor.getInt(cursor.getColumnIndex(KEY_BOOK_MARK)));

                ava.SetTopic(cursor.getString(cursor.getColumnIndex(KEY_TOPIC)));

                ava.setCategory(cursor.getString(cursor.getColumnIndex(KEY_CATEGORY)));

                avash.add(ava);

            };

        }

        return avash;  

    }

[/shcode]

و سپس اجرا کنید

متوجه می شید که اجرا شده، اما در لیست ویو مربوط Catagory نوشته null نمایش میده

بعد از دوباره کد ها رو که حذف کردیم، برگردانید، بعد از اجرا راحت نمایش میده!!!!

راه حلش چیه؟

ممنون

TestData.zip

TestData.zip

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

دوست عزيز من تست كردم مشكلي نداشت

AA,BB,CC,DD

مقدارشون بود

براي اينكار شما پروژتون رو

Project > Clean

پروژه رو انتخاب كنيد و اينو انجام بده

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

یعنی بار اول هیچی خطای نیومد؟

بار اول بدون مشکلی اجرا شد؟؟؟!!!

Project > Clean انجام دادم بازم نشد، حتی all celan projects

یعنی شبیه کش است؟ که گیر میده؟

خیلی عجیبه که برای شما راحت اجرا شد!! و برای من نه!

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

من اينكارا رو كردم

اول گير داد پريد بيرون ولي من اومد از ديتابيست تمام موارد  به همون فيلد ارور ميداد رو پاك كرد و پروژه رو clean كردم

و بعد در اكتيويتي ديتابيست ctrl + z زدم تا تمام حذفيات برگرده و اجرا كردم اجرا شد و در ضمن اون دسترسي ها رو هم به برنامه دادم قبل

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

یعنی هچ کدی تغییری ندادی؟

منظورت فیلد Category پاک کردی؟

منظورت کدوم فیلد؟ متوجه نمیشم؟

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

من گیجم!! الان باید چی کار کنم؟

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

شما گفتين مشكل ايجاد ميكنه

من منظورم همون بود

ميشه تا n  تا فيلد داشت ولي مشكل جايي ديگست

الان ميرم ميبينمش اگه تونستم برات حلش ميكنم

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

سلام داداش شما برنامه رو حذف كن

و اين كد رو با كد داري جايگزين كن

static final String CREATE_TABLE = "CREATE TABLE " + DATABASE_TABLE_ALL+ " (" + KEY_ID + " INTEGER PRIMARY KEY NOT NULL , "+ KEY_NAME_SOUND + " TEXT, " + KEY_NAME_ARTIST + " TEXT, "+ KEY_CODE_SONG + " NUMERIC, " + KEY_URL + " TEXT, "+ KEY_SAVE_SOUND + " TEXT, " + KEY_BOOK_MARK+ " INTEGER NOT NULL DEFAULT 0, " + KEY_TOPIC + " TEXT, "+ KEY_CATEGORY + " TEXT)";

حالا برنامه رو  run كن ببين!

يادت باشه با زدن ctrl +shift + f كد ها مرتب ميشه و عيب يابي راحت.

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...