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

خطای SQLiteException

مدیریت گفتگو
صادق حمزه ای 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان

برنامه من طبق گزارش های که دریافت میکنم از هر 1000 نصب تقربا 50 نصب با خطای SQLiteException مواجعه میشود

کدهای مربوط به کلاس G

 public class G extends Application {

    public static Context                 context;
    public static SQLiteDatabase          database;
    public static final String            DIR_SDCARD        = Environment.getExternalStorageDirectory().getAbsolutePath();
    public static final String            DIR_DATABASEONVAN = DIR_SDCARD + "/Android/data/com.kohanweb.bestnovels/";



    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

        new File(G.DIR_DATABASEONVAN + "/data").delete();

        File file = new File(DIR_DATABASEONVAN);
        file.mkdirs();

        File data = new File(DIR_DATABASEONVAN + "/data");
        boolean isExist = data.exists();
        if (isExist == false) {
            AssetManager assetManager = context.getAssets();
            InputStream inputStream;
            try {
                inputStream = assetManager.open("data");
                HelperIO.copyFile(inputStream, DIR_DATABASEONVAN + "data");
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }

database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASEONVAN + "/data", null);

    }

}

کدهای مربوط به کوئری از دیتابیس که خطل میده

 

 
Cursor cursor = G.database.rawQuery("SELECT * FROM mozoha ", null);      
G.onvans.clear(); while (cursor.moveToNext()) { StructOnvans onvans = new StructOnvans(); onvans.id = cursor.getInt(cursor.getColumnIndex("id")); onvans.txt = cursor.getString(cursor.getColumnIndex("onvan")); onvans.tedad = cursor.getInt(cursor.getColumnIndex("tedad")); G.onvans.add(onvans); } cursor.close(); adapter = new ListBookMozo(G.onvans);
ltvOnvan.setAdapter(adapter); adapter.notifyDataSetChanged();

 

و لاگ خطا

 

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kohanweb.bestnovels/com.kohanweb.bestnovels.ListMozo}: android.database.sqlite.SQLiteException: no such table: mozoha (code 1): , while compiling: SELECT * FROM mozoha
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2372)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
	at android.app.ActivityThread.access$600(ActivityThread.java:169)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1388)
	at android.os.Handler.dispatchMessage(Handler.java:107)
	at android.os.Looper.loop(Looper.java:194)
	at android.app.ActivityThread.main(ActivityThread.java:5433)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:525)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:924)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691)
	at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: no such table: mozoha (code 1): , while compiling: SELECT * FROM mozoha
	at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
	at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:888)
	at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:499)
	at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
	at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
	at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
	at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
	at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
	at com.kohanweb.bestnovels.ListMozo.onCreate(ListMozo.java:90)
	at android.app.Activity.performCreate(Activity.java:5179)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2336)
	... 11 more

 

ممنون میشم راهنمایی بفرمایید .

 

 

 

نظرات

Criss 10 سال پیش
احتمال داره کپی شدن دیتابیس روی کارت داخلی ممکن نباشه و لازمه که پرمیژن کارت حافظه خارجی هم اضافه کنید ، همچنین دسترسی برای ویرایش ، و همچنین اینکه ممکنه این 50% روی اندورید 6 باشه که پرمیژن ها باید توسط کاربر تایید بشه و اگر اونهارو تایید نکنه !
aminaryan 10 سال پیش
درسته به خاطر اندروید 6 هست.
صادق حمزه ای 10 سال پیش
ممنون از پاسخ دوستان اما بخاطر اندروید 6 نیست چون روی اندروید پایین تر از 6 کرش اتفاق افتاده و باعث متوقف شدن برنامه میشه.
k112 10 سال پیش
چیزی که مشخصه rawQuery چیزی رو برنمیگردونه!! همین باعث میشه در خط بعدی دچار مشکل بشید ... حالا چرا برنمیگردونه رو باید پیدا کنید.
کاشی زاده 10 سال پیش
مشکل مربوط به عدم دسترسی یا عدم وجود Table مورد نظر هست . احتمالا خطایی در ساخته شده دیتابیس و یا ایجاد جدول وجود داره و یا ممکن هست کپی کردن فایل دیتابیس ناقص انجام بشه .البته آدرس دهی که انجام دادید غلط هست و به مسیر اشتباهی اشاره داره ، که مطمئنا از همین هست .
صادق حمزه ای 10 سال پیش
جناب کاشی زاده آدرس دهی به چه صورت باید باشه؟

پاسخ‌ها 1

کاشی زاده 10 سال پیش

جاهایی که (*) گذاشتم خطا وجود داره .

 public class G extends Application {

public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASEONVAN = DIR_SDCARD + "/Android/data/com.kohanweb.bestnovels/";



@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();

new File(G.DIR_DATABASEONVAN + "/data").delete(); // /Android/data/com.kohanweb.bestnovels//data (* //data)

File file = new File(DIR_DATABASEONVAN);
file.mkdirs(); // /Android/data/com.kohanweb.bestnovels/ (Directory Created)

File data = new File(DIR_DATABASEONVAN + "/data"); // /Android/data/com.kohanweb.bestnovels//data (* //data)
boolean isExist = data.exists();
if (isExist == false) {
AssetManager assetManager = context.getAssets();
InputStream inputStream;
try {
inputStream = assetManager.open("data");
HelperIO.copyFile(inputStream, DIR_DATABASEONVAN + "data");
}
catch (IOException e) {
e.printStackTrace();
}
}

database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASEONVAN + "/data", null); // /Android/data/com.kohanweb.bestnovels//data (* //data)

نظرات

صادق حمزه ای 10 سال پیش
منظور شما این هست که " / " قبل از data باید حذف شود.؟
کاشی زاده 10 سال پیش
بله ، آدرس شما / اضافی داره که باید حذف بشه . بعد از اینکه تغییرات رو اعمال کردید چک کنید آیا فایل ساخته میشه یا نه .
صادق حمزه ای 10 سال پیش
فایل که ساخته میشه و مشکلی در دستگاه خودم نداره .همان طور که در ابتدای سوال عرض کردم در هر 1000 دستگاه تقریبا 50 دستگاه با این خطا مواجع میشن که شاید مشکل از دستگاه کاربران باشه.ممنون از پاسختون
کاشی زاده 10 سال پیش
آدرس رو اصلاح کنید شاید حالت استثنایی باشه و خود سیستم هندل کنه تو شرایطی اما تو برخی شرایط این امکان وجود نداشته باشه .

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