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

ارور no such table: در دیتابیس اندروید


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

سلام

اخیر یه مشکل عجیب توی ساخت دیتابیس برخوردم

کد زیر برای ساخت دیتابیسه (کلاسی که خودم ساختم)

package com.sadegh.mte.database;


import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter {

String[] AllColumnForStudents = {
	KEY_ROWID,
	KEY_NAME,
	KEY_LEVEL,
	KEY_LASTBOOK,
	KEY_CLASSID,
	KEY_START_CLASSDATE_YEAR,
	KEY_START_CLASSDATE_MONTH,
	KEY_START_CLASSDATE_DAY,
	KEY_END_CLASSDATE_YEAR,
	KEY_END_CLASSDATE_MONTH,
	KEY_END_CLASSDATE_DAY,
	KEY_CLASSTIME,
	KEY_DESC,
	KEY_IMAGE
};

static final String TAG = "sadegh";

static final String KEY_ROWID = "_id";
   static final String KEY_NAME = "name";
   static final String KEY_LEVEL = "level";
   static final String KEY_LASTBOOK = "lastbook";
   static final String KEY_CLASSID = "classid";
   static final String KEY_START_CLASSDATE_YEAR = "classdate_year";
   static final String KEY_START_CLASSDATE_MONTH = "classdate_month";
   static final String KEY_START_CLASSDATE_DAY = "classdate_day";
   static final String KEY_END_CLASSDATE_YEAR = "classdate_year";
   static final String KEY_END_CLASSDATE_MONTH = "classdate_month";
   static final String KEY_END_CLASSDATE_DAY = "classdate_day";
   static final String KEY_CLASSTIME = "classtime";
   static final String KEY_DESC = "description";
   static final String KEY_IMAGE = "image";

   static final String DATABASE_NAME = "db";
   static final String DATABASE_STUDENTS_TABLE = "students";
   static final int DATABASE_VERSION = 2;

   static final String CREATE_STUDENTS_TABLE =
   		"CREATE TABLE IF NOT EXISTS " + DATABASE_STUDENTS_TABLE  +"("+KEY_ROWID+ " integer primary key autoincrement, "
           + KEY_NAME+ " TEXT,"
           + KEY_LEVEL+ " TEXT,"
           + KEY_LASTBOOK+ " TEXT,"
           + KEY_CLASSID+ " TEXT,"
           + KEY_START_CLASSDATE_YEAR+ " TEXT,"
           + KEY_START_CLASSDATE_MONTH+ " TEXT,"
           + KEY_START_CLASSDATE_DAY+ " TEXT,"
           + KEY_END_CLASSDATE_YEAR+ " TEXT,"
           + KEY_END_CLASSDATE_MONTH+ " TEXT,"
           + KEY_END_CLASSDATE_DAY+ " TEXT,"
           + KEY_CLASSTIME+ " TEXT,"
           + KEY_DESC+ " TEXT,"
           + KEY_IMAGE+" TEXT);";

   final Context context;
   DatabaseHelper DBHelper;
   SQLiteDatabase db;

   public DBAdapter(Context ctx) {
       this.context = ctx;
       DBHelper = new DatabaseHelper(context);
   }

   private static class DatabaseHelper extends SQLiteOpenHelper {

	public DatabaseHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		try {
               db.execSQL(CREATE_STUDENTS_TABLE);
           } catch (SQLException e) {
               e.printStackTrace();
           }
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_STUDENTS_TABLE);
		Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
				+ newVersion + ", which will destroy all old data");
		onCreate(db);
	}

   }
   // --- open database ---
   public DBAdapter open() {
   	db = DBHelper.getWritableDatabase();
   	return this;
   }
   // --- close database ---
   public void close() {
       DBHelper.close();
   }

   //---insert a student into the database---
   public long insertStudent(String name,
   		String level,
   		String lastbook,
   		String classid,
   		String startclassdateY,
   		String startclassdateM,
   		String startclassdateD,
   		String endclassdateY,
   		String endclassdateM,
   		String endclassdateD,
   		String classtime,
   		String description,
   		String image) {
   	ContentValues initialValues = new ContentValues();
   	initialValues.put(KEY_NAME,name);
   	initialValues.put(KEY_LEVEL,level);
   	initialValues.put(KEY_LASTBOOK,lastbook);
   	initialValues.put(KEY_CLASSID,classid);
   	initialValues.put(KEY_START_CLASSDATE_YEAR,startclassdateY);
   	initialValues.put(KEY_START_CLASSDATE_MONTH,startclassdateM);
   	initialValues.put(KEY_START_CLASSDATE_DAY,startclassdateD);
   	initialValues.put(KEY_END_CLASSDATE_YEAR,endclassdateY);
   	initialValues.put(KEY_END_CLASSDATE_MONTH,endclassdateM);
   	initialValues.put(KEY_END_CLASSDATE_DAY,endclassdateD);
   	initialValues.put(KEY_CLASSTIME,classtime);
   	initialValues.put(KEY_DESC,description);
   	initialValues.put(KEY_IMAGE,image);

   	return db.insert(DATABASE_STUDENTS_TABLE, null, initialValues);
   }

   //---deletes a particular student---
   public boolean deleteContact(String name,String table) {
   	return db.delete(table, KEY_NAME + " LIKE '" + name + "'", null) > 0;
   }

   public List getAllStudents() {
   	Cursor cursorAll = db.query(DATABASE_STUDENTS_TABLE, AllColumnForStudents, null, null, null, null, null);
   	List studentsList = cursorToList(cursorAll);
   	return studentsList;
   }

   private List cursorToList(Cursor cursor) {
   	List studentsList = new ArrayList();
   	if(cursor.getCount() > 0) {
   		while(cursor.moveToNext()) {
   			Student student = new Student();
   			student.setId(cursor.getString(cursor.getColumnIndex(KEY_ROWID)));
   			student.setName(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
   			student.setLevel(cursor.getString(cursor.getColumnIndex(KEY_LEVEL)));
   			student.setLastBook(cursor.getString(cursor.getColumnIndex(KEY_LASTBOOK)));
   			student.setClassId(cursor.getString(cursor.getColumnIndex(KEY_CLASSID)));
   			student.setStartClassDateYear(cursor.getString(cursor.getColumnIndex(KEY_START_CLASSDATE_YEAR)));
   			student.setStartClassDateMonth(cursor.getString(cursor.getColumnIndex(KEY_START_CLASSDATE_MONTH)));
   			student.setStartClassDateDay(cursor.getString(cursor.getColumnIndex(KEY_START_CLASSDATE_DAY)));
   			student.setEndClassDateYear(cursor.getString(cursor.getColumnIndex(KEY_END_CLASSDATE_YEAR)));
   			student.setEndClassDateMonth(cursor.getString(cursor.getColumnIndex(KEY_END_CLASSDATE_MONTH)));
   			student.setEndClassDateDay(cursor.getString(cursor.getColumnIndex(KEY_END_CLASSDATE_DAY)));
   			student.setClassTime(cursor.getString(cursor.getColumnIndex(KEY_CLASSTIME)));
   			student.setDescription(cursor.getString(cursor.getColumnIndex(KEY_DESC)));
   			student.setImage(cursor.getString(cursor.getColumnIndex(KEY_IMAGE)));

   			studentsList.add(student);
   		}
   	}
   	return studentsList;
   }

   public Cursor getStudent(String name ,String table) {
   	Cursor studentCursor = db.query(true, table, AllColumnForStudents, KEY_NAME + " LIKE '" + name + "'", null, null, null, null, null);
   	if(studentCursor != null) {
   		studentCursor.moveToFirst();
   	}
   	return studentCursor;
   }

   //---search---
   public List findStudentsFromName(String name, String table) {
   	Cursor cursor = db.query(true, table, AllColumnForStudents, KEY_NAME + " LIKE '%" + name + "%'", null, null, null, null, null);
   	List studentsList = cursorToList(cursor);
   	return studentsList;
   }

   public boolean updateStudent(long rowId,
   		String name,
   		String level,
   		String lastbook,
   		String classid,
   		String startclassdateY,
   		String startclassdateM,
   		String startclassdateD,
   		String endclassdateY,
   		String endclassdateM,
   		String endclassdateD,
   		String classtime,
   		String description,
   		String image) {
   ContentValues initialValues = new ContentValues();
   initialValues.put(KEY_NAME,name);
   initialValues.put(KEY_LEVEL,level);
   initialValues.put(KEY_LASTBOOK,lastbook);
   initialValues.put(KEY_CLASSID,classid);
   initialValues.put(KEY_START_CLASSDATE_YEAR,startclassdateY);
   initialValues.put(KEY_START_CLASSDATE_MONTH,startclassdateM);
   initialValues.put(KEY_START_CLASSDATE_DAY,startclassdateD);
   initialValues.put(KEY_END_CLASSDATE_YEAR,endclassdateY);
   initialValues.put(KEY_END_CLASSDATE_MONTH,endclassdateM);
   initialValues.put(KEY_END_CLASSDATE_DAY,endclassdateD);
   initialValues.put(KEY_CLASSTIME,classtime);
   initialValues.put(KEY_DESC,description);
   initialValues.put(KEY_IMAGE,image);

   return db.update(DATABASE_STUDENTS_TABLE, initialValues, KEY_ROWID + "=" + rowId, null) > 0;
   }
}

 توی این پروژه رد صفحه ی اول وقتی روی دکمه کلیک می کنم باید به یه صفحه ی دیگه بره و دیتابیس رو روی لیست ویو بندازه...با استفاده از متد getAllStudents()

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

