不多说什么,直接看代码:先创建一个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