Android 数据存储----SQLite

本文介绍了如何在Android中使用SQLite进行数据存储,包括 BOOLEAN 类型的布尔数据操作,以及演示了简单的联系人信息存储的Demo。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


数据库  SQLite

  Oracle    SQLServer   mySql  SQLite  关系型数据

SQLite 数据库

Android系统中集成了轻量级的数据SQLite
一, 特点:
 
轻量级  只有一个动态的库, 是以单个文件的形式进行存取

零配置 无需安装

跨平台  支持多个操作系统

嵌入式  嵌入手机

        在程序的内部,任何位置都能通过数据库的名称访问数据库, 其他用于程序无法通过数据库的名称对其访问

路径:  data/data/应用程序包名/database/****

二  , 数据存储的类型

NULL     空值
INTEGER  整型
VARCHAR  可变长度的字符数据
TEXT     文本字符串

BOOLEAN  布尔


三, sql语句
1, 创建表

  create table if not exists  表名(字段名称  字段类型  primary key autoincrement,字段名称  字段类型,.....)

  create table if not exists user(_id integer primary key autoincrement,name varchar(20),age integer)

2, 插入数据

  insert into 表名(字段S)  values(值S)

  insert into user(name,age) values('小明',20)

3, 修改数据


  update 表名  set 字段名称=值  where 字段 = 值

  update user set name='小攀' where _id=1

4, 查询数据

  select (字段S) from 表名  where 字段 = 值

  select * from user

  模糊查询:  select * from 表名  where  name like '%o%'

5, 删除数据

  delete  from  表名 where  字段 = 值

  delete   from user where _id=2


 四, 操作数据库的核心类

1, SQLiteDatabase      管理和操作数据库

特点:

提供了一个管理数据库的类

提供了增删改查的方法

数据库的名称是唯一的, 创建一次之后就是打开数据


获取数据库对象的方法

Context.openOrCreateDatabase(String name, int mode, CursorFactory factory);


        SQLiteDatabase 主要提供的方法

void execSQL(String sql)   执行sql语句
Cusor rawQuery(String sql,String[] selectionArgs)  查询数据库符合要求的内容


封装好的方法: 适用于不懂SQL语句的用户


insert()   插入数据到指定的表中
update()   修改指定表中的数据
query()   查询表中的指定内容
delete()   删除表中指定的数据





2, SQLiteOpenHelper    用于数据库的创建和版本的更新


3, Cursor   游标

默认游标的位置显示在数据之上


boolean cursor.move(int offset)  游标向上或向下移动指定的行数 , 如果offset为正数,则表示向上移动; 如果为负数 表示向下移动; 并且判断当前数据是否存在


boolean cursor.moveToNext()  游标移动到下一条数据, 并且判断下一条数据是否存在


boolean cursor.moveToPrevious()  游标移动到上一条数据, 并且判断上一条数据是否存在


boolean cursor.moveToFirst()游标移动到第一条数据, 并且判断第一条数据是否存在

package com.qf.day13_phonebook;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.qf.day13_phonebook.db.DbService;

public class MainActivity extends Activity {

	//控件
	private ListView lv;
	//数据源
	private Cursor cursor;
	//适配器
	private SimpleCursorAdapter adapter;
	
	private DbService dbService;
	
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.lv);
        
        dbService = new DbService(this);
        
    }
    
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	
    	setListAdapter();
    	
    	lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					final int position, long id) {
				
				AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
				
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle("请选择你的操作");
				
				builder.setItems(new String[]{"编辑联系人","删除联系人"}, new OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 点击的是那个Item
						switch (which) {
						case 0:
							//编辑联系人
							
							//1, 游标指向指定的数据
							if(cursor.moveToPosition(position))
							{
								//2, 从游标中获取当前点击的Item 对应的  姓名+电话
								int id = cursor.getInt(cursor.getColumnIndex("_id"));
								String name = cursor.getString(cursor.getColumnIndex("name"));
								String phone = cursor.getString(cursor.getColumnIndex("phone"));
								
								//3, 带着参数  进入编辑页面
								Intent intent = new Intent(MainActivity.this, EditActivity.class);
								intent.putExtra("id", id);
								intent.putExtra("name", name);
								intent.putExtra("phone", phone);
								intent.putExtra("isAdd", false);
								startActivity(intent);
								
							}
							
							break;

						case 1:
							//删除联系人
							
							AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);
							builder2.setIcon(R.drawable.ic_launcher);
							builder2.setTitle("提示");
							builder2.setMessage("是否确认删除?");
							
							builder2.setNegativeButton("取消", null);
							builder2.setPositiveButton("确定", new OnClickListener() {
								
								@Override
								public void onClick(DialogInterface dialog, int which) {
									//1, 游标移动到指定的位置
									if(cursor.moveToPosition(position))
									{
										//2, 获取当前游标指向的ID
										int id = cursor.getInt(cursor.getColumnIndex("_id"));
										
										//从数据库中删除数据
										dbService.delete(id);
										
										//把游标创建的方法再次执行一次
										//cursor.requery();
										setListAdapter();
									}
									
									
								}
							});
							
							builder2.show();
							
							break;
						}
						
					}
				});
				
				builder.show();
				
			}
		});
    	
    }

    /**
     * 获取数据源  设置适配器
     */
	private void setListAdapter() {
		//数据源
    	cursor = dbService.getUsers();
    	
    	//适配器
    	adapter = new SimpleCursorAdapter(this,
    									  R.layout.item_lv, 
    									  cursor, 
    									  new String[]{"name","phone"}, 
    									  new int[]{R.id.name,R.id.phone}, 
    									  SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    	
    	//设置适配器
    	lv.setAdapter(adapter);
	}

    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	// 加载菜单布局
    	
    	getMenuInflater().inflate(R.menu.main,menu);
    	
    	return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	switch (item.getItemId()) {
    	
		case R.id.action_adduser:
			
			Intent intent = new Intent(MainActivity.this, EditActivity.class);
			
			intent.putExtra("isAdd", true);
			
			startActivity(intent);
			
			break;

		}
    	return super.onOptionsItemSelected(item);
    }
}

package com.qf.day13_phonebook;

import com.qf.day13_phonebook.db.DbService;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class EditActivity extends Activity {

	private EditText nameEdit,phoneEdit;
	
	private boolean isAdd;
	
	private DbService dbService;

	private int id;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_edit);
		
		nameEdit = (EditText) findViewById(R.id.name_edit);
		phoneEdit = (EditText) findViewById(R.id.phone_edit);
		
		//接收传入的参数
		Intent intent = getIntent();
		
		isAdd = intent.getBooleanExtra("isAdd", true);
		if(!isAdd)
		{
			id = intent.getIntExtra("id", 0);
			String name = intent.getStringExtra("name");
			String phone = intent.getStringExtra("phone");
			
			nameEdit.setText(name);
			phoneEdit.setText(phone);
		}
		
		
		//设置Activity标题
		if(isAdd)
		{
			setTitle("添加联系人");
		}else{
			setTitle("编辑联系人");
		}
		
		dbService = new DbService(this);
	}
	
	public void submit(View v)
	{
		String name = nameEdit.getText().toString().trim();
		String phone = phoneEdit.getText().toString().trim();
		
		if(isAdd)
		{
			dbService.insertUsers(name,phone);
		}
		else{
			dbService.updateUsers(id,name,phone);
		}
		
		finish();
	}


}