Cursor cursorAll = db.query(DATABASE_STUDENTS_TABLE, AllColumnForStudents, null, null, null, null, null);

insert هم کردم ولی فرقی نکرده، هر جا که نیاز به نام table باشه خطا می ده و می گه همچین table ای وجود نداره!!!!!!!!

لطفا کمک:huh:

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

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

شما آرایه AllColumnForStudents رو بعد از اینکه به نام فیلدهات مقدار دادی تعریف کن

اگر میخوای تو متد query تمام ستون ها رو انتخاب کنی میتونی به جای اون AllColumnForStudents که گذاشتی null بزاری تا همرو بگیره

موفق باشید

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

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

شما آرایه AllColumnForStudents رو بعد از اینکه به نام فیلدهات مقدار دادی تعریف کن

اگر میخوای تو متد query تمام ستون ها رو انتخاب کنی میتونی به جای اون AllColumnForStudents که گذاشتی null بزاری تا همرو بگیره

موفق باشید

ممنون

AllColumnForStudents گذاشتم بعد فیلد ها ، بازم همون ارور رو داد. جاش null هم گذاشتم فرقی نکرد

باید چی کار کنم؟ مشکل از کجاست؟ چرا میگه این تیبل نیس؟:huh:

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

سلام

یک بار برنامه رو پاک کنید دوباره نصب بشه !

