<<SQLiteDemo2.zip>>

SQLite Demo 2

本演练演示一个日记本程序

  • 新建项目SQLiteDemo2, 编辑res/layout/main.xml 文件

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk

    /res/android"

    android:layout_width="wrap_content" android:layout_height="wrap_content">

    <ListView android:id="@+id/android:list" android:layout_width="wrap_content"

    android:layout_height="wrap_content" />

    <TextView android:id="@+id/android:empty"

    android:layout_width="wrap_content" android:layout_height="wrap_content"

    android:text="没有日记内容点击菜单开始写日记" />

    </LinearLayout>

    2. 在res/layout/ 新建布局文件 diary_row.xml 用于显示日记的界面:

    <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout android:id="@+id/row"

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <TextView android:id="@+id/text1"

    android:layout_width="wrap_content" android:layout_height="30px"

    android:maxWidth="200dip"

    android:textSize="22sp"

    android:layout_marginTop="10dip"

    android:text="标题" />

    <TextView android:id="@+id/created" android:layout_width="wrap_content"

    android:layout_height="35px" android:layout_alignParentRight="true"

    android:layout_marginLeft="10dip"

    android:layout_marginTop="10dip"

    android:text="xxxx年xx月xx日" />

    </RelativeLayout>

    3. 在res/layout/新建布局文件 diary_edit.xml 用于编辑日记的界面

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <LinearLayout android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content">

    <TextView android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:text="@string/title"

    android:padding="2px" />

    <EditText android:id="@+id/title"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content" android:layout_weight="1" />

    </LinearLayout>

    <TextView android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:text="@string/body" />

    <EditText android:id="@+id/body" android:layout_width="fill_parent"

    android:layout_height="fill_parent" android:layout_weight="1"

    android:scrollbars="vertical" android:gravity="top" />

    <Button android:id="@+id/confirm" android:text="@string/confirm"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" />

    </LinearLayout>

    4. 打开res/values/string.xml,添加如下内容:

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

    <string name="hello">Hello World, SQLiteDemo2!</string>

    <string name="app_name">SQLiteDemo2</string>

    <string name="menu_insert">添加一篇新日记</string>

    <string name="menu_delete">删除一篇日记</string>

    <string name="title">标题</string>

    <string name="body">内容</string>

    <string name="confirm">确定</string>

    <string name="edit_diary">编辑日记</string>

    </resources>

    5. 新建DiaryDbAdapter类,用于封装对数据库的操作。

    import java.util.Calendar;

    import android.content.ContentValues;

    import android.content.Context;

    import android.database.Cursor;

    import android.database.SQLException;

    import android.database.sqlite.SQLiteDatabase;

    import android.database.sqlite.SQLiteOpenHelper;

    public class DiaryDbAdapter {

    public static final String KEY_TITLE = "title";

    public static final String KEY_BODY = "body";

    public static final String KEY_ROWID = "_id";

    public static final String KEY_CREATED = "created";

    private static final String TAG = "DiaryDbAdapter";

    private DatabaseHelper mDbHelper;

    private SQLiteDatabase mDb;

    private static final String DATABASE_CREATE = "create table diary (_id integer primary key autoincrement, "

    + "title text not null, body text not null, created text not null);";

    private static final String DATABASE_NAME = "database";

    private static final String DATABASE_TABLE = "diary";

    private static final int DATABASE_VERSION = 1;

    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) {

    db.execSQL("DROP TABLE IF EXISTS diary");

    onCreate(db);

    }

    }

    public DiaryDbAdapter(Context ctx) {

    this.mCtx = ctx;

    }

    public DiaryDbAdapter open() throws SQLException {

    mDbHelper = new DatabaseHelper(mCtx);

    mDb = mDbHelper.getWritableDatabase();

    return this;

    }

    public void closeclose() {

    mDbHelper.close();

    }

    public long createDiary(String title, String body) {

    ContentValues initialValues = new ContentValues();

    initialValues.put(KEY_TITLE, title);

    initialValues.put(KEY_BODY, body);

    Calendar calendar = Calendar.getInstance();

    String created = calendar.get(Calendar.YEAR) + "年"

    + calendar.get(Calendar.MONTH) + "月"

    + calendar.get(Calendar.DAY_OF_MONTH) + "日"

    + calendar.get(Calendar.HOUR_OF_DAY) + "时"

    + calendar.get(Calendar.MINUTE) + "分";

    initialValues.put(KEY_CREATED, created);

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

    }

    public boolean deleteDiary(long rowId) {

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

    }

    public Cursor getAllNotes() {

    return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,

    KEY_BODY, KEY_CREATED }, null, null, null, null, null);

    }

    public Cursor getDiary(long rowId) throws SQLException {

    Cursor mCursor =

    mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,

    KEY_BODY, KEY_CREATED }, KEY_ROWID + "=" + rowId, null, null,

    null, null, null);

    if (mCursor != null) {

    mCursor.moveToFirst();

    }

    return mCursor;

    }

    public boolean updateDiary(long rowId, String title, String body) {

    ContentValues args = new ContentValues();

    args.put(KEY_TITLE, title);

    args.put(KEY_BODY, body);

    Calendar calendar = Calendar.getInstance();

    String created = calendar.get(Calendar.YEAR) + "年"

    + calendar.get(Calendar.MONTH) + "月"

    + calendar.get(Calendar.DAY_OF_MONTH) + "日"

    + calendar.get(Calendar.HOUR_OF_DAY) + "时"

    + calendar.get(Calendar.MINUTE) + "分";

    args.put(KEY_CREATED, created);

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

    }

    }

    6. 新建类DiaryEditActivity类继承自Activity类用于编辑日记:

    import android.app.Activity;

    import android.content.Intent;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.Button;

    import android.widget.EditText;

    public class DiaryEditActivity extends Activity {

    private EditText mTitleText;

    private EditText mBodyText;

    private Long mRowId;

    private DiaryDbAdapter mDbHelper;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    mDbHelper = new DiaryDbAdapter(this);

    mDbHelper.open();

    setContentView(R.layout.diary_edit);

    mTitleText = (EditText) findViewById(R.id.title);

    mBodyText = (EditText) findViewById(R.id.body);

    Button confirmButton = (Button) findViewById(R.id.confirm);

    mRowId = null;

    // 每一个intent都会带一个Bundle型的extras数据。

    Bundle extras = getIntent().getExtras();

    if (extras != null) {

    String title = extras.getString(DiaryDbAdapter.KEY_TITLE);

    String body = extras.getString(DiaryDbAdapter.KEY_BODY);

    mRowId = extras.getLong(DiaryDbAdapter.KEY_ROWID);

    if (title != null) {

    mTitleText.setText(title);

    }

    if (body != null) {

    mBodyText.setText(body);

    }

    }

    confirmButton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {

    String title = mTitleText.getText().toString();

    String body = mBodyText.getText().toString();

    if (mRowId != null) {

    mDbHelper.updateDiary(mRowId, title, body);

    } else

    mDbHelper.createDiary(title, body);

    Intent mIntent = new Intent();

    setResult(RESULT_OK, mIntent);

    finish();

    }

    });

    }

    }

    7. 编辑SQLiteDemo2类

    import android.app.Activity;

    import android.app.ListActivity;

    import android.content.Intent;

    import android.database.Cursor;

    import android.os.Bundle;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.view.View;

    import android.widget.ListView;

    import android.widget.SimpleCursorAdapter;

    public class SQLiteDemo2 extends ListActivity {

    private static final int ACTIVITY_CREATE = 0;

    private static final int ACTIVITY_EDIT = 1;

    private static final int INSERT_ID = Menu.FIRST;

    private static final int DELETE_ID = Menu.FIRST + 1;

    private DiaryDbAdapter mDbHelper;

    private Cursor mDiaryCursor;

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mDbHelper = new DiaryDbAdapter(this);

    mDbHelper.open();

    renderListView();

    }

    private void renderListView() {

    mDiaryCursor = mDbHelper.getAllNotes();

    startManagingCursor(mDiaryCursor);

    String[] from = new String[] { DiaryDbAdapter.KEY_TITLE,

    DiaryDbAdapter.KEY_CREATED };

    int[] to = new int[] { R.id.text1, R.id.created };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this,

    R.layout.diary_row, mDiaryCursor, from, to);

    setListAdapter(notes);

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

    super.onCreateOptionsMenu(menu);

    menu.add(0, INSERT_ID, 0, R.string.menu_insert);

    menu.add(0, DELETE_ID, 0, R.string.menu_delete);

    return true;

    }

    public boolean onMenuItemSelected(int featureId, MenuItem item) {

    switch (item.getItemId()) {

    case INSERT_ID:

    createDiary();

    return true;

    case DELETE_ID:

    mDbHelper.deleteDiary(getListView().getSelectedItemId());

    renderListView();

    return true;

    }

    return super.onMenuItemSelected(featureId, item);

    }

    private void createDiary() {

    Intent i = new Intent(this, DiaryEditActivity.class);

    startActivityForResult(i, ACTIVITY_CREATE);

    }

    protected void onListItemClick(ListView l, View v, int position, long id) {

    super.onListItemClick(l, v, position, id);

    Cursor c = mDiaryCursor;

    c.moveToPosition(position);

    Intent i = new Intent(this, DiaryEditActivity.class);

    i.putExtra(DiaryDbAdapter.KEY_ROWID, id);

    i.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c

    .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));

    i.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c

    .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));

    startActivityForResult(i, ACTIVITY_EDIT);

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode,

    Intent intent) {

    super.onActivityResult(requestCode, resultCode, intent);

    renderListView();

    }

    }

    8. 在AndroidManifest.xml 中配置

    <activity android:name="DiaryEditActivity"></activity>