package com.qf.day13_phonebook.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DbOperHelper extends SQLiteOpenHelper {


	public DbOperHelper(Context context) {
		super(context, "phone_book", null, 1);
		// TODO Auto-generated constructor stub
	}

	//数据库创建时执行一次  在后台后连接数据库
	@Override
	public void onCreate(SQLiteDatabase db) {
		//初始化表
		
		db.execSQL("create table if not exists users(_id integer primary key autoincrement,name,phone)");
		
		db.execSQL("insert into users(name,phone) values('张三','153110120')");
		db.execSQL("insert into users(name,phone) values('李四','153120119')");
		db.execSQL("insert into users(name,phone) values('王五','153110911')");
		db.execSQL("insert into users(name,phone) values('赵六','153110114')");
		
	}

	//版本更新时执行
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

package com.qf.day13_phonebook.db;

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

/**
 * 操作数据库的封装类
 * 
 * @author Administrator
 *
 */
public class DbService {
	
	private Context context;
	private DbOperHelper dbOperHelper;
	
	public DbService(Context context) {
		
		this.context = context;
		
		dbOperHelper = new DbOperHelper(context);
	}
	
	//得到联系表中的所有数据
	public Cursor getUsers()
	{
		//1, 打开连接
		
		SQLiteDatabase db = dbOperHelper.getReadableDatabase();
		
		//2, 查询数据
		return db.rawQuery("select * from users", null);
	}

	//添加联系人
	public void insertUsers(String name, String phone) {
		//1, 打开连接
		SQLiteDatabase db = dbOperHelper.getWritableDatabase();
		
		//2, 插入数据
		ContentValues values = new ContentValues();
		values.put("name", name);
		values.put("phone", phone);
		
		db.insert("users", null, values);
	}

	//编辑联系人
	public void updateUsers(int id, String name, String phone) {
		
		//1, 打开连接
		SQLiteDatabase db = dbOperHelper.getWritableDatabase();
		
		//2, 修改数据
		ContentValues values = new ContentValues();
		values.put("name", name);
		values.put("phone", phone);
		
		db.update("users", values, "_id="+id, null);
		//db.update("users", values, "_id=?", new String[]{id+""});
	}

	//删除联系人
	public void delete(int id) {
		
		//打开连接
		SQLiteDatabase db = dbOperHelper.getWritableDatabase();
		
		//删除数据
		db.execSQL("delete from users where _id="+id);
	}

}
mainactivity 布局
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lv"
        android:divider="#eee"
        android:dividerHeight="2dp"
       />
etit activity布局
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名" 
        android:id="@+id/name_text"
        android:layout_marginTop="50dp"/>
    
    <EditText 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/name_edit"
        android:layout_toRightOf="@id/name_text"
        android:hint="请输入你的姓名"
        android:layout_alignBaseline="@id/name_text"
        android:background="@android:drawable/edit_text"
        />
    
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="电话" 
        android:id="@+id/phone_text"
        android:layout_below="@id/name_text"
        android:layout_marginTop="50dp"/>
    
    <EditText 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/phone_edit"
        android:layout_toRightOf="@id/phone_text"
        
        android:hint="请输入你的手机号"
        android:layout_alignBaseline="@id/phone_text"
        android:background="@android:drawable/edit_text"
        />

    
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="提交"
        android:onClick="submit"
        android:layout_below="@id/phone_text"
        android:layout_marginTop="30dp"
        android:id="@+id/btn"
        />
item_lv
  <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        android:text="姓名"
        android:textSize="25sp"
        
        />
    
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/phone"
        android:text="电话"
        android:textSize="20sp"
        android:layout_alignParentRight="true"
        android:layout_below="@id/name"
        android:layout_marginTop="10dp"
        />


boolean cursor.moveToLast()    游标移动到最后一条数据, 并且判断最后一条数据是否存在


boolean cursor.moveToPosition() 游标移动到某一条数据, 并且判断某一条数据是否存在


int cursor.getCount()    得到游标中数据的数量


取值

获取数据内容   cursor.getString(列的编号) //列的编号从0开始

根据列的名称得到列的编号:  cursor.getColumnIndex("字段名称");

小的demo 联系人存储







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值