簡體   English   中英

創建提供語法錯誤的sqlite數據庫時出錯

[英]Error creating a sqlite database giving syntax error

我正在使用android聯系人列表應用程序,我剛剛開始在android平台上進行開發,在我的聯系人列表應用程序中,我必須創建一個sqlite數據庫表來存儲聯系人,但我在創建sqlite數據庫時遇到了困難,這給我的logcat一個錯誤窗口,例如:“ Logcat顯示這些錯誤” sqlite返回:錯誤代碼= 1,msg =附近“,”語法錯誤“准備'CREATE TABLE Places(ID INT PRIMARY)時在0x1f14d0上出​​現故障1(在”,“附近:語法錯誤) KEY NOT NULL,名稱TEXT NOT NULL,電話TEXT NOT NULL,地址TEXT NOT NULL,網站TEXT,HOME TEXT NOT NULL,'FATAL EXCEPTION:main“ java.lang.RuntimeException:無法啟動活動ComponentInfo {com.webpreneur_contactlist / com .webpreneur_contactlist.WebpreneurActivity}:java.lang.IllegalStateException:數據庫未打開”,請幫助我

public class DBHandler extends SQLiteOpenHelper{

    private static final int DB_Version = 1;

    private static final String DB_Name = "Places";

    protected static final String Places_Table = "Places";

    String name, Address, Website,ID;
    //WebpreneurActivity Contact;
 public static final String Key_ID = "ID";
 public static final String Key_Name = "Name";
 public static final String Key_Phone = "Phone";
 public  static final String Key_Address = "Address";
public static final String Key_Website = "Website";
public  static final String Key_Home = "HOME";
public static final String PROJECTION[] = {
    Key_ID,
    Key_Name,
    Key_Address,
    Key_Phone,
    Key_Home
};

    String CREATE_PLACES_TABLE = "create table if not exists Places_Table (id integer primary key ,"+
            "name VARCHAR not null, phone VARCHAR not null, address VARCAHR not null, website VARCHAR not null,Home VARCHAR not null)";

    Context context;
    SQLiteDatabase db;

    public DBHandler(Context context) {

        super(context, DB_Name, null, DB_Version);
        Log.d("database1" ,"4");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
            Log.d("DB", "DB creationnewwwww");
                db.execSQL("CREATE TABLE  " + Places_Table + "(" +
                        Key_ID + " INT PRIMARY KEY NOT NULL," +
                        Key_Name + " TEXT NOT NULL," +
                        Key_Phone + " TEXT NOT NULL," +
                        Key_Address + " TEXT NOT NULL," +
                        Key_Website + " TEXT," +
                        Key_Home + " TEXT,");
                Log.d("DB", "DB creationnewwwwwwwwwwwwwwwwwwwwwwwwwww");
        }
        catch(SQLiteException e){
            Log.d("DB", "DB creation excptionhhhhhhhhhhhhhhh");
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

        db.execSQL("Drop Table If Exists" + Places_Table);
        onCreate(db);
    }



    public DBHandler open()
    {Log.d("DB", "DB creation 9");
     db = this.getWritableDatabase();
        onCreate(db);
    Log.d("DB", "DB creation 9");
    return this;
    }
    public void close()
    {
        db.close();

    }

    //Adding Places 
    void addPlaces( int id, String name,String phone, String address,String url){

        Log.d("DB", "DB creation 1");
        //SinglePlaceActivity single = new SinglePlaceActivity();   Log.d("DB", "DB creation 2");
        ContentValues contentValues = new ContentValues();
        Log.d("DB", "DB creation 3");
        contentValues.put(Key_ID, id);
        Log.d("DB", "DB creation 4");
        contentValues.put(Key_Name, name);
        contentValues.put(Key_Phone, phone);
        contentValues.put(Key_Address, address);
        contentValues.put(Key_Website, url);
        Log.d("DB", "DB creation 4");
        db.insert(Places_Table, null, contentValues);
        Log.d("DB", "DB creation 5555");
        //db.close();
    }

    public String getdata() {
        // TODO Auto-generated method stub
        String [] columns =new String[]{Key_ID ,Key_Name,Key_Address,Key_Website};
        Cursor c =db.query(DB_Name, columns, null, null, null, null, null);
        String Result=""; 
        int iRow=c.getColumnIndex(Key_ID);
        int iName=c.getColumnIndex(Key_Name);
        int iAddress=c.getColumnIndex(Key_Address);
        int iWebsite=c.getColumnIndex(Key_Website);
        for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
            Result=Result+c.getString(iRow)+"    "+c.getString(iName)+ "  "+c.getString(iAddress)+ "   "+c.getString(iWebsite)+ "\n";
        }

        return Result;
    }   


    public void createRow(String name, String address, String Phone, String home)
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(Key_Name, name);
        initialValues.put(Key_Address, address);
        initialValues.put(Key_Phone, Phone);
        initialValues.put(Key_Home, home);
                //pass the initialValues to the database to insert the row
        db.insert(Places_Table, null, initialValues);
    }

        public void deleteRow(long rowId){
        db.delete(Places_Table, Key_ID+"="+rowId,null);
    }

        public boolean updateRow (long rowId, String name, String address, String Phone, String home){
        ContentValues args = new ContentValues();
        args.put(Key_Name, name);
        args.put(Key_Address, address);
        args.put(Key_Phone, Phone);
        args.put(Key_Home, home);
        return db.update(Places_Table, args, Key_ID +"="+ rowId, null)>0;
    }
        public Cursor fetchRow(long rowId) throws SQLException{
            Cursor result = db.query( Places_Table, null, 
                    Key_ID + "=" + rowId, null, null, null,null);
            if ((result.equals(rowId)) || !result.isFirst()) {
                throw new SQLException("No note matching ID: " + rowId);
            }
            return result;
        }

        public Cursor fetchAllRows(){
            Log.d("Your Location4", "ok99:");
            return db.query(Places_Table, PROJECTION, 
                    null, null, null, null, null);

        }
}

更換

Key_Home + " TEXT,");

Key_Home + " TEXT)");

有一個,因此可以期待更多的列規范,但沒有后續內容,因此您需要使用)終止表規范。

另外,您不應該在數據庫助手onCreate()捕獲SQLiteException onCreate()正常返回時,假定數據庫創建成功。

解決問題之后,請卸載您的應用程序,以便刪除不正確的舊數據庫文件,並再次運行onCreate()

同樣在open()您似乎自己調用了onCreate() 不要那樣做 get{Read,Writ}ableDatabase()會在需要時為您完成。

您沒有關閉SQL語句。 例如:

這個:

db.execSQL("CREATE TABLE  " + Places_Table + "(" +
                    Key_ID + " INT PRIMARY KEY NOT NULL," +
                    Key_Name + " TEXT NOT NULL," +
                    Key_Phone + " TEXT NOT NULL," +
                    Key_Address + " TEXT NOT NULL," +
                    Key_Website + " TEXT," +
                    Key_Home + " TEXT,");

應該:

db.execSQL("CREATE TABLE  " + Places_Table + "(" +
                    Key_ID + " INT PRIMARY KEY NOT NULL," +
                    Key_Name + " TEXT NOT NULL," +
                    Key_Phone + " TEXT NOT NULL," +
                    Key_Address + " TEXT NOT NULL," +
                    Key_Website + " TEXT," +
                    Key_Home + " TEXT)");

然后將關閉create table語句。 由於逗號,它正在期待另一個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM