Android数据库的增删改查和ListView以及页面跳转的实现

不多说什么,直接看代码:先创建一个person实体对象。
import java.io.Serializable;

public class Person implements Serializable{
	private static final long serialVersionUID=1L;
	private Integer id;
	private String name;
	private String phone;
	private Integer amount;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public Integer getAmount() {
		return amount;
	}
	public void setAmount(Integer amount) {
		this.amount = amount;
	}
	public Person(String name, String phone, Integer amount) {
		super();
		this.name = name;
		this.phone = phone;
		this.amount = amount;
	}
	public Person(int id,String name, String phone, Integer amount) {
		super();
		this.id=id;
		this.name = name;
		this.phone = phone;
		this.amount = amount;
	} 

<h2>}
<span style="color:#ff0000;">创建DBOpenHelper类通过继承SQLiteOpenHelper类来实现数据库的创建和更新。重写SQLiteOpenHelper 的onCreate、onUpgrade方法</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBOpenHelper extends SQLiteOpenHelper {

	private static final String tag="DBSQLiteHelper";
	private static final String name="bobge.db";
	private static final int version=1;
	public DBOpenHelper(Context context) {
		super(context, name, null, version);
		Log.v(tag, "构造器");
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),phone varchar(20),amount integer)");
        Log.v(tag, "数据库创建执行一次");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS person");
		onCreate(db);

	}

}

创建PersonDao类实现对person实体数据的增删改查操作。

getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

注意:getWritableDatabase(),getReadableDatabase的区别是当数据库写满时,调用前者会报错,调用后者不会,所以如果不是更新数据库的话,最好调用后者来获得数据库连接。

<span style="font-family: Arial, Helvetica, sans-serif;">import java.util.ArrayList;</span>
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import dbSQLiteOPenHelper.db.domain.Person;
import dbSQLiteOPenHelper.service.DBOpenHelper;

public class PersonDao {
	private DBOpenHelper dbOpenHelper;

	public PersonDao(Context context) {
		this.dbOpenHelper = new DBOpenHelper(context);
	}
	public void save(Person person){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		db.execSQL("insert into person(name,phone,amount) values (?,?,?)",
		new Object[]{person.getName(),person.getPhone(),person.getAmount()});

	}
	public void delete(Integer id){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		db.execSQL("delete from person where id=?",
		new Object[]{id});
	}
	public void update(Person person){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		db.execSQL("update person set name=?,phone=?,amount=? where id=?",
		new Object[]{person.getName(),person.getPhone(),person.getAmount(),person.getId()});
	}
	public Person find(Integer id){
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		Cursor cursor=db.rawQuery("select * from person where id=?",
				new String[]{id.toString()});
		if(cursor.moveToFirst())
		{
			int personid=cursor.getInt(cursor.getColumnIndex("id"));
			String name=cursor.getString(cursor.getColumnIndex("name"));
			String phone=cursor.getString(cursor.getColumnIndex("phone"));
			int money=cursor.getInt(cursor.getColumnIndex("amount"));
			return new Person(personid,name,phone,money);
		}
		cursor.close();
		return null;
	}
	public List<Person> getScrollData(int offset,int maxResult){
		List<Person> persons=new ArrayList<Person>();
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		Cursor cursor=db.rawQuery("select * from person order by id asc limit ?,?",
				new String[]{String.valueOf(offset),String.valueOf(maxResult)});
		while(cursor.moveToNext())
		{
			int personid=cursor.getInt(cursor.getColumnIndex("id"));
			String name=cursor.getString(cursor.getColumnIndex("name"));
			String phone=cursor.getString(cursor.getColumnIndex("phone"));
			int money=cursor.getInt(cursor.getColumnIndex("amount"));
			persons.add(new Person(personid,name,phone,money));
		}
		cursor.close();
		return persons;
	}
	public long getCount()
	{
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		Cursor cursor=db.rawQuery("select count(*) from person",null);
		cursor.moveToFirst();
		long result=cursor .getLong(0);
		return result;

	}
}<span style="color:#ff0000;">
</span>

Android工程的主界面,可以输入姓名、电话和存款。点击保存按钮能够实现将以上数据保存到sqlite数据库中。并且设置了一个显示数据库数据按钮,能够将数据显示到ListView控件中,实现页面跳转。

import dbSQLiteOPenHelper.db.dao.PersonDao;
import dbSQLiteOPenHelper.db.domain.Person;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	Button listDate=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listDate=(Button) findViewById(R.id.list_show);
		listDate.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent=new Intent();
				intent.setClass(MainActivity.this, SecondActivity.class);
				startActivity(intent);

			}
		});

	}
	public void testSave(View v) throws Exception{
		EditText nameText=(EditText)findViewById(R.id.name);
		EditText phoneText=(EditText)findViewById(R.id.phone);
		EditText amountText=(EditText)findViewById(R.id.amount);
		String name=nameText.getText().toString();
		String phone=phoneText.getText().toString();
		int amount=Integer.parseInt(amountText.getText().toString());
		PersonDao personService=new PersonDao(v.getContext());
		Person person=new Person(name,phone,amount);
		personService.save(person);
		Toast.makeText(v.getContext(), R.string.successful, 1).show();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

SecondActivity 用来显示listView控件的内容,同时设置了一个返回按钮,能够返回上一页。


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import dbSQLiteOPenHelper.db.dao.PersonDao;
import dbSQLiteOPenHelper.db.domain.Person;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class SecondActivity extends Activity {
	 private List<Person> persons = new ArrayList<Person>();
	 private ListView listView;
	 private Button button;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_listshow);
		listView=(ListView)this.findViewById(R.id.listView);
		show();
		button=(Button)this.findViewById(R.id.back);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent=new Intent();
				intent.setClass(SecondActivity.this, MainActivity.class);
				startActivity(intent);
			}
		});

	}
	private void show()
	{
		PersonDao person=new PersonDao(getApplicationContext());
		persons=person.getScrollData(0, 5);
		List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();  

        for(Person p : persons){
            HashMap<String, Object> hm = new HashMap<String, Object>();
            hm.put("name", p.getName());
            hm.put("phone", p.getPhone());
            hm.put("amount", p.getAmount());
            data.add(hm);
        }  

        SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.item,
                    new String[]{"name","phone","amount"},
                    new int[]{R.id.name,R.id.phone,R.id.amount});
        listView.setAdapter(adapter);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

