2015-06-26 59 views
-1

我想添加一些圖像uri的數據庫。我的數據庫表有兩列id和String Uri。問題是它顯示當試圖插入一些Uris到表時沒有這樣的表存在。這是我的數據庫適配器類代碼。Android Sqlite顯示沒有這樣的表

package com.example.mystorage; 

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; 

public class DBAdapter { 
// for customer registration 
static final String KEY_ID = "id"; 
static final String KEY_URI = "uri"; 


static final String DATABASE_NAME = "IMAGE_DB"; 

static final String DATABASE_TABLE = "temp_images1"; 

static final int DATABASE_VERSION = 2; 

static final String DATABASE_CREATE = "create table temp_images1 (id integer  autoincrement, " 
     + "uri text not null);"; 

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); 

    } 

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

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)  { 
     db.execSQL("DROP TABLE IF EXISTS temp_images1"); 
     onCreate(db); 
    } 

} 

public DBAdapter open() throws SQLException { 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    DBHelper.close(); 
} 



// //////////////////////////////////////for 
// customerRegistration//////////////// 
// customer registration for retrieve data 
public Cursor getAllImages() { 
    return db.query(DATABASE_TABLE, new String[] {KEY_URI}, null, 
      null, null, null, null); 
} 
public Cursor getContentimage(long id) throws SQLException { 
    Cursor c = db.query(true, DATABASE_TABLE, 
      new String[] { KEY_ID, KEY_URI }, 
      KEY_ID + "=" + id, null, null, 
      null, null, null); 
    if (c != null) { 
     c.moveToFirst(); 
    } 
    return c; 
} 
// customer registration for update data 
public boolean updateimages(long id, String uri) { 
    ContentValues args = new ContentValues(); 
    // args.put(KEY_ID,id); 
    args.put(KEY_URI, uri); 
    return db.update(DATABASE_TABLE, args, KEY_ID + "=" + id, null) > 0; 
} 

// customer registration for insert data 
public long insertImages(String uri) { 
    ContentValues args = new ContentValues(); 
    //args.put(KEY_ID, id); 
    args.put(KEY_URI, uri); 
    long n = db.insert(DATABASE_TABLE, null, args); 
    //db.insertOrThrow(DATABASE_TABLE, null, args); 
    return n; 
} 

// customer registration for remove data 
public boolean deleteImages(long id) { 
    return db.delete(DATABASE_TABLE, KEY_ID + "=" + id, null) > 0; 

} 
} 

這裏是我的ImageAdapter類,我在調用插入方法。 mThumbs是uri Arraylist在檢索時存儲數據庫的內容。

public ImageAdapter(Context c, android.net.Uri uri) { 
    mContext = c; 
    db= new DBAdapter(mContext); 
    try { 
    db.open(); 
    db.insertImages(uri.toString()); 
    db.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    upadteAllImages(); 

     notifyDataSetChanged(); 
} 

public ImageAdapter(Context c, ArrayList<Uri> imageUris) { 
    mContext = c; 
    db= new DBAdapter(mContext); 
    try { 
    db.open(); 
    for (int i = 0; i < imageUris.size(); i++){ 
    db.insertImages(imageUris.get(i).toString()); 
    } 
    db.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    upadteAllImages(); 

     notifyDataSetChanged(); 
} 

private void upadteAllImages() { 
    mTHumbs.clear(); 

    try{ 
     db.open(); 
     Cursor c = db.getAllImages(); 
     if (c.moveToFirst()) { 
      while (c.moveToNext()){ 
       String uri = c.getString(1); 
       mTHumbs.add(Uri.parse(uri)); 
      } 
     } 
     //mTHumbs.add((Uri) db.getAllImages()); 

     db.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
+0

請看看我的回答 –

+0

這不是我努力工作。仍然插入返回-1。 –

+0

仍然沒有找到表?還是別的什麼? –

回答

0
  1. CREATE TABLE修復語法錯誤。 AUTOINCREMENT只能與INTEGER PRIMARY KEY一起使用,而您錯過了PRIMARY KEY

  2. 刪除onCreate()中的try-catch,以便在出現語法問題時得到異常。

  3. 卸載您的應用程序,以便刪除舊數據庫,並使用固定的SQL再次運行幫助程序onCreate()

+0

謝謝先生: ) –

0

在數據庫中創建表需要做一些小的更改。

請看這 -

" CREATE TABLE temp_images1 (id INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + "uri TEXT NOT NULL) ; "; 
1
String query = "CREATE TABLE " + DATABASE_TABLE + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
      + KEY_URI + " TEXT not null "+)";