android中的数据库问题

时间:2011-03-20 08:22:48

标签: java android database

您好我是SEO,我目前正在练习自己的Android开发。我研究了android开发者网站中的数据库存储,并找到了一个记事本中的示例代码。

我尝试在我的项目中使用它。在我的项目中,我已经放置了两个带有OK按钮的编辑框,当单击OK按钮时,编辑框中的数据将被存储并显示在新页面中。

以下是我项目的主类文件

的代码
{

    b = (Button)findViewById(R.id.widget30);

    et1 = (EditText)findViewById(R.id.et1);
    et2 = (EditText)findViewById(R.id.et2);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String title = extras.getString(NotesDbAdapter.KEY_ET1);
        String body = extras.getString(NotesDbAdapter.KEY_ET2);
        mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);

        if (title != null) {
            et1.setText(title);
        }
        if (body != null) {
            et2.setText(body);
        }
    }

    b.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            if(et1.getText().toString().length() == 0 && et2.getText().toString().length() == 0)
            {
                et.setVisibility(View.VISIBLE);
                alertbox();
            }
            else
            {
            main.this.finish();
            Intent myIntent = new Intent(v.getContext(), T.class);
             startActivityForResult(myIntent, 0);
            }
        }               
    });
}


public void alertbox() 
{
    et = new TextView(this);
    Builder alert =new AlertDialog.Builder(main.this);
    alert.setTitle("Alert");
    alert.setMessage("Required all fields");
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
    {
         public void onClick(DialogInterface dialog, int whichButton)
         {
            dialog.cancel();
         }
    });
    AlertDialog alert1 = alert.create();
    alert1.show();
}

}

以下是DataBaseAdapter的代码

public class NotesDbAdapter {

    public static final String KEY_ET1 = "a";
    public static final String KEY_ET2 = "b";
    public static final String KEY_ROWID = "_id";

    private static final String TAG = "NotesDbAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    private static final String DATABASE_CREATE =
        "create table notes (_id integer primary key autoincrement, "
        + "title text not null, body text not null);";

    private static final String DATABASE_NAME = "data";
    private static final String DATABASE_TABLE = "notes";
    private static final int DATABASE_VERSION = 2;

    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

        @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 notes");
            onCreate(db);
        }
    }


    public NotesDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }


    public NotesDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }



    public long createNote(String a, String b) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ET1, a);
        initialValues.put(KEY_ET2, b);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }


    public boolean deleteNote(long rowId) {

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }


    public Cursor fetchAllNotes() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_ET1,
                KEY_ET2}, null, null, null, null, null);
    }


    public Cursor fetchNote(long rowId) throws SQLException {

        Cursor mCursor =

            mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_ET1, KEY_ET2}, KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }


    public boolean updateNote(long rowId, String a, String b) {
        ContentValues args = new ContentValues();
        args.put(KEY_ET1, a);
        args.put(KEY_ET2, b);

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
}

当我运行项目时,新页面正在打开,但输入的数据不会显示在那里。

错误是什么。请教我

1 个答案:

答案 0 :(得分:1)

您将需要获取数据库适配器的实例

NotesDbAdapter adapter = new NotesDbAdapter(this); //pass activity context as a param

然后你需要使用新数据库对象的open方法来打开数据库

adapter.open();

现在调用商店方法

String str = myEditText.getText().toString();
String str1 = "random other string";
adapter.createNote(str, str1);

我注意到你的createNote方法需要两个参数。我不知道你想从哪里获取其他数据,所以我只是使用'随机其他字符串'。根据需要存储要存储的数据。

最后,您需要关闭数据库:

adapter.close();

您已成功存储了这些信息。有关如何使用控制台查看已输入数据库的数据的帮助,请参阅this。 (具体请参见页面的sqlite3部分)或者,您可以编写一些代码,以便在检索后在屏幕上显示它。如果要检索信息,则需要阅读有关游标的信息。有关相关信息,请参阅here