اینطوری میشناسه !

اگر اینطوری نشناخت و از کد دیتابیس خارجی استفاده کردید !

باید جدول metadata رو به جدولهاتون اضافه کنید .

تو گوگل سرچ بزنید میاد .

موفق باشید

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

سلام

یک بار برنامه رو پاک کنید دوباره نصب بشه !

اینطوری میشناسه !

اگر اینطوری نشناخت و از کد دیتابیس خارجی استفاده کردید !

باید جدول metadata رو به جدولهاتون اضافه کنید .

تو گوگل سرچ بزنید میاد .

موفق باشید

ممنون

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

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

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

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

پروژه رو هم گذاشتم اگه نیاز شد...:blush:

لطفا راهنمایی کنید

ManageTeachingEnglish.zip

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

همونطور که آقای hosseinakbari گفتن بعد از حذف و نصب دوباره برنامه باید مشکل رفع بشه

شما یه نگاه به لینکای زیر بنداز

[align=left]http://stackoverflow.com/questions/9916590/android-sqlite-no-such-table-exception[/align]

[align=left]http://stackoverflow.com/questions/6554269/android-sqlite-no-such-table-error[/align]

[align=left]http://stackoverflow.com/questions/19003489/androidsqlite-error-no-such-table[/align]

[align=left]http://stackoverflow.com/questions/21853135/android-sqlite-database-no-such-table[/align]

[align=left]https://developer.appcelerator.com/question/137123/sqlite-no-such-table-though-table-exists[/align]

[align=left]https://developer.appcelerator.com/question/176945/error-with-select-table-no-such-table[/align]

[align=left]http://peter.grman.at/android-sqlite-exception-no-such-table[/align]

[align=right]لینک آخرو حتما نگاه کن[/align]

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

همونطور که آقای hosseinakbari گفتن بعد از حذف و نصب دوباره برنامه باید مشکل رفع بشه

شما یه نگاه به لینکای زیر بنداز

[align=left]http://stackoverflow.com/questions/9916590/android-sqlite-no-such-table-exception[/align]

[align=left]http://stackoverflow.com/questions/6554269/android-sqlite-no-such-table-error[/align]

[align=left]http://stackoverflow.com/questions/19003489/androidsqlite-error-no-such-table[/align]

[align=left]http://stackoverflow.com/questions/21853135/android-sqlite-database-no-such-table[/align]

[align=left]https://developer.appcelerator.com/question/137123/sqlite-no-such-table-though-table-exists[/align]

[align=left]https://developer.appcelerator.com/question/176945/error-with-select-table-no-such-table[/align]

[align=left]http://peter.grman.at/android-sqlite-exception-no-such-table[/align]

[align=right]لینک آخرو حتما نگاه کن[/align]

