第二章 数据存储之SQLite

前端之家收集整理的这篇文章主要介绍了第二章 数据存储之SQLite前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.sqlite数据库简介:


特点:


2. 支持的数据类型:只有这五种!!!!!!



3. 注意事项:


4. 使用:


sqliteDatabase:


常用方法


要学会使用官方的文档:


5. 案例一:创建一个数据库

第一步:改写MainActivity文件

package com.example.sqlight;

import android.os.Bundle;
import android.app.Activity;
import android.database.sqlite.sqliteDatabase;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override  
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 每个程序的数据库都是唯一的,都有自己的数据库,默认情况下是各自互相不干扰
		// 创建一个数据库并打开,第一个参数是数据库名,加后缀是为了以后导出后使用方便。第二个参数factory是权限,第三个参数是实例化的什么什么
		sqliteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);
		// 执行原生语句:主键的名字最好一定要前面加下划线。
		db.execsql("create table if not exists usertb(_id integer primary key autoincrement,"
				+ "name text not null,"
				+ "age integer not null,"
				+ "sex text not null)");
		db.execsql("insert into usertb(name,sex,age) values('张三','女','18')");
	}
}
第二步:查看数据库

File Expoler---data---data---com.example.sqlight(包名.类名)---databases---user.db

但这个user.db一般是不能查看的,不过可以下载一个软件叫Navicat+Preminum:







当程序中表的内容发生变化时,再次导出,导出后上面这个页面不需要再次加载,表的内容它会自动刷新的。

介绍以下目录:


第一个data目录是所有App的数据目录;

第二个data目录是每一个应用程序的包名.类名;


第三步:查询



package com.example.sqlight;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 每个程序的数据库都是唯一的,都有自己的数据库,默认情况下是各自互相不干扰
		// 创建一个数据库并打开,'18')");
		db.execsql("insert into usertb(name,age) values('张四','男','20')");
		// 查询:第二个参数是查询条件:
		Cursor c = db.rawQuery("select * from usertb",null);
		if (c != null) {
			// 游标移动到第一条:
			c.moveToFirst();
			// 如果还有下一条
			while (c.moveToNext()) {
				// 这里取得是第一个字段的int值
				Log.i("info","_id: " + c.getInt(c.getColumnIndex("_id")));
				Log.i("info","name: " + c.getString(c.getColumnIndex("name")));
				Log.i("info","age: " + c.getInt(c.getColumnIndex("age")));
				Log.i("info","sex: " + c.getString(c.getColumnIndex("sex")));
				Log.i("info","一次啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");				
			}
			// 最好用户自己手动的释放游标:
			c.close();
		}
		db.close();
	}
}
效果图:



6. 案例二:


修改MainActivity:

package com.example.sqlite;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

	public static final String TABLENAME = "stutb";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 创建数据库sqliteDatabase db = openOrCreateDatabase("stu_db",null);
		// 注意TABLENAME左右的空格:
		db.execsql("create table if not exists "+TABLENAME+" (_id integer primary key autoincrement,"
				+ "sex text not null,"
				+ "age integer not null)");
		
		// 插入操作:
		ContentValues values = new ContentValues();		// Hash Map
		values.put("name","张三");
		values.put("age",19);
		values.put("sex","男");
		long rowId = db.insert("stutb",null,values);
		
		values.clear();
		values.put("name","张四");
		values.put("age",24);
		values.put("sex","女");
		db.insert("stutb","五五");
		values.put("age",10);
		values.put("sex","张六");
		values.put("age","男");
		db.insert("stutb","张七");
		values.put("age","八八");
		values.put("age",values);
		
		// 更新操作:
		values.clear();
		values.put("sex","女");
		// 将全部id大于三的用户性别都改成女人
		db.update("stutb",values,"_id>?",new String[]{"3"});
		
		// 删除操作:
		// 将姓名中包含张的所有用户删除:
		db.delete("stutb","name like ?",new String[]{"张%"});  
		
		// 再查询:
		Cursor c = db.query("stutb",new String[]{"0"},"name");
		if(c!=null){
			// 查询所有字段
			String[] columns = c.getColumnNames();
			// 对每一条信息
			while(c.moveToNext()){
				// 打印它的每一个字段内容
				for(String columnNmae:columns){
					Log.i("info",c.getString(c.getColumnIndex(columnNmae)));
				}
			}
			c.close();
		}
		db.close();
	}
}
效果图:



7. sqliteOpenHelper的使用:


案例:

第一步:创建一个新类来继承实现sqliteOpenHelper:

package com.example.sqliteopenhelper;

import android.content.Context;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteDatabase.CursorFactory;
import android.database.sqlite.sqliteOpenHelper;

public class DBOpenHelper extends sqliteOpenHelper {

	// 这个构造函数是可以自己改写的。
	public DBOpenHelper(Context context,String name) {
		super(context,name,1);
		// TODO Auto-generated constructor stub
	}

	/*
	 * 首次创建数据库的时候调用,一般可以把建库建表的操作放这里
	 */
	@Override
	public void onCreate(sqliteDatabase db) { 
		// TODO Auto-generated method stub
		db.execsql("create table if not exists stutb(_id integer primary key autoincrement,"
				+ "age integer not null)");
		db.execsql("insert into stutb(name,18)");
	}

	/*
	 * 当数据库的版本发生变化的时候,会自动执行
	 */
	@Override
	public void onUpgrade(sqliteDatabase arg0,int arg1,int arg2) {
		// TODO Auto-generated method stub

	}

}
第二步:修改MainActivity活动文件
package com.example.sqliteopenhelper;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        // DBOpenHelper是我们自己新建的类
        DBOpenHelper helper = new DBOpenHelper(MainActivity.this,"stu.db");        
        //helper.getReadableDatabase();// 获取一个只读的数据库,只能查询 不能写入 不能更新
        sqliteDatabase db = helper.getWritableDatabase();	// 可读可写
        //db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
        Cursor c = db.rawQuery("select * from stutb",null);
        if(c != null){
        	String[] cols = c.getColumnNames();
        	while(c.moveToNext()){
        		for(String ColumnName:cols){
        			Log.i("info",ColumnName+":"+c.getString((c.getColumnIndex(ColumnName))));
        		}
        	}
        	c.close();
        }
        db.close();
    }
}
效果图:

原文链接:https://www.f2er.com/sqlite/199492.html

猜你在找的Sqlite相关文章