خطای کد من کجاست؟؟؟
سلام دوستان
میخواستم بدونم خطای کد من کجاست که برنامم کرش میکنه
ظاهرا همه چی رو درست نوشتم
package com.example.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class dbopenhelper extends SQLiteOpenHelper {
public static final String dbname = "database";
public static final String tblname = "tbluser";
public static final String cid = "id";
public static final String cname = "name";
public static final String cuser = "user";
public static final String cpass = "password";
public static final String createtbl = "CREATE TABLE" + tblname + "(" + cid
+ "INTEGER PRIMARYKEY AUTOINCREMENT," + cname + "TEXT," + cuser
+ "TEXT," + cpass + "TEXT);";
public dbopenhelper(Context context) {
super(context, dbname, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createtbl);
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
db.execSQL("DROP TABLE IF EXIST"+tblname);
onCreate(db);
}
}
شما برای ساخت table بعضی از دستورات رو به هم چسبوندید چند تا کاراکتر اضافه گذاشتید و بعضی از دستورات رو جا گذاشتید. کد زیر رو به جای کدتون کپی کنید:
public static final String createtbl = "CREATE TABLE IF NOT EXISTS " + tblname + " (" + cid
+ " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, " + cname + " TEXT, " + cuser
+ " TEXT, " + cpass + " TEXT)";
برای حذف table هم کدها رو سرهم نوشتید و به جای EXISTS نوشتید EXIST که باید به جاش کد زیر رو بنویسید:
db.execSQL("DROP TABLE IF EXISTS "+tblname);
پیام های log cat :
کدهای اصلی همونان که بالا گذاشتم
پیام log cat هم که گذاشتم
این کد ها هم توی یه کلاس دیگه برای فراخوانی نوشتم همین :
package com.mohammad.dbtest.app.course.torobche;
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity {
private dbopenhelper dbm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dbm = new dbopenhelper(this);
dbm.getWritableDatabase();
}
}
کد شما به این شکله:
"CREATE TABLEtbluser(idINTEGER, ...)"
که باید اینجوری باشه:
"CREATE TABLE tbluser (id INTEGER, ...)"
ببینین مثلا این کدی که شما نوشتین (حالت غلط ) نتیجه شماره ۱ رو میده که اشتباه هست و به جاش باید حالت (درست) رو بنویسین که نتیجه درست میده :
Halate Ghalat :
public static final String createtbl ="CREATE TABLE"+ tblname
Natije 1 (natije ghalat) :
CREATE TABLEtblname
Halate Dorost :
public static final String createtbl ="CREATE TABLE "+ tblname
Natije 2 (natije dorost) :
CREATE TABLE tblname
در حقیقت اشتباه شما اینه که بعد از CREATE TABLE و خیلی جاهای دیگه Space (فاصله نزاشتی . ) و باید بزاری تا کد درست در بیاد . کد اول رو SQL متوجه نمیشه چون TABLEtblname رو یه کلمه میبینه و این کلمه واسش تعریف نشده ولی کد دوم رو میتونه تشخیص بده چون به این صورت درکش میکنه و به عنوان ۳ تا کلمه جدا از هم میبینتش :
CREATE TABLE tblname
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .