آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

خطای SQLiteException

صادق حمزه ای  10 سال پیش  10 سال پیش
0 0

سلام دوستان

برنامه من طبق گزارش های که دریافت میکنم از هر 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

 

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

 

 

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

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

 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)
0 0
منظور شما این هست که " / " قبل از data باید حذف شود.؟ (10 سال پیش)
+1 0
بله ، آدرس شما / اضافی داره که باید حذف بشه . بعد از اینکه تغییرات رو اعمال کردید چک کنید آیا فایل ساخته میشه یا نه . (10 سال پیش)
0 0
فایل که ساخته میشه و مشکلی در دستگاه خودم نداره .همان طور که در ابتدای سوال عرض کردم در هر 1000 دستگاه تقریبا 50 دستگاه با این خطا مواجع میشن که شاید مشکل از دستگاه کاربران باشه.ممنون از پاسختون (10 سال پیش)
+1 0
آدرس رو اصلاح کنید شاید حالت استثنایی باشه و خود سیستم هندل کنه تو شرایطی اما تو برخی شرایط این امکان وجود نداشته باشه . (10 سال پیش)

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