默认实现类: simpleXXX defaultXXX baseXXX
MVC:
mode 模型 , List<SQliteDomain>
view 试图, ListView
controller 控制器 adapter
DB_MainActivity.java
package com.example.android_4_4;
import java.util.List;
import com.example.SQLiteDB.SQliteDomain;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class DB_MainActivity extends Activity {
ListView lv;
List<SQliteDomain> listDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db_main);
lv= (ListView) findViewById(R.id.lv);
SQliteDao dao = new SQliteDao(this, "Persons.db", null, 5);
listDB = dao.showDB();
for(SQliteDomain list : listDB){
String info = list.toString();
lv.setAdapter( new MyAdapters());
}
}
/*
默认实现类 simpleXXX defaultXXX baseXXX
MVC:
mode 模型 , List<SQliteDomain>
view 试图, ListView
controller 控制器 adapter
1.首先调用getCount()确定集合中的条目
2.调用getView把每个条目创建出来 ,显示在界面布局中,
界面布局满了不在创建,当拖动屏幕时,在创建新的条目
*/
class MyAdapters extends BaseAdapter{
private static final String TAG = "MyAdapter";
@Override
//控制listview 共有多少条目,listDB集合size
public int getCount() {
return listDB.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, "return view object , position index :"+position);
TextView tv = new TextView(getApplicationContext());
Log.i(TAG, "create textview !!!");
//获取position 指向位置的单条对象 list
SQliteDomain list = listDB.get(position);
Log.i(TAG, "listDB get list !!!");
tv.setText(list.toString());
Log.i(TAG, "set test list !!!");
return tv;
}
}
}
activity_db_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="android_4_4.DB_MainActivity"
android:id="@+id/db_root">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv"/>
</LinearLayout>
SQliteDao.java
package com.example.android_4_4;
import java.util.ArrayList;
import java.util.List;
import com.example.SQLiteDB.SQliteDomain;
import com.example.SQLiteDB.sqliteDB;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class SQliteDao {
private sqliteDB helper;
//构造方法里面初始化helper
public SQliteDao(Context context, String name, CursorFactory factory,int version) {
helper = new sqliteDB(context, name, factory,version);
}
/**
* helper.getWritableDatabase(); 获取可写的数据库对象
* db.execSQL(); values (?,?) 对应数组 Object[]
* @param name 名称
* @param number 电话号码
* @param money 金额
*/
public void add(String name,String number,int money){
SQLiteDatabase db = helper.getWritableDatabase();
// db.execSQL("insert into Person (name,number) values (?,?,?)",new Object[]{name,number});
ContentValues values = new ContentValues();
values.put("name", name);
values.put("number", number);
values.put("account", money);
long id = db.insert("Person", null, values);
db.close();
}
/**
* helper.getReadableDatabase(); 只读的数据库对象
* Cursor cursor 查询返回结果集对象
* @param name
* @return true 查询存在 ,false 查询不存在
*/
public boolean find (String name){
SQLiteDatabase db = helper.getReadableDatabase();
//返回Cursor结构结果集
// Cursor cursor = db.rawQuery("select * from Person where name=?", new String[]{name});
Cursor cursor = db.query("Person",null, "name=?", new String[]{name}, null, null, null);
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
/**
* 根据 name 修改 number
* @param name
* @param newNumber
*/
public int update(String name,String newNumber){
SQLiteDatabase db = helper.getReadableDatabase();
// db.execSQL("update Person set number=? where name = ?", new Object[]{newNumber,name});
ContentValues values = new ContentValues();
values.put("number", newNumber);
int number = db.update("Person", values, "name=?", new String[]{newNumber});
db.close();
return number;
}
/**
* delete DB name
* @param name
*/
public int delete(String name){
SQLiteDatabase db = helper.getReadableDatabase();
// db.execSQL("delete from Person where name = ?", new String[]{name});
int number = db.delete("Person", "name=?", new String[]{name});
db.close();
return number;
}
/**
* 查询返回cursor 数据库指针
* 通过cursor.moveToNext()遍历数据库
* 每次结果存到 SQliteDomain listDB
* 遍历结果存到 List<SQliteDomain> listArrayDB
* @return listArrayDB 数据集合
*/
public List<SQliteDomain> showDB(){
SQLiteDatabase db = helper.getReadableDatabase();
List<SQliteDomain> listArrayDB = new ArrayList<SQliteDomain>();
// Cursor cursor = db.rawQuery("select id,name,number from Person", null);
Cursor cursor = db.query("Person", new String[]{"name","id","number"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String number = cursor.getString(cursor.getColumnIndex("number"));
SQliteDomain listDB = new SQliteDomain(name, id, number);
listArrayDB.add(listDB);
}
cursor.close();
db.close();
return listArrayDB;
}
}
sqliteDB.java
package com.example.SQLiteDB;
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 sqliteDB extends SQLiteOpenHelper {
private String TAG="sqliteDB";
/**
* 数据库构造方法,
* @param context 上下文
* @param name 数据库 name
* @param factory 游标对象。null为默认
* @param version 数据库版本
*/
public sqliteDB(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
/**
* 数据库第一次创建时调用
*/
@Override
public void onCreate(SQLiteDatabase db) {
//执行sql 语句
db.execSQL("create table Person (id integer primary key autoincrement,name varchar(20),number varchar(20)) ");
}
/**
* 当数据库版本变化时(修改了数据库表结构)调用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "数据库版本变化了");
//添加一个 account 表结构
db.execSQL("alter table Person add account varchar(20)");
}
}
SQliteDomain.java
package com.example.SQLiteDB;
public class SQliteDomain {
private String name;
private int id;
private String number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public SQliteDomain(String name, int id, String number) {
this.name = name;
this.id = id;
this.number = number;
}
public SQliteDomain() {
}
@Override
public String toString() {
return "SQliteDomain [name="+name+",id="+id+",number="+number+"]";
}
}