2017-05-08 140 views
0

我已經創建了一個數據庫,如下所示。cursor.moveToFirst()返回false

public class DataBase extends SQLiteOpenHelper { 
    private static String DB_NAME="MovieData"; 

    private static String TABLE_VARIABLES="data"; 

    private static int DB_VERSION=1; 
    DataBase(Context context) 
    {super(context,DB_NAME,null,DB_VERSION);//null is for cursors//sqlite helper classes constructor is being called 

    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { //Sqlitedatabase class gives us access to database 

     db.execSQL("CREATE TABLE "+TABLE_VARIABLES+"(" 
       +"_id INTEGER PRIMARY KEY AUTOINCREMENT," 
       + "Movie_Name TEXT," 
       + "Image_Link TEXT," 
       +"Release_Date TEXT," 

       + "Prediction TEXT);"); 
     insert_data(db,"Bahubali","https://www.desiretrees.in/wp-content/uploads/2016/12/Baahubali-2-Posters.jpg","2017/06/23","success"); 
     insert_data(db,"3 Idiots","http://s3.india.com/wp-content/uploads/2016/01/3-idiots-sequel-1.jpg","2018/06/11","success"); 
     insert_data(db,"Sagar","http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg","2019/07/17" ,"success"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 
    private void insert_data(SQLiteDatabase db,String movie_name,String image_link,String release_date, String prediction){ 
     ContentValues 
       movie_data= new ContentValues(); 
     movie_data.put("Movie_Name",movie_name); 
     movie_data.put("Image_Link",image_link); 
     movie_data.put("Release_Date",release_date); 
     movie_data.put("Prediction",prediction); 
     db.insert("data",null,movie_data); 


    } 
} 

插入的數據僅用於測試。

我想的片段內訪問數據基礎。這部分片段的代碼是

DataReceiver data= new DataReceiver(getContext()); 
      movie_name=data.getMovie_name(); 
      image_url=data.getImagelink(); 
      release_date=data.getRelease_date(); 
      prediction=data.getPrediction(); 

DataReceiver是一個從數據庫接收數據的分離類。它的代碼是。

public class DataReceiver { 

    private Context mContext; 
    private String movie_name,imagelink,release_date,prediction; 
    private String[] arrangedstring; 

    public DataReceiver(Context context) { 
     this.mContext=context; 
    } 

     public String[] getMovie_name(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id", "Movie_Name"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 
      cursor.close(); 
      return send; 
     } 
     public String[] getImagelink(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id", "Image_Link"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 

      cursor.close(); 
      return send; 
     } 
     public String[] getRelease_date(){ 

      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id","Release_Date"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 

      cursor.close(); 
      return send; 
     } 
     public String[] getPrediction(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id","Prediction"}, 
        null, 
        null, null, null, null 
      ); 

      String send[]= arrangeDescending(cursor,1); 
      cursor.close(); 
      return send; 
     } 

     private SQLiteDatabase open(){ 
      SQLiteOpenHelper DataBase = new DataBase(mContext); 
      SQLiteDatabase db = DataBase.getReadableDatabase(); 
      return db; 
     } 

     private String[] arrangeDescending(Cursor cursor,int column_no){ 
       if(cursor.moveToFirst()){ 
     int count=0; 
        do{ 
         arrangedstring[count]=cursor.getString(column_no); 
         arrangedstring=moveStringRight(arrangedstring); 
         count++; 

         cursor.moveToNext(); 
        }while(cursor.isAfterLast()); 
        arrangedstring=moveStringLeft(arrangedstring); 
       } 
      return arrangedstring; 
     } 

然後cursor.moveToFirst()方法返回false。我不知道我哪裏出錯了。

回答

1

如果cursor.moveToFirst()返回false,是因爲你沒有得到結果。

你的插入方法有錯誤,我相信你的表是空的。

你的表中有一個名爲「上映時間」列,但在你的insert_data方法,你使用的是不正確的名稱:

movie_data.put("Release Date",release_date); 

你缺少一個「_」

movie_data.put("Release_Date",release_date); 

這可能使插入查詢失敗,這就是爲什麼你沒有得到結果。

編輯:雖然我不知道你想用你的查詢來實現什麼,但.query()方法有一個用於訂購ASC或DESC結果的參數。所以,你可以刪除你的排列方法。經柱「MOVIE_NAME」與方興未艾爲了您的查詢之一

例子:

Cursor cursor = db.query("data", 
        new String[]{"_id", "Movie_Name"}, 
        null, 
        null, null, "Movie_Name ASC", null 
      ); 

檢查文檔: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

+0

你也將有arrangeDescending方法的問題,請檢查你的光標永遠有2列{_id,x},當你嘗試調用cursor.getString(2);將失敗 – miibpa

+0

感謝注意到。修復「_」也沒有幫助。仍然迴避錯誤 –

+2

考慮到您的onCreate方法在SqliteOpenHelper中只會被調用一次。所以你的insert_data不會被重新調用。嘗試再次卸載/啓動您的應用程序或使用onUpdate方法。 – miibpa