`
jandroid
  • 浏览: 1934421 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

操作数据库之一(实现SQLiteOpenHelper绑定ListView)

阅读更多

实现的效果是页面上有个EditText和一个ListView,menu中添加了三个按钮,分别是add、update、delete。
初始化页面时绑定ListView.
(1)新增:当EditText写好内容后,点击add,实现保存到数据库中,并同时刷新ListView(EditText为空时不保存)。
(2)修改:点击ListView中的某一项,内容显示在EditText中,修改后点击Menu中的Update实现保存;
(3)删除:点击ListView中的一项,点击Menu中的delete按钮,实现删除。
很简单,代码贴出来,直接可以运行的。

SimpleCursorAdapter:程序使用了适配器SimpleCursorAdapter,它的 五个参数依次是:this,布局文件,Cursor实例,一个包含数据库的列的String型数组,一个包含布局文件中对应组件id的int型数组。 SimpleCursorAdapter做的工作就是自动的将String型数组所表示的每一列数据映射到布局文件对应id的组件上。

Cursor类似于java.sql.ResultSet,很多方法名称不一样,但是功能不一样。


操作数据库的类DBOperation.java

package test.shi;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DBOperation extends SQLiteOpenHelper {

private final static  String DATABASE_NAME="betty_db1";
private final static  int DATABASE_VERSION=1;
private final static  String TABLE_NAME="betty_table1";

//因为SimpleCursorAdapter构造中必须有个字段是_id,否则会报错
//所以此处使用_id
public final static  String FIELD_ID="_id";
public final static  String FIELD_TEXT="betty_text";

public DBOperation(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
// TODO Auto-generated constructor stub

}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql="create table "+TABLE_NAME+" ("+FIELD_ID
+" integer primary key autoincrement,"+
""+FIELD_TEXT+" text)";


db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
// TODO Auto-generated method stub
String sql ="drop table if exists "+TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}

public Cursor select()
{
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;

}

public long insert(String text)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();

cv.put(FIELD_TEXT,text);
long row=db.insert(TABLE_NAME, null,cv);
return row;
}

public void update(int _id,String text)
{
SQLiteDatabase db=this.getWritableDatabase();
String where=FIELD_ID+"=?";
String[] strwhere={Integer.toString(_id)};
ContentValues cv=new ContentValues();
cv.put(FIELD_TEXT, text);
db.update(TABLE_NAME, cv, where, strwhere);
}

public void delete(int _id)
{
SQLiteDatabase db=this.getWritableDatabase();
String where=FIELD_ID+"=?";
String[] strwhere={Integer.toString(_id)};
db.delete(TABLE_NAME, where,strwhere);

}

}

主程序类文件DBTest.java

package test.shi;

import test.toshiba.R;
import android.app.Activity;
import android.database.*;
import android.database.sqlite.*;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;

public class DBTest extends Activity {

private DBOperation myDBOperation;
private Cursor myCursor;
private ListView myListView;
private EditText myEditText;
private int _id;
private final static int MENU_ADD = Menu.FIRST;
private final static int MENU_UPDATE = Menu.FIRST + 1;
private final static int MENU_DELETE = Menu.FIRST + 2;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

try {
setContentView(R.layout.dboperationlayout);

myListView = (ListView) findViewById(R.id.myListView);
myEditText = (EditText) findViewById(R.id.myEditText);

myDBOperation = new DBOperation(this);
myCursor = myDBOperation.select();

//必须有个字段是_id,否则会报错
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.lstview_simple_layout, myCursor,
new String[] { DBOperation.FIELD_TEXT },
new int[] { R.id.ItemText });

myListView.setAdapter(adapter);

myListView
.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
myCursor.moveToPosition(arg2);
_id = myCursor.getInt(0);
myEditText.setText(myCursor.getString(1));
}

});

myListView
.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub

SQLiteCursor sc = (SQLiteCursor) arg0
.getSelectedItem();
_id = sc.getInt(0);
myEditText.setText(sc.getString(1));
Log.d("shi","setOnItemSelectedListener:");
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

}

});
} catch (Exception ex) {
Log.e("shi", "ex:" + ex.toString());
ex.printStackTrace();
}
}

private void addTodb() {
try {
if (myEditText.getText().toString().equals(""))
return;
myDBOperation.insert(myEditText.getText().toString());
myCursor.requery();
myListView.invalidateViews();
myEditText.setText("");
_id = 0;
} catch (Exception ex) {
Log.d("shi", ex.toString());
ex.printStackTrace();

}
}

private void editdb() {
try {
if (_id == 0)
return;
myDBOperation.update(_id, myEditText.getText().toString());
myCursor.requery();
myListView.invalidateViews();
myEditText.setText("");
_id = 0;
} catch (Exception ex) {
Log.e("shi", "editdb():" + ex.toString());
ex.printStackTrace();
}
}

private void deletedb() {
try {
if (_id == 0)
return;
myDBOperation.delete(_id);
myCursor.requery();
myListView.invalidateViews();
myEditText.setText("");
_id = 0;
} catch (Exception ex) {
Log.e("shi", "deletedb:" + ex.toString());
ex.printStackTrace();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ADD, 0, "add");
menu.add(Menu.NONE, MENU_UPDATE, 0, "update");
menu.add(Menu.NONE, MENU_DELETE, 0, "delete");
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case MENU_ADD:
addTodb();
break;
case MENU_UPDATE:
editdb();
break;
case MENU_DELETE:
deletedb();
break;
default:
break;

}

return true;

}

}


布局页面dboperationlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

</EditText>
<ListView
android:id="@+id/myListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView>

</LinearLayout>

ListView式样页面lstview_simple_layout.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">
<TextView android:text="TextView02" android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/ItemText" />
</LinearLayout>

分享到:
评论
2 楼 wangqi0614 2011-12-05  
我照着上面的代码做,myDBOperation.insert(myEditText.getText().toString());会报空指针,存不了值啊
1 楼 chenqirang 2011-10-28  
非常感谢,这个和我要做的App相似度在85%左右了~~~~终于可以交作业了

相关推荐

    数据库的增删改查——绑定Listview

    至此,我们已经实现了使用SQLite数据库进行数据操作,并将数据绑定到Listview进行显示。同时,我们也为ListView的item设置了点击事件和长按点击事件。在实际开发中,你可以根据需求对这些事件进行具体处理,例如跳转...

    ListView与数据库SQLite的绑定

    本篇将详细讲解如何将SQLite数据库与ListView绑定,以实现数据的高效展示。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常通过扩展`SQLiteOpenHelper`类来完成这个任务。在这个类中,我们需要重写`...

    Android移动应用开发之使用ListView+SQLiteOpenHelper实现商品列表添加删除的界面

    Android移动应用开发之使用ListView+SQLiteOpenHelper实现商品列表添加删除的界面 能够输入数据然后添加到数据库,ListView会自动展现数据库的内容,点击删除能够将...3. 绑定数据库的操作以及对ListView的操作到按钮上

    kotlin+SQLite+ListView实现简单的数据库操作

    本教程将探讨如何使用Kotlin与SQLite结合,通过ListView展示数据,实现简单的数据库操作。 首先,我们需要在Kotlin项目中添加SQLite库的支持。在`build.gradle`模块文件中,添加以下依赖: ```groovy dependencies ...

    Android 数据库 SQlite 范例 SQLiteOpenHelper

    这篇教程将深入探讨如何使用SQLiteOpenHelper进行数据库操作,并结合ListView展示数据,同时也会讲解Menu键的使用。 首先,让我们了解SQLiteOpenHelper的主要方法。`onCreate()`方法会在数据库首次创建时被调用,...

    android复制数据库到SD卡打开加载listview

    在Android开发中,将数据库复制到SD卡并利用ListView展示数据是常见的操作。SQLite是Android系统内置的关系型数据库,用于存储应用数据。本教程将详细解释如何实现这一过程。 首先,我们需要创建一个SQLite数据库,...

    Android实现ListView的增删改查Demo

    这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询操作。这个Demo通常会结合SQLite数据库来存储和管理数据,因为SQLite是...

    简易便签(listview实现数据库链接)

    【简易便签(listview实现数据库链接)】项目是一个基于Android平台的应用,它利用ListView组件和SQLite数据库来创建一个简单的记事本功能。这个应用的核心是通过ListView展示用户输入的数据,并将这些数据存储到...

    ListView实现二级菜单

    一级菜单的ListView可以通过SimpleCursorAdapter绑定SQLite查询结果。二级菜单的ListView需要监听一级菜单的选择事件,动态更新数据源并刷新。 ```java // 主Activity public class MainActivity extends ...

    android读取sqlite数据库的数据并用listview显示

    在Android中,通常会创建一个SQLiteOpenHelper的子类,如`DatabaseHelper`,用于管理数据库的创建和升级。在这个类中,我们需要重写`onCreate()`和`onUpgrade()`方法。`onCreate()`用于首次创建数据库时执行的初始化...

    listview绑定

    在实际应用中,我们常常需要将数据库中的数据绑定到ListView上,以便用户查看和操作。下面我们将深入探讨如何实现这个过程。 1. **ListView的基本结构** - `ListView`由一系列`ListView项`(ListView Item)组成,...

    Android Studio如何获取SQLite数据并显示到ListView上

    为了将数据绑定到ListView,你需要创建一个适配器。这里使用了`SimpleAdapter`,它接受一个数据集、布局文件ID、数据键值对和对应的视图ID。在数据集(listItem)中,每个条目是一个HashMap,键值对对应于ListView项...

    Android案例:通讯录。利用SQLite+ListView,实现通讯录增删查改

    总之,这个案例涵盖了Android开发中关于SQLite数据库操作和ListView使用的基础知识,包括数据模型设计、数据库操作、UI交互和数据绑定。通过这个项目,开发者可以深入理解Android数据存储和UI组件的运用,为后续更...

    Android中显示数据库信息.pdf

    Android 中显示数据库信息 ...Android 中显示数据库信息需要了解 SQLite Database、创建数据库、数据库操作、显示数据库信息、数据绑定、事件处理、Android 项目结构和 Android 中的数据存储等知识点。

    数据库 ListView 简单的管理系统

    在文件"数据库+ListView 简单的管理系统"中,可能包含了数据库的创建和操作示例代码,ListView的布局文件,适配器的实现,以及主Activity的代码。通过分析这些代码,开发者可以学习到如何将数据库与UI组件相结合,...

    contentprovider实现数据库访问

    在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构化,并提供给其他应用进行安全的读写操作,包括增、删、改、查等基本功能。...

    通过sqlite数据库实现的曾珊盖查的通讯录

    总结来说,这个“通过SQLite数据库实现的曾珊盖查的通讯录”应用利用SQLite数据库存储和管理联系人数据,通过`ListView`实时显示和交互,结合Android的数据库工具类和UI组件,提供了完整的联系人管理功能。

    listviewactivity

    在这个名为"listviewactivity"的项目中,我们看到开发者实现了一个基本的ListView,并将数据显示在ListView上,同时支持将数据存储到数据库以及从数据库中导出数据。下面我们将详细探讨相关的知识点。 1. **...

    android sqllite数据库的增删改查、listview优化

    接下来,将SQLite数据展示在ListView上,我们需要创建一个自定义的Adapter,它负责将数据绑定到ListView的每个列表项。常见的做法是创建一个继承自BaseAdapter的类,重写`getCount()`、`getItem()`、`getItemId()`和...

    项目工程代码ListView+Sqlite

    ListView是一种可滚动的视图,用于显示大量的数据项,而SQLite则是一个轻量级的数据库系统,用于存储和管理应用程序的数据。接下来,我们将深入探讨这两个技术及其在实际项目中的结合使用。 ### ListView ListView...

Global site tag (gtag.js) - Google Analytics