【问题标题】:try to put image for sqlite尝试为 sqlite 放置图像
【发布时间】:2015-09-25 13:05:22
【问题描述】:

我正在尝试使用 SqlHelper 类将图像 URL(String) 放入数据库。但是当我这样做时我得到了一些错误。我尝试了很多方法,但得到了同样的错误。也许我不能将http链接放入数据库?

以下是我的数据库助手:

public class SqlHelper {
String title;
    String description;
    String image;
    private static final String TEXT_TYPE = " TEXT";
    private static final String COMMA_SEP = ",";
    public static final String KEY_ROWID = "_id";
    public static final String KEY_TITLE = "title";
    public static final String KEY_DESCRIPTION = "description";
    public static final String KEY_IMAGE = "image";
private SqlHelper mDb;
    private static final String DATABASE_NAME = "DBCategory";
    private static final String DATABASE_TABLE = "categoryTable";
    private static final int DATABASE_VERSION = 1;
    private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ROWID + " INTEGER PRIMARY KEY," +
                    KEY_TITLE + TEXT_TYPE + COMMA_SEP +
                    KEY_DESCRIPTION + TEXT_TYPE + COMMA_SEP + KEY_IMAGE + TEXT_TYPE +

            " )";
    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    public SqlHelper(Context c) throws SQLException {
        ourContext = c;
        try {
            open();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public SqlHelper open() throws SQLException{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

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





    private static class DbHelper extends SQLiteOpenHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                            KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                            KEY_TITLE + " TEXT NOT NULL," + KEY_IMAGE + " TEXT NOT NULL," + KEY_DESCRIPTION + " TEXT NOT NULL );"
            );
        }

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

    }

    public long createEntry(String title, String image,String description) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_TITLE, title);
        cv.put(KEY_IMAGE, image);
        cv.put(KEY_DESCRIPTION,description);

        return ourDatabase.insert(DATABASE_TABLE, null, cv);
    }

    public ArrayList<HashMap<String, String>> getAllData()
    {
        ArrayList<HashMap<String, String>> array_list = new ArrayList<HashMap<String, String>>();

        //hp = new HashMap();
        SQLiteDatabase db = this.ourHelper.getReadableDatabase();
        Cursor res =  db.rawQuery( "select * from categoryTable", null );
        res.moveToFirst();

        while(res.isAfterLast() == false){

            HashMap<String,String>  hashmap = new HashMap<String, String>();
            hashmap.put("title", res.getString(res.getColumnIndex(title)));
            hashmap.put("description", res.getString(res.getColumnIndex(description)));
            hashmap.put("image", res.getString(res.getColumnIndex(image)));


            array_list.add(hashmap);
            res.moveToNext();
        }
        return array_list;
    }
}

错误:

11910-11929/com.example.vnvbnv.myapplication E/SQLiteLog﹕ (1) table categoryTable has no column named image
09-25 15:56:46.467  11910-11929/com.example.vnvbnv.myapplication E/SQLiteDatabase﹕ Error inserting image=http://moi-pushistye-druzya.narod.ru/images/00073.jpg title=Случайный хомяк 27 description=Случайное фото случайного хомячка. Он тут — для массовости!
    android.database.sqlite.SQLiteException: table categoryTable has no column named image (code 1): , while compiling: INSERT INTO categoryTable(image,title,description) VALUES (?,?,?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1523)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1395)
            at com.example.vnvbnv.myapplication.SqlHelper.createEntry(SqlHelper.java:93)
            at com.example.vnvbnv.myapplication.MainActivity$ProgressTask.doInBackground(MainActivity.java:159)
            at com.example.vnvbnv.myapplication.MainActivity$ProgressTask.doInBackground(MainActivity.java:113)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:864)

【问题讨论】:

    标签: android android-listview android-sqlite


    【解决方案1】:

    您是否尝试过卸载您的应用并再次运行它?

    错误提示“table categoryTable has no column named image”,如果您使用列数较少的数据库表测试您的应用程序并稍后在您的数据库中引入一个列,则可能会发生这种情况。

    一旦您使用附加列重新启动您的应用程序,旧版本的 DB 已经存在,并且不会调用 DBHelper 的 onCreate,新列也不会添加到您的表中。

    卸载应用程序将清除任何以前的 DB 实例,并且将再次调用 onCreate,您将从一个新表开始。

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2010-12-09
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多