在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Unix等主流操作系统,同一时候可以跟非常多程序语言如C#、PHP、Java等相结合.以下先回想SQL的基本语句,再讲述Android的基本操作.

一. adb shell回想SQL语句

    首先,我感觉自己整个大学印象最深的几门课就包含《数据库》,所以想先回想SQL增删改查的基本语句.而在Android SDK中adb是自带的调试工具,它存放在sdk的platform-tools文件夹下,通过adb shell能够进入设备控制台,操作SQL语句.

G:
cd G:\software\Program software\Android\adt-bundle-windows-x86_64-20140321\sdk\platform-tools
adb shell
cd /data/data/com.example.sqliteaction/databases/
sqlite3 StuDatabase.db
.table
.schema
    例如以下所看到的我先创建了SQLiteActionproject,同一时候在project中创建了StuDatabase.db数据库.输入adb shell进入设备控制台,调用"sqlite3+数据库名"打开数据库,假设没有db文件则创建.
[Android] SQLite数据库之增删改查基础操作

    然后例如以下图所看到的,能够输入SQL语句运行增删改查.注意非常easy写错SQL语句,如忘记")"或结束";"导致cmd中调用出错.
--创建Teacher表
create table Teacher (id integer primary key, name text);
--向表中插入数据
insert into Teacher (id,name) values('10001', 'Mr Wang');
insert into Teacher (id,name) values('10002', 'Mr Yang');
--查询数据
select * from Teacher;
--更新数据
update Teacher set name='Yang XZ' where id=10002;
--删除数据
delete from Teacher where id=10001;
[Android] SQLite数据库之增删改查基础操作

二. SQLite数据库操作

   以下解说使用SQLite操作数据库:
    1.创建打开数据库
    使用openOrCreateDatabase函数实现,它会自己主动检測是否存在该数据库,假设存在则打开,否则创建一个数据库,并返回一个SQLiteDatabase对象.
    2.创建表
    通过定义建表的SQL语句,再调用execSQL方法运行该SQL语句实现建立表.

//创建学生表(学号,姓名,电话,身高) 主键学号
public static final String createTableStu = "create table Student (" +
		"id integer primary key, " +
		"name text, " +
		"tel text, " +
		"height real)";
//SQLiteDatabase定义db变量
db.execSQL(createTableStu);
    3.插入数据
    使用insert方法加入数据,事实上ContentValues就是一个Map,Key字段名称,Value值.
    SQLiteDatabase.insert(
        String table,         //加入数据的表名
        String nullColumnHack,//为某些空的列自己主动复制NULL
        ContentValues values  //ContentValues的put()方法加入数据
    );

//方法一
SQLiteDatabase db = sqlHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id", "10001");
values.put("name", "Eastmount");
values.put("tel", "15201610000");
values.put("height", "172.5");
db.insert("Student", null, values);
//方法二
public static final String insertData = "insert into Student (" +
		"id, name, tel, height) values('10002','XiaoMing','110','175')";
db.execSQL(insertData);
    4.删除数据
    使用delete方法删除表中数据,当中sqlHelper是继承SQLiteDatabase自己定义类的实例.
    SQLiteDatabase.delete(
        String table,       //表名
        String whereClause, //约束删除行,不指定默认删除全部行
        String[] whereArgs  //相应数据
    );

//方法一 删除身高>175cm
SQLiteDatabase db = sqlHelper.getWritableDatabase();
db.delete("Student", "height > ?", new String[] {"175"});
//方法二
String deleteData = "DELETE FROM Student WHERE height>175";
db.execSQL(deleteData);
    5.更新数据
    使用update方法能够改动数据,SQL+execSQL方法就不在叙述.
//小明的身高改动为180
SQLiteDatabase db = sqlHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("height", "180");
db.update("Student", values, "name = ?

", new String[] {"XiaoMing"});

    6.其它操作

    以下是关于数据库的其它操作,当中包含使用SQL语句运行,而查询数据Query方法因为涉及ListView显示,请见详细实例.

//关闭数据库
SQLiteDatabase.close();
//删除表 运行SQL语句
SQLiteDatabase.execSQL("DROP TABLE Student");
//删除数据库
this.deleteDatabase("StuDatabase.db");
//查询数据
SQLiteDatabase.query();

三. 数据库操作简单实例

    显示效果例如以下图所看到的:
[Android] SQLite数据库之增删改查基础操作 [Android] SQLite数据库之增删改查基础操作 [Android] SQLite数据库之增删改查基础操作
    首先。加入activity_main.xml文件布局例如以下:

    
然后是在res/layout中加入ListView显示的stu_item.xml:

    再次,加入自己定义类MySQLiteOpenHelper:

//加入自己定义类 继承SQLiteOpenHelper
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

	public Context mContext;
	
	//创建学生表(学号,姓名,电话,身高) 主键学号
	public static final String createTableStu = "create table Student (" +
			"id integer primary key, " +
			"name text, " +
			"tel text, " +
			"height real)";
	
	//抽象类 必须定义显示的构造函数 重写方法 
	public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, 
			int version) {
		super(context, name, factory, version);
		mContext = context;
	}
	
	@Override
	public void onCreate(SQLiteDatabase arg0) {
		// TODO Auto-generated method stub
		arg0.execSQL(createTableStu);
		Toast.makeText(mContext, "Created", Toast.LENGTH_SHORT).show();		
	}
	
	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		arg0.execSQL("drop table if exists Student");
		onCreate(arg0);
		Toast.makeText(mContext, "Upgraged", Toast.LENGTH_SHORT).show();
	}
}
    最后是MainActivity.java文件,代码例如以下:
