2013-07-31 37 views
0

我已經編寫了一個代碼,用於從與特定YouTube視頻相關的json文件中獲取信息,然後將我需要的信息存儲在我的數據庫中。SQLite中的表未找到問題

從json文件解析沒有問題。當我試圖在我的數據庫中插入值時,會出現一條錯誤消息,告訴我沒有這樣的表存在。

這裏是堆棧跟蹤:

07-31 08:42:22.451: I/Database(365): sqlite returned: error code = 1, 
    msg = no such table: youtube_VIDEOS 07-31 08:42:22.471: E/Database(365): 
    Error inserting video_CommentCount=70 video_CountView=50 video_Name=Badly 
    Drawn Boy - Disillusion (directed by Garth Jennings) 
    video_Url=https://www.youtube.com/watch?v=B11msns6wPU&feature=youtube_gdata_player 
    video_LIKES=60 video_Img=https://i1.ytimg.com/vi/B11msns6wPU/default.jpg 
    video_Descrption=My new playlist Description 07-31 08:42:22.471: 
    E/Database(365): android.database.sqlite.SQLiteException: 
    no such table: youtube_VIDEOS: , 
    while compiling: INSERT INTO youtube_VIDEOS(video_CommentCount, video_CountView, video_Name, video_Url,video_LIKES, video_Img, video_Descrption) VALUES(?, ?, ?, ?, ?, ?, ?); 
    07-31 08:42:22.471: E/Database(365): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 

這裏是我的數據庫代碼:

package com.example.tstnetconnwithjson.db; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class youtube_db extends SQLiteOpenHelper { 


    public static final String dataBase_NAME="YOUTUBE_database"; 
    private static final int dataBase_VERSION=1; 
    private static final String dataBase_TABLE="youtube_VIDEOS"; 
    public static final String[] COLS_List={"video_Name","video_Descrption","video_Img","video_Url","video_CountView","video_LIKES","video_CommentCount"}; 

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    //end of declaring attributes and tables conents 
    public youtube_db(Context context) { 
     super(context,dataBase_NAME, null, dataBase_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
      "create table" + dataBase_NAME + "(" + COLS_List[0] +" text not null , "+ COLS_List[1] 
       +" text not null , "+ COLS_List[2]+" text not null , "+COLS_List[3]+" text not null , "+COLS_List[4]+" integer , "+COLS_List[5] 
       +" integer , "+COLS_List[6]+" integer) ");    


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     Log.i("in the upgrade", "ok"); 

    } 

} 

這裏是將插入的信息在我的數據庫功能:

package com.example.tstnetconnwithjson.db; 

import com.example.tstnetconnwithjson.tables.videos; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 

public class youtubeDataBaseManager { 

    SQLiteDatabase SQL_db; 
    youtube_db my_Database; 


    public youtubeDataBaseManager(Context c){ 

     my_Database=new youtube_db(c); 
     SQL_db= my_Database.getWritableDatabase(); 

    }//end of costructor 

    public long insert_Youtube_Info(videos video){ 
     ContentValues contentValues = new ContentValues(); 

     contentValues.put(youtube_db.COLS_List[0], video.getVideoname()); 
     contentValues.put(youtube_db.COLS_List[1], video.getDecscrption()); 
     contentValues.put(youtube_db.COLS_List[2], video.getImageurl()); 
     contentValues.put(youtube_db.COLS_List[3], video.getVediourl()); 
     contentValues.put(youtube_db.COLS_List[4], "50"); 
     contentValues.put(youtube_db.COLS_List[5], "60"); 
     contentValues.put(youtube_db.COLS_List[6], "70"); 

     long addResult ; 
     addResult= SQL_db.insert(youtube_db.dataBase_TABLE, null, contentValues); 


     if(addResult==-1) 
     { 
      Log.i("add video", "add error.... "); 

     } 
     else 
     { 
      Log.i("add video", "add:ok.... "); 
     } 
     return addResult; 



    } 

誰能告訴我是什麼問題?

+0

Tolen你犯了一個錯誤,而執行查詢 –

+0

我有正確的查詢,但仍然有同樣的問題 – Tolen

回答

1

你有這個錯誤,因爲你的數據庫表沒有成功創建。爲什麼?因爲你的表沒有主鍵(id)。添加,e.g:

`_id` INT PRIMARY KEY AUTOINCREMENT, 

現在每一件事應該可以正常工作

+0

@:Ty221:還是同樣的問題 – Tolen

4
"create table" + dataBase_NAME + "(" 

你缺少名和<create table>關鍵字之間的空間。您必須將其更改爲:

"create table " + dataBase_TABLE + "(" 

否則,您的DDL聲明將不起作用。

稍後,您嘗試引用名爲「youtube_VIDEOS」的表,該表不存在。因爲你從來沒有創造它。這全是關於打字錯誤。

+0

+1,我只更新了你的問題(對於初學者來說,文字中的一些更改可以更好地解釋)。 – Sajmon

+1

@Sajmon謝謝,好發現,錯過了空間部分 –

+0

@:kenwolf:仍然是同樣的問題 – Tolen

2

你應該改變在這裏:

create table" + dataBase_TABLE+ "(" + COLS_List[0] +" text not null , "+ COLS_List[1] 
      +" text not null , "+ COLS_List[2]+" text not null , "+COLS_List[3]+" text not null , "+COLS_List[4]+" integer , "+COLS_List[5] 
      +" integer , "+COLS_List[6]+" integer) "); 
+0

@ Shani Goriwal:仍然是同樣的問題 – Tolen