ممنون

رفتم دقیق چک کردم فهمیدم که اسم ستون هایی که توی فیلد ها تعریف کرده بودم تکراریه:

static final String KEY_ROWID = "_id";

    static final String KEY_NAME = "name";

    static final String KEY_LEVEL = "level";

    static final String KEY_LASTBOOK = "lastbook";

    static final String KEY_CLASSID = "classid";

//////    static final String KEY_START_CLASSDATE_YEAR = "classdate_year";

/////////    static final String KEY_START_CLASSDATE_MONTH = "classdate_month";

///////    static final String KEY_START_CLASSDATE_DAY = "classdate_day";

>>>>>>>    static final String KEY_END_CLASSDATE_YEAR = "classdate_year";

  >>>>>>  static final String KEY_END_CLASSDATE_MONTH = "classdate_month";

>>>>>    static final String KEY_END_CLASSDATE_DAY = "classdate_day";

    static final String KEY_CLASSTIME = "classtime";

    static final String KEY_DESC = "description";

    static final String KEY_IMAGE = "image";

بعد الان که دوباره اجرا می کنم خطای nullpointer می ده روی لیست ویو...

import java.util.List;
import com.sadegh.mte.R;
import com.sadegh.mte.database.DBAdapter;
import com.sadegh.mte.database.Student;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class StudentsActivity extends ListActivity {

static final String DATABASE_STUDENTS_TABLE = "students";

Button add_btn, search_btn, today_btn, all_btn;
ListView list;
DBAdapter db;
List studentsList;

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.students_main);

	//add_btn = (Button) findViewById(R.id.add_btn);
	db = new DBAdapter(this);
	db.open();
	db.getAllStudents();
	refreshList();
}

@Override
protected void onPause() {
	super.onPause();
	db.close();
}

@Override
protected void onResume() {
	super.onResume();
	db.open();
	studentsList = db.getAllStudents();
	refreshList();
}

private void refreshList() {
	ArrayAdapter adapter;
	adapter = new ArrayAdapter(this,
			android.R.layout.simple_list_item_1, studentsList);
	setListAdapter(adapter);
}
}

دیباگ که کردم روی خط های آخر (روی setListAdapter(adapter);) وای میایسته

کد xml مربوطه لی اوت

    xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

       android:id="@+id/textView1overView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:layout_gravity="center_horizontal"
       android:background="#2b815a"
       android:padding="5dp"
       android:text="@string/students"
       android:textAppearance="?android:attr/textAppearanceLarge" />

       android:id="@android:id/list"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" >



 لطفا کمک! خیلی روش کار کردم ولی بازم ارور داره...:@:huh:

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

خط زیر رو به onCreate اضافه کن ببین چی میشه

list = getListView()

ممنون اضافه کردم ولی متاسفانه فرقی نکرد (دقیقا بعد از setContentView() اضافه کردم)

ارور های زیر رو می ده:

08-11 04:45:51.498: W/dalvikvm(1974): threadid=1: thread exiting with uncaught exception (group=0xb4a6bb90)
08-11 04:45:51.568: E/AndroidRuntime(1974): FATAL EXCEPTION: main
08-11 04:45:51.568: E/AndroidRuntime(1974): Process: com.sadegh.mte, PID: 1974
08-11 04:45:51.568: E/AndroidRuntime(1974): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sadegh.mte/com.sadegh.mte.students.StudentsActivity}: java.lang.NullPointerException
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread.access$700(ActivityThread.java:135)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.os.Handler.dispatchMessage(Handler.java:102)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.os.Looper.loop(Looper.java:137)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread.main(ActivityThread.java:4998)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at java.lang.reflect.Method.invoke(Method.java:515)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at dalvik.system.NativeStart.main(Native Method)
08-11 04:45:51.568: E/AndroidRuntime(1974): Caused by: java.lang.NullPointerException
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.widget.ListView.setAdapter(ListView.java:480)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ListActivity.setListAdapter(ListActivity.java:265)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at com.sadegh.mte.students.StudentsActivity.refreshList(StudentsActivity.java:53)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at com.sadegh.mte.students.StudentsActivity.onCreate(StudentsActivity.java:32)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.Activity.performCreate(Activity.java:5243)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
08-11 04:45:51.568: E/AndroidRuntime(1974): 	... 11 more

:huh::huh::huh:

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

این خط کد

 db.getAllStudents()

 که توی onCreate شما هست باید اصلاح بشه

studentsList = db.getAllStudents()

واقعا یه دنیا ممنون

حل شد............................:):angel:

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

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

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

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

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

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

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

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

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

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