2012-10-18 99 views
1

我有一個有線問題。 我寫了一個使用sqlite的代碼。這是相關線路:在Android的SQLite表填充不正確

private final String DB_NAME = "cus"; 
    private final String TABLE_NAME = "cus2"; 
    SQLiteDatabase customersDB2 = null; 
    /** Called when the activity is first created. */ 
    private void mFillDbsTable(){ 
     try { 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (1, 'the ', 'ה- ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (2, 'of ', 'של ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (3, 'to ', 'אל ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (4, 'and ', 'ו - ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (5, 'a ', 'מופיע לפני שם עצם ביחיד ללא הא הידיעה ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (6, 'in ', 'בתוך ');"); 
      customersDB2.execSQL("INSERT INTO " + TABLE_NAME + " Values (7, 'for ', 'עבור ');"); 
    ................ 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_learn); 
     try { 
      customersDB2 = this.openOrCreateDatabase( DB_NAME, MODE_PRIVATE, null); 
      customersDB2.execSQL("CREATE TABLE " + 
        TABLE_NAME + 
        " (Block INT," + 
        " Name VARCHAR, Street VARCHAR);"); 
      mFillDbsTable(); 
}catch (SQLiteException se) { 
      Log.e(getClass().getSimpleName(), "create/Open the database problem"); 
} 

現在,當我問查詢:

correctAnswer=oneTOfour.nextInt(4); 
    Toast.makeText(this,"correctAnswerק"+correctAnswer,Toast.LENGTH_SHORT).show(); 
    correctAnswerTHE_ANSWER =(r.nextInt(1000)) + 1; 
    Toast.makeText(this,"correctAnswerTHE_ANSWER"+correctAnswerTHE_ANSWER,Toast.LENGTH_SHORT).show(); 

     ArrayList<String> results = new ArrayList<String>(); 
    Cursor c = customersDB2.rawQuery("SELECT Name, Street FROM " + 
      TABLE_NAME + 
      " where Block = 66 ", null); 


    if (c != null) { //true 

     Toast.makeText(this,"c.getColumnIndex(Name)" + c.getColumnIndex("Name"),Toast.LENGTH_SHORT).show(); //got 0!! 
     if (c.moveToFirst()) { 
      do { 

       name = c.getString(c.getColumnIndex("Name")); 
       street = c.getString(c.getColumnIndex("Street"));   
       results.add(name + ", " + street); 
      }while (c.moveToNext()); 
     } 
    } 

    else{ 
     Toast.makeText(this,"null2",Toast.LENGTH_SHORT).show(); 
    } 


    question.setText(name); //this is null 

}

它沒有到達第二,如果

也許是我第一次跑這個應用程序只有2列。 我試圖打開其他項目,改變表的名字..沒有工作。 有些想法?

+1

我們可以看到表創建代碼嗎? – toadzky

+0

你在'mFillDbsTable' catch {}語句中做什麼? –

+0

0好,這意味着「名稱」列在第零列。在您選擇的語句中,您先選擇了它「選擇姓名,街道...」 –

回答

1
"SELECT Name, Street FROM " ... 

當你的名字,你要選擇字段,它返回它們的順序,所以Name第一列,或0

如果您希望它們按照您創建它們的順序進行操作,請改爲使用SELECT * FROM

問題是,它們的順序是什麼?您已經使用c.getColumnIndex(),所以他們的順序沒有意義。

+0

好吧,我理解我的理解錯誤。 但是,這是什麼原因導致問題,有時街道是空的,有時街道是它的價值? (和關於 「名稱」 相同) – user1752635

0

可能與您在插入中使用的UTF非標準字符有關。你應該嘗試插入使用ContentValues,如:

ContentValues row = new ContentValues(); 
row.put("Name", "blah"); 
row.put("Street", "your utf strings"); 
row.put("Block", 1); 
long id = db.insert(TABLE_NAME, null, row); 
+0

但即使不插入到第二,如果:(!C = NULL) \t \t如果{//真 \t \t \t \t \t如果(c.moveToFirst ()){//假 \t \t \t \t做{ \t \t \t \t \t Toast.makeText(這一點, 「c.getColumnIndex(塊)」 + c.getColumnIndex( 「塊」),Toast.LENGTH_SHORT).show (); //得到0! (這是「c.getColumnIndex(Name)」+ c.getColumnIndex(「Name」),Toast.LENGTH_SHORT).show(); //得到0! \t \t \t \t \t名稱= c.getString(c.getColumnIndex( 「名稱」)); \t \t \t \t \t street = c.getString(c。getColumnIndex( 「街」)); \t \t \t \t \t \t \t results.add(name +「,」+ street); \t \t \t \t} while(c.moveToNext()); \t \t \t} \t \t} – user1752635