与显示从SQLite数据库的数据为微调的问题[Android版]数据库、数据、问题、SQLite

2023-09-07 10:27:49 作者:笙箫.

我需要如何从SQLite数据库的数据并投入微调的帮助。另外,我无法打开我的Andr​​oid应用程序和LogCat中说:没有这样的列:名。我甚至请与我DBAdapter类和非DBAdapter类。

I need help in how to retrieve data from SQLite database and put into spinner. Plus, I can't open my android app and the LogCat says "No such column:name". I have even check with my DBAdapter classes and non-DBAdapter classes.

我有两个DBAdapter类(InfoDBAdapter.java和BuddiesDBAdapter.java)都链接到我的PersonalInfo.java类。

I have two DBAdapter classes(InfoDBAdapter.java and BuddiesDBAdapter.java) both link to my PersonalInfo.java class.

下面是codeS,用于从数据库中的数据并投入微调(PersonalInfo.class)。

Below are the codes for retrieving data from database and put into spinner(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();

和这些插入codeS为,情报插入到数据库中。

and these are the insert codes for inserting informaton into database.

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类

Below are the two DBAdapter classes

InfoDBAdapter.java

InfoDBAdapter.java

public class InfoDBAdapter
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_DATE = "date";
    public static final String KEY_TYPE = "type";
    public static final String KEY_LIKES = "likes";
    public static final String KEY_DISLIKES = "dislikes";

    private static final String TAG = "InfoDBAdapter";

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

    private static final String DATABASE_CREATE = "create table friends(_id integer primary key autoincrement, "
            + "name text not null, date text not null, type text not null, likes text not null, dislikes text not null);";

    private final Context context;

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public InfoDBAdapter(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 friends");
            onCreate(db);
        }// end onUpgrade()

    }// end DatabaseHelper

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

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

        public long insertContact(String name, String date, String type, String likes, String dislikes)
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_NAME, name);
            initialValues.put(KEY_DATE, date);
            initialValues.put(KEY_TYPE, type);
            initialValues.put(KEY_LIKES, likes);
            initialValues.put(KEY_DISLIKES, dislikes);
            return db.insert(DATABASE_TABLE, null, initialValues);
        }// 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, KEY_DATE, KEY_TYPE, KEY_LIKES, KEY_DISLIKES }, 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_DATE, KEY_TYPE, KEY_LIKES, KEY_DISLIKES }, KEY_ROWID + "=" + rowId,
                    null, null, null, null, null);
            if (mCursor != null)
            {
                mCursor.moveToFirst();
            }
            return mCursor;
        }// end getContact()

        public boolean updateContact(long rowId, String name, String date, String type, String likes, String dislikes)
        {
            ContentValues args = new ContentValues();
            args.put(KEY_NAME, name);
            args.put(KEY_DATE, date);
            args.put(KEY_TYPE, type);
            args.put(KEY_LIKES, likes);
            args.put(KEY_DISLIKES, dislikes);
            return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
        }// end updateContact()
}//end DBAdapter

BuddiesDBAdapter.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()
}

我需要这方面的帮助。任何帮助将是AP preciated。非常感谢!

I need help with this. Any help would be appreciated. Thanks alot!

推荐答案

上面的答案是正确的。什么是令人困惑的是,你有两个不同的数据库适配器和表名/列名是不同的。

The above answer is correct. What is confusing is that you have two different db adapters and the table name/column names are different.

有关可维护性,我不会硬code列名,而是使用

For maintainability, I would not hard code the column names, but instead use

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

希望这有助于...

Hope this helps...