Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/< 项目文件夹 >/databases/ 下。

另推荐一个网站 http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/
上面这篇文章很不错!
我上网找了些资料! 大部分资料是继承SQLiteDatabase,这样相对来说比较麻烦!
下面是sqllite代码
public class SqlListeHelper {
private final static String DATABASE_NAME = "test.db"; //数据库名
private final static String TABLE_NAME = "sec_pwd"; //表名
public final static String FIELD_ID = "_id"; //字段名
public final static String FIELD_TITLE = "sec_Title"; //字段名
SQLiteDatabase dba ;
Context _context ;
/**
* android.content.Context 中提供了函数 , 注: Activity 是 Context 的子类
* openOrCreateDatabase () 来创建我们的数据库
*db = context .openOrCreateDatabase(String DATABASE_NAME , int Context. MODE_PRIVATE , null );
*String DATABASE_NAME 数据库的名字
*Int MODE 操作模式 Context.MODE_PRIVATE 等
*CursorFactory 指针工厂 ,本例中传入 null ,暂不用
* @param context
*/
public SqlListeHelper(Context context) {
_context = context;
this.dba = _context.openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE, null);
createTable();
//获取数据的存储路径
System.out.println("------path["+dba.getPath()+"]--------------");
}
/**
* 创建表
*/
public void createTable() {
// TODO Auto-generated method stub
String sql = "Create table " + TABLE_NAME + "(" + FIELD_ID + " integer primary key autoincrement,"
+ FIELD_TITLE + " text )";
System.out.println("--------onCreate---------" +sql);
try {
dba.execSQL(sql); //执行sql语句 无 返回结果
} catch (Exception e) {
System.out.println("table already exists (表已存在)");
}
}
/**
* 查询表数据
* @return
*/
public List select() {
String sql = "select * from "+TABLE_NAME +" t where 1=1";
Cursor cursor = dba.rawQuery(sql, new String[]{});
int size = 0;
List list= null;
UserInfo user = null;
if(cursor !=null)
size = cursor.getCount(); //获取数据大小
list = new ArrayList();
//将指针移到第一条
cursor.moveToFirst();
//cursor.isAfterLast() 指是否到最后一条
while (!cursor.isAfterLast()){
user = new UserInfo();
user.setId(cursor.getInt(cursor.getColumnIndex(FIELD_ID)));
user.setPwd(cursor.getString(cursor.getColumnIndex(FIELD_TITLE)));
list.add(user);
//移到下条数据
cursor.moveToNext();
}
cursor.close();
return list;
}
public void insert(int id, String Title) {
// new Object[]{id,Title}; 类似 key ,value
Object[] params = new Object[]{id,Title};
String sql = "insert into " + TABLE_NAME + "("+FIELD_ID+","+FIELD_TITLE+") VALUES(?,?)";
System.out.println("addsql = " + sql);
//执行sql语句
this.dba.execSQL(sql,params);
}
}
注意的是 cursor.getColumnIndex 其实类似字符串中的indexOf 作用 也就是获取字段位置
至于 cursor.getInt () 和 cursor.getString() 我想连
接过数据库的都知道!就不多解释!
大概的就写这两个比较代表性的方法,相对来说,查询比较麻烦点! 而添加与删除和修改差不多!就不多写了!
================== Adapter 的使用 ===============
---------------------------- Adapter 重写 start --------------------------------------------------------
//重写Adapter
class MyArrayAdapter extends ArrayAdapter{
private Context _context;
private List<UserInfo> item;
public MyArrayAdapter(Context context, int textViewResourceId,List _item) {
super(context, textViewResourceId); //To change body of overridden methods use File | Settings | File Templates.
this.item = _item;
this._context = context;
}
public void add(UserInfo user) {
if(user == null)
item = new ArrayList();
item.add(user);
}
@Override
public int getCount() {
try {
if(item == null)
return 0;
else
return item.size();
} catch (Exception e) {
return 0;
}
}
@Override
public Object getItem(int position) {
if(item != null)
return item.get(position) ;
else
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View _convertView = convertView;
if (convertView == null) {
LayoutInflater factory = LayoutInflater.from(_context);
final View textEntryView = factory.inflate(
R.layout.listview_item, null);
_convertView = textEntryView;
}
UserInfo userInfo = item.get(position);
if(userInfo != null){
TextView id_tv = (TextView)_convertView.findViewById(R.id.item_idet);
if(id_tv != null)
id_tv.setText(userInfo.getId()+"");
TextView title_tv =(TextView) _convertView.findViewById(R.id.item_titileet);
if(title_tv != null)
title_tv.setText(userInfo.getPwd());
}
return _convertView;
}
}
private SqlListeHelper helper;
private static MyArrayAdapter myArrayAdapter = null;
setContentView(R.layout.main);
//new MyArrayAdapter(this, R.layout.main, getData()) 可以看重写 就知道原因
setListAdapter(new MyArrayAdapter(this, R.layout.main, getData()));
myArrayAdapter = (MyArrayAdapter)getListAdapter(); //此处 myArrayAdapter 为全局 方便UI改变
if(myArrayAdapter != null)
System.out.println("getCount["+myArrayAdapter.getCount()+"]");
private List<Map<String,Object>> getData(){
List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
List data = helper.select(); //查询sqllite表中数据
Map userMap = null;
if(data == null)
return null;
return data;
}
Message ms = Message.obtain(updateUIHandler);
ms.what = UPDATEUIADAPTER;
ms.obj = u;
ms.sendToTarget();
Handler updateUIHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case UPDATEUIADAPTER:
UserInfo user = (UserInfo)msg.obj;
if(user != null && myArrayAdapter != null){
myArrayAdapter.add(user);
myArrayAdapter =(MyArrayAdapter) getListAdapter();
myArrayAdapter.notifyDataSetChanged();
}
break;
default:
break;
}
}
} ;
public class MyActivity extends ListActivity
{
private final int UPDATEUIADAPTER = 1;
private static EditText addEt = null;
private static Button addbtn = null;
private static Button querybtn = null;
private static EditText queryet = null;
private static Context _context ;
private ListView listView = null;
private SimpleAdapter adapter = null ;
private static MyArrayAdapter myArrayAdapter = null;
private SQLiteDatabase base ;
private SqlListeHelper helper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
_context = this;
helper = new SqlListeHelper(_context);
// base = helper.getWritableDatabase();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = new ListView(_context);
//
setListAdapter(new MyArrayAdapter(this, R.layout.main, getData()));
myArrayAdapter = (MyArrayAdapter)getListAdapter();
if(myArrayAdapter != null)
System.out.println("getCount["+myArrayAdapter.getCount()+"]");
addEt = (EditText)findViewById(R.id.addet);
queryet = (EditText)findViewById(R.id.queryet);
addbtn = (Button)findViewById(R.id.addbtn);
querybtn = (Button)findViewById(R.id.querybtn);
addbtn.setOnClickListener(addBtnOnClickListener);
querybtn.setOnClickListener(queryBtnOnClickListener);
}
private List<Map<String,Object>> getData(){
List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
List data = helper.select();
Map userMap = null;
if(data == null)
return null;
return data;
}
View.OnClickListener addBtnOnClickListener = new View.OnClickListener(){
public void onClick(View view) {
Toast.makeText(_context,"你好哈!",Toast.LENGTH_LONG).show();
if(addEt.getText().toString().equals(""))
return;
else{
String addStr = addEt.getText().toString();
UserInfo u = new UserInfo();
u.setPwd("hi![" + addStr + "]");
u.setId(Integer.parseInt(addStr.trim()));
helper.insert(Integer.parseInt(addStr.trim()), "hi![" + addStr + "]");
Message ms = Message.obtain(updateUIHandler);
ms.what = UPDATEUIADAPTER;
ms.obj = u;
ms.sendToTarget();
}
}
} ;
Handler updateUIHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case UPDATEUIADAPTER:
UserInfo user = (UserInfo)msg.obj;
if(user != null && myArrayAdapter != null){
myArrayAdapter.add(user);
myArrayAdapter =(MyArrayAdapter) getListAdapter();
myArrayAdapter.notifyDataSetChanged();
}
break;
default:
break;
}
}
} ;
View.OnClickListener queryBtnOnClickListener = new View.OnClickListener(){
public void onClick(View view) {
List list = helper.select();
System.out.println("count :"+list.size());
}
};
//重写Adapter
class MyArrayAdapter extends ArrayAdapter{
private Context _context;
private List<UserInfo> item;
public MyArrayAdapter(Context context, int textViewResourceId,List _item) {
super(context, textViewResourceId); //To change body of overridden methods use File | Settings | File Templates.
this.item = _item;
this._context = context;
}
public void add(UserInfo user) {
if(user == null)
item = new ArrayList();
item.add(user);
}
@Override
public int getCount() {
try {
if(item == null)
return 0;
else
return item.size();
} catch (Exception e) {
return 0;
}
}
@Override
public Object getItem(int position) {
if(item != null)
return item.get(position) ;
else
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View _convertView = convertView;
if (convertView == null) {
LayoutInflater factory = LayoutInflater.from(_context);
final View textEntryView = factory.inflate(
R.layout.listview_item, null);
_convertView = textEntryView;
}
UserInfo userInfo = item.get(position);
if(userInfo != null){
TextView id_tv = (TextView)_convertView.findViewById(R.id.item_idet);
if(id_tv != null)
id_tv.setText(userInfo.getId()+"");
TextView title_tv =(TextView) _convertView.findViewById(R.id.item_titileet);
if(title_tv != null)
title_tv.setText(userInfo.getPwd());
}
return _convertView;
}
}
}

本文详细介绍了Android中SQLite数据库的基本使用方法,包括创建表、查询数据、添加与删除数据,并通过Adapter实现数据的展示与交互。同时,文章还展示了如何在ListView中使用Adapter进行数据绑定与UI更新。

7201

被折叠的 条评论
为什么被折叠?