public class MainActivity extends Activity {
	
	//继承SQLiteOpenHelper类
	private MySQLiteOpenHelper sqlHelper;
	private ListView listview;
	private EditText edit1;
	private EditText edit2;
	private EditText edit3;
	private EditText edit4;
	
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sqlHelper = new MySQLiteOpenHelper(this, "StuDatabase.db", null, 2);
        //建立新表
        Button createBn = (Button) findViewById(R.id.button1);
        createBn.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		sqlHelper.getWritableDatabase();
        	}
        });
        //插入数据
        Button insertBn = (Button) findViewById(R.id.button2);
        edit1 = (EditText) findViewById(R.id.edit_id);
        edit2 = (EditText) findViewById(R.id.edit_name);
        edit3 = (EditText) findViewById(R.id.edit_tel);
        edit4 = (EditText) findViewById(R.id.edit_height);
        insertBn.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		SQLiteDatabase db = sqlHelper.getWritableDatabase();
        		ContentValues values = new ContentValues();
        		/*
        		//插入第一组数据
        		values.put("id", "10001");
        		values.put("name", "Eastmount");
        		values.put("tel", "15201610000");
        		values.put("height", "172.5");
        		db.insert("Student", null, values);
        		*/
        		values.put("id", edit1.getText().toString());
        		values.put("name", edit2.getText().toString());
        		values.put("tel", edit3.getText().toString());
        		values.put("height", edit4.getText().toString());
        		db.insert("Student", null, values);
        		Toast.makeText(MainActivity.this, "数据插入成功", Toast.LENGTH_SHORT).show();
        		edit1.setText("");
        		edit2.setText("");
        		edit3.setText("");
        		edit4.setText("");
        	}
        });
        //删除数据
        Button deleteBn = (Button) findViewById(R.id.button3);
        deleteBn.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		SQLiteDatabase db = sqlHelper.getWritableDatabase();
        		db.delete("Student", "height > ?", new String[] {"180"});
        		Toast.makeText(MainActivity.this, "删除数据", Toast.LENGTH_SHORT).show();
        	}
        });
        //更新数据
        Button updateBn = (Button) findViewById(R.id.button4);
        updateBn.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		SQLiteDatabase db = sqlHelper.getWritableDatabase();
        		ContentValues values = new ContentValues();
        		values.put("height", "180");
        		db.update("Student", values, "name = ?", new String[] {"XiaoMing"});
        		Toast.makeText(MainActivity.this, "更新数据", Toast.LENGTH_SHORT).show();
        	}
        });
        //查询数据
        listview = (ListView) findViewById(R.id.listview1);
        Button selectBn = (Button) findViewById(R.id.button5);
        selectBn.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		try {
	        		SQLiteDatabase db = sqlHelper.getWritableDatabase();
	        		//游标查询每条数据
	        		Cursor cursor = db.query("Student", null, null, null, null, null, null);
	        		//定义list存储数据
	        		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
	        		//适配器SimpleAdapter数据绑定
	        		//错误:构造函数SimpleAdapter没有定义 需把this改动为MainActivity.this
	        		SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list, R.layout.stu_item,
	        				new String[]{"id", "name", "tel", "height"}, 
	        				new int[]{R.id.stu_id, R.id.stu_name, R.id.stu_tel, R.id.stu_height});
	        		//读取数据 游标移动到下一行
	        		while(cursor.moveToNext()) {
	        			Map<String, Object> map = new HashMap<String, Object>();
	        			map.put( "id", cursor.getString(cursor.getColumnIndex("id")) );
	        			map.put( "name", cursor.getString(cursor.getColumnIndex("name")) );
	        			map.put( "tel", cursor.getString(cursor.getColumnIndex("tel")) );
	        			map.put( "height", cursor.getString(cursor.getColumnIndex("height")) );
	        			list.add(map);
	        		}
	        		listview.setAdapter(adapter);
        		}
        		catch (Exception e){
        			Log.i("exception", e.toString());
        		}
        	}
        });
    }
}
    PS:希望文章对大家有所帮助,文章是关于SQLite的基础操作,并且没有涉及到数据库的触发器、存储过程、事务、索引等知识,网上也有非常多相关的资料.同一时候如今有门课程《数据库高级技术与开发》,故作者当个在线笔记及基础解说吧!这篇文章有一些不足之处,但作为基础文章还是不错的.
    下载地址:http://download.csdn.net/detail/eastmount/8159881
    主要參考:
    1.郭霖大神的《第一行代码Android》
    2.
android中的数据库操作By:nieweilin
(By:Eastmount 2014-11-15 夜2点
http://blog.csdn.net/eastmount/)

相关文章: