Android结合界面对Sqlite数据库做增,删,改,查.操作

 

本实例是将数据库中数据查询出来在界面中用ListView显示,并增加菜单提示对数据做新增和删除操作.单选择一条记录单击时对此条记录做修改操作. 所用到的界面布局: 主界面ListActivity 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">

<listview 
android:id="@+id/android:list" android:layout_width="wrap_content" android:layout_height="wrap_content">
</listview>

<textview
 android:id="@+id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:text="您还没有开始写日记呢!点击下边的Menu按钮开始写日记吧:)">
</textview></linearlayout>  

  在ListView中增加的控件布局

<?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><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="1999年12月3号"></textview></relativelayout>

  新增和修改界面布局

<?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">
<textview android:text="@string/notepad_title" android:layout_width="fill_parent" android:layout_height="wrap_content"></textview>
<edittext android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content">
</edittext>
<textview android:text="@string/notepad_body" android:layout_width="fill_parent" android:layout_height="wrap_content"></textview>
<edittext android:id="@+id/body_text" android:layout_width="fill_parent" android:layout_height="wrap_content"></edittext><button android:id="@+id/button" android:text="@string/notepad_button" android:layout_width="fill_parent" android:layout_height="wrap_content"></button>  
</linearlayout> 

  此功能牵涉到两个Activity所有还需要修改AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="us.imnet.iceskysl.db.notepad" android:versioncode="1" android:versionname="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".ActivityMain"><intent-filter><action android:name="android.intent.action.MAIN"></action><category android:name="android.intent.category.LAUNCHER"></category></intent-filter></activity><activity android:name=".ActivityDiaryEdit"></activity></application><uses-sdk android:minsdkversion="5"></uses-sdk></manifest> 

  

package us.imnet.iceskysl.db.notepad;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
/**
 * 对数据库做增,删,改,查操作的主界面
 * @author xuzhenqin
 *
 */
public class ActivityMain 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 diaryDb ;
 
 /**
  * 数据库返回结果对象
  */
 private Cursor cursor;
 
 public void onCreate(Bundle bundle)
 {
  super.onCreate(bundle);
  
  //加载界面配置文件
  setContentView(R.layout.diary_list);
  
  //获得数据库对象
  diaryDb = new DiaryDbAdapter(this);
  
  //打开数据库连接
  diaryDb.open();
  
  //显示查询出来的所有数据
  showListView();
 }
 
 /**
  * 查询数据表中所有数据
  */
 private void showListView()
 {
  //查询全部表记录
  cursor = diaryDb.getAllNotes();
  
  //
  String[] from = new String[]{DiaryDbAdapter.KEY_TITLE,DiaryDbAdapter.KEY_BODY};
  int[] to = new int[]{R.id.text1,R.id.created};
  
  //组装ListAdapter数据
  //第一个参数控件布局界面,放Context
  //第二个参数对象放数据Cursor
  //第三个参数数据绑定到用户界面的名称
  //第四个参数数据绑定到用户界面的控件
  ListAdapter cursorAdapter = new SimpleCursorAdapter(this,R.layout.diary_row,cursor,from,to);
  
  //将组装的ListAdapter放入ListActivity中
  setListAdapter(cursorAdapter);
 }
 
 /**
  * 创建菜单
  */
 public boolean onCreateOptionsMenu(Menu menu)
 {
  super.onCreateOptionsMenu(menu);
  
  //第一个参数菜单组名
  //第二个参数设置菜单ID
  //第三个参数菜单顺序标识
  //第四个参数菜单在界面显示的内容
  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)
 {
  //获得菜单ID
  switch(item.getItemId())
  {
   case INSERT_ID:
    Log.i("INSERT:", String.valueOf(INSERT_ID));
    //创建新记录
    createDiary();
    return true;
   case DELETE_ID:
    Log.i("DELETE_ID:", String.valueOf(getListView().getSelectedItemId()));
    //删除选择的记录
    diaryDb.deleteDiary(getListView().getSelectedItemId());
    //显示新列表
    showListView();
    return true;
  }
  //不做操作返回
  return super.onMenuItemSelected(featureId, item);
 }
 /**
  * 创建新记录
  */
 private void createDiary() {
  
  //创建新记录是切换界面
  //第一个参数传入的本对象
  //第二个参数为新创建的界面
  Intent intent = new Intent(this,ActivityDiaryEdit.class);
  
  //启动Activity切换界面
  startActivityForResult(intent, ACTIVITY_CREATE);
 }
 
 /**
  * 单击一条记录是弹出修改界面
  */
 protected void onListItemClick(ListView l, View v, int position, long id)
 {
  super.onListItemClick(l, v, position, id);
  Cursor c = cursor;
  //将指针指向单击的那条记录
  c.moveToPosition(position);
  
  //创建新记录是切换界面
  //第一个参数传入的本对象
  //第二个参数为新创建的界面
  Intent intent = new Intent(this,ActivityDiaryEdit.class);
  
  //增加选择的记录,传送到新界面用于填充对应的控件值
  intent.putExtra(DiaryDbAdapter.KEY_ROWID, id);
  intent.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c
    .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));
  intent.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c
    .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));
  
  //启动Activity切换界面
  startActivityForResult(intent, ACTIVITY_EDIT);
 }
 
 /**
  * 新增或修改界面结束后返回到此界面来所接收的动作
  */
 protected void onActivityResult(int requestCode, int resultCode,
   Intent intent) {
  super.onActivityResult(requestCode, resultCode, intent);
  showListView();
 }
}
[/code]
[code="java"]
package us.imnet.iceskysl.db.notepad;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
 * 增加内容Activity
 * @author xuzhenqin
 *
 */
public class ActivityDiaryEdit extends Activity {
 
 /**
  * 增加标题文本框
  */
 private EditText title;
 
 /**
  * 增加内容文本框
  */
 private EditText body;
 
 /**
  * 确定按钮
  */
 private Button button;
 
 /**
  * 行ID
  */
 private Long rowId;
 
 /**
  * 操作数据库对象
  */
 private DiaryDbAdapter diaryDb;
 
 @Override
 public void onCreate(Bundle bundle)
 {
  super.onCreate(bundle);
  
  //加载界面配置文件
  setContentView(R.layout.notepad);
  
  //获得数据库对象
  diaryDb = new DiaryDbAdapter(this);
  
  //根据配置文件ID获得标题文本框对象
  title = (EditText)findViewById(R.id.title);
  
  //根据配置文件ID获得内容文本框对象
  body = (EditText)findViewById(R.id.body_text);
  
  //根据配置文件ID获得按钮对象
  button = (Button)findViewById(R.id.button);
  
  rowId = null;
  
  //通过前置页面传入的Intent获得传入的Bundle对象
  //Intent在Android中用于两个Actitvity之间传数据使用
  //Bundle对象与JDK中的MAP对象类似,以键值对形式存方法数据
  Bundle bund = getIntent().getExtras();
  
  if(bund != null)
  {
   Log.i("bund:",bund.toString());
   //获得前置页面中传入的title值
   String title_db = bund.getString(DiaryDbAdapter.KEY_TITLE);
   
   //获得前置页面中传入的body值
   String body_db = bund.getString(DiaryDbAdapter.KEY_BODY);
   
   //获得前置页面中传入的rowid值
   rowId = bund.getLong(DiaryDbAdapter.KEY_ROWID);
   
   if(title_db != null)
   {
    title.setText(title_db);
   }
   if(body_db != null)
   {
    body.setText(body_db);
   }
  }
   
  //增加button的点击事件
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    String title_db = title.getText().toString();
    String body_db = body.getText().toString();
    
    //打开数据库连接
    diaryDb.open();
    
    //根据是否有前置rowid来判断是否为修改或新建
    if(rowId != null)
    {
     diaryDb.updateDiary(rowId, title_db, body_db);
    }
    else
    {
     diaryDb.createDiary(title_db, body_db);
    }
    //关闭数据库连接
    diaryDb.close();
    
    //增加或修改数据后回到前置界面
    Intent mIntent = new Intent();
    setResult(RESULT_OK, mIntent);
    
    //刷新新界面
    finish();
   }
  });
 }
}
 

  源代码下载:http://u.115.com/file/f73d12d62

     来源:http://chenjinglys.blog.163.com/blog/static/166575716201131395435751/

Tiwer
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值