2012-08-06 64 views
0

我需要幫助,以便如何從SQLite數據庫檢索數據並將其放入微調框。 另外,我無法打開我的android應用程序和LogCat說「沒有這樣的列:名稱」。我甚至檢查過我的DBAdapter類和非DBAdapter類。從SQLite數據庫顯示數據到微調框的問題[Android]

我有兩個DBAdapter類(InfoDBAdapter.java和BuddiesDBAdapter.java)都鏈接到我的PersonalInfo.java類。

下面是從數據庫檢索數據並放入微調器(PersonalInfo.class)的代碼。

InfoDBAdapter infoDB = new InfoDBAdapter(this); 

//BuddiesDBAdapter buddyDB = new BuddiesDBAdapter(this); 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
setContentView(R.layout.info); 

BuddiesDBAdapter buddyDB = new BuddiesDBAdapter(this); 

buddyDB.open(); 
Cursor c = buddyDB.getAllContacts(); 

//Create an array to specify which fields want to display 
    String[] from = new String[] {"name"}; 

    //Create an array of the display item want to bind our data to 
    int[] to = new int[] {R.id.fName}; 

    nameSpinner = (Spinner) findViewById(R.id.nameSpinner); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    nameSpinner.setAdapter(adapter); 

    buddyDB.close(); 

這些是用於將信息插入數據庫的插入代碼。

btnSave = (Button) findViewById(R.id.btnSave); 
     btnSave.setOnClickListener(new View.OnClickListener() 
      { 

       @Override 
       public void onClick(View v) 
       { 
        infoDB.open(); 
        long id; 

        Spinner nameSpinner = (Spinner) findViewById(R.id.nameSpinner); 
        String NameValue = nameSpinner.getSelectedItem().toString(); 

        EditText txtDate = (EditText) findViewById(R.id.txtDate); 
        String DateValue = txtDate.getText().toString(); 

        EditText txtType = (EditText) findViewById(R.id.txtType); 
        String TypeValue = txtType.getText().toString(); 

        EditText txtLikes = (EditText) findViewById(R.id.txtLikes); 
        String LikesValue = txtLikes.getText().toString(); 

        EditText txtDislikes = (EditText) findViewById(R.id.txtDislikes); 
        String DislikesValue = txtDislikes.getText().toString(); 

        id = infoDB.insertContact(NameValue, DateValue, TypeValue, LikesValue, DislikesValue); 
        infoDB.close(); 

        Toast.makeText(getBaseContext(), 
          "Your information is saved successfully!", Toast.LENGTH_SHORT).show(); 

       } 
      }); 

下面是兩種將對DBAdapter類

InfoDBAdapter.java

​​

BuddiesDBAdapter.java

public class BuddiesDBAdapter 
{ 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "buddy_name"; 
    private static final String TAG = "BuddiesDBAdapter"; 

    private static final String DATABASE_NAME = "anniversary"; 
    private static final String DATABASE_TABLE = "buddiesList"; 
    private static final int DATABASE_VERSION = 2; 

    private static final String DATABASE_CREATE = "create table namesList(_id integer primary key autoincrement, " 
      + "buddy_name text not null);"; 

    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public BuddiesDBAdapter(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      try 
      { 
       db.execSQL(DATABASE_CREATE); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
     }// end onCreate() 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS namesList"); 
      onCreate(db); 
     }// end onUpgrade() 

    }//end DatabaseHelper class 

    public BuddiesDBAdapter open() throws SQLException 
    { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    }// end open() 

    public void close() 
    { 
     DBHelper.close(); 
    }// end close() 

    public long insertContact(String buddy_name) 
    { 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, buddy_name); 
     return db.insert(DATABASE_TABLE, null, values);   
    }//end insertContact() 


    public boolean deleteContact(long rowId) 
    { 
     return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    }// end deleteContact() 


    public Cursor getAllContacts() 
    { 
     return db.query(DATABASE_TABLE, new String[] 
       { KEY_ROWID, KEY_NAME }, null, null, null, null, null); 
    }// end getAllContacts() 

    public Cursor getContact(long rowId) throws SQLException 
    { 
     Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { 
       KEY_ROWID, KEY_NAME }, KEY_ROWID + "=" + rowId, 
       null, null, null, null, null); 
     if (mCursor != null) 
     { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    }// end getContact() 

    public boolean updateContact(long rowId, String buddy_name) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_NAME, buddy_name); 
     return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
    }//end updateContact() 
} 

我需要這方面的幫助。任何幫助,將不勝感激。非常感謝!

+0

中,列名'日期'是導致問題,請嘗試使用'_date'重命名它 – Lucifer 2012-08-06 03:53:06

+0

當我重新命名爲_date時,我仍然有同樣的問題。 – Preeyah 2012-08-06 03:59:26

+0

LogCat仍然說:08-06 12:00:12.349:E/AndroidRuntime(536):引起:java.lang.IllegalArgumentException:列'name'不存在 – Preeyah 2012-08-06 04:00:44

回答

0

以上回答是正確的。令人困惑的是你有兩個不同的數據庫適配器,表名/列名是不同的。

可維護性,我不會硬編碼的列名,但你正在使用`在創建表日期文本不null`改用

String[] from = new String[] {BuddiesDBAdapter.KEY_NAME}; 

希望這有助於...

+0

我試過了,但我收到了強制關閉消息。然後我用buddy_name將KEY_NAME重命名,但仍沒有數據顯示在微調器中。我不確定我是否在代碼中犯了錯誤或錯過任何代碼。 – Preeyah 2012-08-06 06:14:13

+0

確保您有一組註釋進出的一致行。使用您爲數據「打開」的同一班級。除此之外,我沒有看到任何問題。另外,如果你的列名是「buddy_name」,你的錯誤不應該顯示「name」 – Aviral 2012-08-06 08:54:55

+0

你是什麼意思「一致的行註釋和註釋」?你的意思是我需要在兩個DBAdapter中有相同的行嗎? – Preeyah 2012-08-07 03:04:49

0

因爲

String[] from = new String[] {"name"}; 

應該

String[] from = new String[] {"buddy_name"}; 
+0

ohhhh ok。我會再嘗試。謝謝 – Preeyah 2012-08-06 05:42:40

+0

我必須將TextView id或Spinner id在String []中設置爲= new String [] {}?因爲我看不到微調器中顯示的任何數據(來自數據庫)。但我可以打開應用程序。 – Preeyah 2012-08-06 05:49:34