转载于:https://www.cnblogs.com/xingquan/archive/2011/03/25/1995718.html

8.2 Android Basic 数据存储 Database SQLite Demo 2相关推荐

  1. 8.1 Android Basic 数据存储 Preferences Dialog(使用对话框的Preferences)

    <<PrefsDemo_Dialog.zip>> Dialog(使用对话框的Preferences) 新建项目 PrefsDemo_Dialog 编辑res/layout/ma ...

  2. 2010-02-28 传智播客—Android(三)数据存储之三SQLite嵌入式数据库

    2010-02-28 传智播客-Android(三)数据存储之三SQLite嵌入式数据库 前两篇日志我已经总结了本地数据存储的前两种:文件和配置项.还剩下最后一种数据库存储--SQLite. 一.SQ ...

  3. 005 Android之数据存储

    文章目录 Android文件系统 Android文件的访问权限 文件访问权限实例 数据存储方式 内部存储 内部存储实例 外部存储 Shared Preferences Shared Preferenc ...

  4. 数据存储之 SQLite 数据库操作(三)

    上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 ...

  5. 数据存储之 SQLite 数据库操作(二)

    上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学 ...

  6. 格式化数据#1:数据存储|Database

    最近在研究直接用JSON做笔记,比如我搜集的有关数据库的项目: {"title": "数据存储|Database","items": [ { ...

  7. android常用的存储方式,Android 常见数据存储方式

    Android 常见数据存储方式有以下三种:1.使用SharedPreferences存储数据:其本质就是一个xml文件,可以保存字符串.布尔值.基础数据.集合等数据.常用于存储较简单的参数设置. 2 ...

  8. android app数据存储,基于Android开发的APP数据存储研究

    谢原武+龙文 摘要: 作为一个完整的应用程序,数据存储操作是必不可少的.Android系统一共提供了四种数据存储方式分别为File文件存储.Shared Preferences存储.ContentPr ...

  9. 【Android】数据存储,文件,数据库

    Android中数据存储 一.在内部存储读写文件 1.文件io读写 写文件 //写入数据 private fun saveFile() {//将文件写入内部存储空间时,只能在本应用的目录中写入,不能写 ...

最新文章

  1. 百度工具栏不显示出来_解决win10系统桌面应用图标显示不出来的问题
  2. mysql connections参数_MySQL性能优化之max_connections配置参数浅析
  3. Django搭建简单的站点
  4. JSON 基础解释.
  5. Personal preference
  6. 创建可按比例调整的布局的 Windows 窗体
  7. 【机器视觉】 for算子
  8. 如何理解马尔可夫决策过程?
  9. lsof 一切皆文件
  10. 关于WES7的系统还原与恢复
  11. C语言图形库——EasyX基本贴图
  12. 常用数学符号大学(包含罗马字符)
  13. 概率dp(A - Scout YYF I POJ - 3744 )
  14. 区块链应用 | 高盛报告深度解读:区块链在未来的5大应用
  15. Tracup小提示:工作总是摸鱼、走神,您可能得了“成人多动症”?
  16. Least Crucial Node UVALive - 7456
  17. DNS是什么,修改几个数字就能提升网速?(转载)
  18. 微信公众号授权登录之二(tp5)
  19. UE4碰撞射线检测2
  20. linux下载流量和上传流量,通过linux的tc工具简单实现上传和下载的流量控制

热门文章

  1. for 循环迭代变量
  2. socket什么情况下可读
  3. muduo:高效整型转换为字符串
  4. 支付宝和微信的支付流程图
  5. 嵌入式中的中断服务程序
  6. oracle中的listener.ora和tnsnames.ora
  7. nginx 认证多个客户端的问题
  8. 阿里云企业服务器配置选择教程!
  9. 如何区分Android wrap_content和fill_parent的详细说明
  10. linux软件包管理-rpm