2015-10-27 89 views
-2

我正在研究Android Studio上的一個小項目。
自第一個應用程序運行以來,我想將一些數據插入到SQLite數據庫中。因爲應用程序需要運行數據(這是一個測驗應用程序),問題存儲在一個CSV文件中。混淆將CSV文件插入到SQLite數據庫Android Studio

我已經做了一些這樣的東西

public class DatabaseHelper extends SQLiteOpenHelper { 
public static final String MyVillageSoftware = "MyVillageSoftware"; 
public static final String DATABASE_NAME = "Question.db"; 
public static final String table_Question = "table_question"; 

public static final String COL1 = "QuestId"; 
public static final String COL2 = "A"; 
public static final String COL3 = "B"; 
public static final String COL4 = "C"; 
public static final String COL5 = "D"; 
public static final String COL6 = "aExplain"; 
public static final String COL7 = "bExplain"; 
public static final String COL8 = "cExplain"; 
public static final String COL9 = "dExplain"; 
public static final String COL10 = "_id"; 
//TOL for transaction Coloumn 
SQLiteDatabase db; 

private static final String TAG = DatabaseHelper.class.getSimpleName(); 



public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL("Create table " + table_Question + 
      " (QuestId Integer PRIMARY KEY, " + 
      "A Text," + 
      "B Text," + 
      "C Text" + 
      "D Text," + 
      "aExplain Text," + 
      "bExplain Text," + 
      "cExplain Text," + 
      "dExplain Text," + 
      "_id Text)"); 

} 

public void loadCSV2(){ 
    String mCSVfile = "file.csv"; 
    Context context; 
    AssetManager manager = context.getAssets(); 
    InputStream inStream = null; 
    try { 
     inStream = manager.open(mCSVfile); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream)); 
    String line = ""; 
    db.beginTransaction(); 
    try { 
     while ((line = buffer.readLine()) != null) { 
      String[] colums = line.split(","); 
      if (colums.length != 4) { 
       Log.d("CSVParser", "Skipping Bad CSV Row"); 
       continue; 
      } 
      ContentValues cv = new ContentValues(3); 
      cv.put(COL1, colums[0].trim()); 
      cv.put(COL2, colums[1].trim()); 
      cv.put(COL3, colums[2].trim()); 
      cv.put(COL4, colums[3].trim()); 
      cv.put(COL5, colums[4].trim()); 
      cv.put(COL6, colums[5].trim()); 
      cv.put(COL7, colums[6].trim()); 
      cv.put(COL8, colums[7].trim()); 
      cv.put(COL9, colums[8].trim()); 
      db.insert(table_Question, null, cv); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    db.setTransactionSuccessful(); 
    db.endTransaction(); 

} 



public List<String> getAllCategory() { 
    List<String> AllCategoryList = new ArrayList<String>(); 
    List<String> AllCategIdList = new ArrayList<String>(); 

    String selectQuery = "SELECT * FROM " + table_Question; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 



    if (cursor.moveToFirst()) { 
     do { 
      String Id = cursor.getString(0); 
      String A = cursor.getString(1); 
      String B = cursor.getString(2); 
      String C = cursor.getString(3); 
      String D = cursor.getString(4); 
      String aExplain = cursor.getString(5); 
      String bExplain = cursor.getString(6); 
      String cExplain = cursor.getString(7); 
      String dExplain = cursor.getString(8); 

     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 
    return AllCategoryList; 
} 


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

} 

}

但我在這條線的錯誤:

AssetManager manager = context.getAssets(); 

它說

Error:(67, 32) error: variable context might not have been initialized

我不請不要知道發生了什麼事 幫我。
我是Android編程新手。

回答

2

初始化context [增訂]

你永遠插入,因爲這種控制線,:

if (colums.length != 4) { 
     Log.d("CSVParser", "Skipping Bad CSV Row"); 
     continue; 
    } 

哪跳過任何行機智列號不同於。
但是你有(並且想要插入)列。

ContentValues cv = new ContentValues(3); 
    cv.put(COL1, colums[0].trim()); 
    cv.put(COL2, colums[1].trim()); 
    cv.put(COL3, colums[2].trim()); 
    cv.put(COL4, colums[3].trim()); 
    cv.put(COL5, colums[4].trim()); 
    cv.put(COL6, colums[5].trim()); 
    cv.put(COL7, colums[6].trim()); 
    cv.put(COL8, colums[7].trim()); 
    cv.put(COL9, colums[8].trim()); 
    db.insert(table_Question, null, cv); 
} 

解決方案:
更改支票:

if (colums.length != 10) { 
    Log.d("CSVParser", "Skipping Bad CSV Row"); 
    continue; 
} 

也會改變該

ContentValues cv = new ContentValues(3); // Specified (wrong) size 

ContentValues cv = new ContentValues(); // Free size 
+0

我已經嘗試了先生。但仍然沒有導入我的CSV。任何解決方案先生? –

+0

看到我編輯的答案。 –

2

DatabaseHelper Constructor

Context context; 

public DatabaseHelper(Context context) { 
super(context, DATABASE_NAME, null, 1); 
this.context=context; 
} 
+0

好的,虐待先生。 –

+0

錯誤不再出現,但爲什麼我的數據庫沒有填寫我的csv文件,是否有任何代碼我必須添加先生? @M D –

+1

查看我的答案爲什麼它不插入值和如何成功。 @ MD的答案和我的結合將幫助你使你的應用程序工作。 –