activity_listshow.xml设置第显示listView控件的页面(也就是第二个跳转的页面)。

<?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="fill_parent"
    android:orientation="vertical" >  

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >      

        <TextView
            android:textSize="22sp"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="@string/name" />  

        <TextView
            android:textSize="22sp"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="@string/phone" />  

        <TextView
            android:textSize="22sp"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="@string/amount" />  

    </LinearLayout>  

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>  

      <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/back"
        android:id="@+id/back"/>
</LinearLayout> 

activity_main.xml主界面。用来输入需要存入的数据。

</pre><pre name="code" class="html"><?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:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/name" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        />
	<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/phone"
        />
	<EditText
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:id="@+id/phone"/>
	<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/amount"
        />
	<EditText
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:id="@+id/amount"/>
<LinearLayout
    android:orientation="horizontal"
   	android:layout_width="fill_parent"
   	android:layout_height="fill_parent"
   	>
	<Button
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="@string/button"
	    android:id="@+id/button"
	    android:onClick="testSave"
	    />
	<Button
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="@string/list_show"
	    android:id="@+id/list_show"
	    android:onClick="listShow"
	    />
	</LinearLayout>
	</LinearLayout>

item.xml用来显示ListView控件的字段信息。


<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >  

    <TextView
        android:id="@+id/name"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textSize="22sp" />  

    <TextView
        android:id="@+id/phone"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textSize="22sp" />  

    <TextView
        android:id="@+id/amount"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textSize="22sp" />  

</LinearLayout>

页面字符串配置页面(String.xml)

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

    <string name="app_name">ListView应用</string>
    <string name="name">姓名</string>
    <string name="phone">电话</string>
    <string name="amount">金额</string>
	<string name="button">保存</string>
	<string name="action_settings">设置</string>
	<string name="successful">保存成功</string>
	<string name="list_show">显示数据库数据</string>
	<string name="back">返回</string>
</resources>

时间: 2024-10-02 13:09:19

Android数据库的增删改查和ListView以及页面跳转的实现的相关文章

android 数据库的增删改查

主java package com.itheima.crud; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import com.ithei

Android学习--------实现增删改查数据库操作以及实现类似微信好友对话管理操作

最近的一个实验用到东西挺多,特地总结一下. 要求功能: 1.第一个页面添加歌曲名和歌手,跳到第二个页面列表显示所有记录,使用sqlite数据库 2.对于第二个页面显示的信息可以进行删除和修改操作,并自动刷新 最后我做的效果: 长按列表项弹出单个管理的菜单,像微信好友对话管理一样. 删除时可以直接删除这一条并在列表中直接显示,更新时弹出对话框更新内容提交后在列表中重新显示. 做此例遇到的困难: 1.菜单获取上下文 2.获取对话框中的内容 3.对话框按钮添加监听事件-----注意包不要导错:impo

android中SQLite数据库的增删改查

1.数据库帮助类PersonSQLiteOpenHelper package com.wzw.sqllitedemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper

【Visual Basic】vb6的ListView控件,对Access2003数据库的增删改查,判断是否有中文、多窗体操作

vb6对Access2003数据库的增删改查并不复杂,可以通过ado对象轻松完成,下面举个小例子,同时说明vb6中的ListView控件的使用.虽然在<[Visual Basic]列表控件ListView的增删改查.模态对话框.禁止窗口调整大小>曾经对VB.NET的ListView控件进行详细的说明,但是证明微软就是个坑爹货,vb6对于ListView实现的代码居然跟VB.NET有着彻底的不同,似乎换了一门语言似得的.改代码什么的最讨厌的. 首先,在vb6生成的工程文件夹中有着一个db1.md

Android学习---SQLite数据库的增删改查和事务(transaction)调用

上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代码实现增删查改: 1.创建DB工具类 MyDBHelper.java(创建数据库的操作) package com.amos.android_db; import android.content.Context; import android.database.sqlite.SQLiteDatabas

Android下利用SQLite数据库实现增删改查

1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法的使用了 bean对象: public class Person { private int id; private String name; private String number; } 数据库的创建以及表的创建: package com.example.db; import android.

利用API方式进行数据库的增删改查

1 /* 2 将数据库的增删改查单独放进一个包 3 */ 4 package com.itheima28.sqlitedemo.dao; 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import android.content.ContentValues; 9 import android.content.Context; 10 import android.database.Cursor; 11 import andro

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码: