android sqlite

本文介绍了Android中SQLite数据库的操作方法,包括SQLite的特点、提供的API、常用方法及具体使用案例。展示了如何通过创建自定义类来操作数据库,如创建、查询、更新等。

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

Android 中SQlite操作
一 Sqlite的特点:
1 轻量级的
进程内的数据库引擎,不存在数据库的客户端和服务器,非常小
2 不需要安装
Sqlite的核心引擎不需要依赖第三方软件,不需要安装
3 跨平台/可移植性
支持Windows、Linux、Unix等主流操作系统,
4 处理速度快
比起Mysql、PostgreSQL,处理速度快
5 开源
二 使用介绍
Android提供了创建和使用SQLite数据库的API。 SQLiteOpenHelper,这是一个辅助类,用来打开(创建)数据库,以及数据库升级,你需要创建它的子类,并且实现两个方法onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)

SQLiteDatabase是一个数据库对象,提供了操作数据库的一些操作。
下面是一些常用的方法
1 openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)//打开或创建数据库
2 insert(Sting table,String nullColumnHack,CntentValues values)//插入一行数据
3 delete(String table,String whereClause,String[] whereArgs)//删除一行记录
4 query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查询一条记录
5 update(String table,ContentValues values,String whereClause,String[] whereArgs)//修改记录
6 close()关闭数据库
三 在项目中的具体使用情况
1 看懂数据库的内容和将其进行格式转换

所给文件为个gpsphone_Data.MDF和gpsphone_Log.LDF
SQL server 2000
主要数据文件(扩展名.mdf)
日志文件(扩展名.ldf)
SQL Server的每个数据库是以两个文件存放的,一个后缀名为mdf,是数据文件,另一个后缀名为ldf,为日志文件。因此只要定期复制这两个文件,就可以达到备份的效果。
下载安装 SQL server 2000将所给的数据以txt文件导出
下载 SQLiteManger 将上面的txt数据分表导入,保存成db格式
最后将db格式重命名为mp3 放入工程文件夹res/raw下,(在拷文件过程中,发现在部分AVD版本会出现buffer不够的问题,原因是db文件在拷贝过程中会被解压,从而占用内存,无法成功完成拷贝。后来的方案比较偏,通过将db文件重命名为mp3文件,然后拷为db文件。
很可行,mp3文件属于音频压缩格式,可以躲过android的解压过程。)

数据库的内容
分为这么几个表
road  road_pile  bridge  department  user
road (路的id 路的name)
road_pile (路桩的id  路桩的name  所在路的id  所在区的id  状态  精度  纬度 等 )
bridge(桥的id 桥的名字 所在的路的id 所在区的id 精度 纬度 状态)
department(id sup_id name)
sup_id=0 表示省
sup_id=1 表示市
是下面的县的sup_id 等于所在市的id


2 如何创建和使用表

1  创建两个类 DBCreate 和 DBHelper

DBCreate类用于创建数据库

public class DBCreater {
	private final int BUFFER_SIZE = 40000;
	public static final String PACKAGE_NAME = "com.nupt.less";
	public static final String DB_PATH = "/data/data" + "/" + PACKAGE_NAME + "/" + "databases";
	private static final String DB_NAME = "henan.db";
	
	private SQLiteDatabase database;//成员变量
	private Context context;//成员变量
	
	public SQLiteDatabase getDataBase(){
		return database;		
	}

	DBCreater(Context context) {                         //构造函数
		this.context = context;
	}
	
	
	public void openDatabase(){
		this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);		
	}

	private SQLiteDatabase openDatabase(String dbfile) {
		try {
			File dir = new File(DB_PATH);
			if (!dir.exists())   
		          dir.mkdir();
			if (!(new File(dbfile).exists())) {
				InputStream is = this.context.getResources().openRawResource(R.raw.henan);
				FileOutputStream fos = new FileOutputStream(dbfile); 
				byte[] buffer = new byte[BUFFER_SIZE];
				int count = 0; 
				while ((count = is.read(buffer)) > 0) {
					 fos.write(buffer, 0, count); 
				}
				fos.close();
				is.close(); 
			}
			SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
			return db; 
		}catch (FileNotFoundException e) {    
			Log.e("Database", "File not found");
			e.printStackTrace(); 
		} catch (IOException e) {
			Log.e("Database", "IO exception");
			e.printStackTrace(); 
		}
		 return null; 
	}
	
	public void closeDatabase() { 
		this.database.close();  
		} 
}




DBHelper类用于操作数据库

public class DBHelper extends SQLiteOpenHelper {
	private static final String DB_NAME = "henan.db";
	//String TBL_NAME ="GPS_DATA";
	String TBL_NAME ="Road_Pile";
	//private static final String CREATE_TBL = " create table " + " CollTbl(_id integer primary key autoincrement,name text,url text, desc text) ";
	
	static SQLiteDatabase db;
	
	public SQLiteDatabase getDb() {
		return this.db;
		
	}
	
	DBHelper(Context c){
		super(c, DB_NAME, null, 2);		
	}
	
	public void onCreate (SQLiteDatabase db) {
		this.db = db;
		
	}
	
	public  Cursor query(){
		SQLiteDatabase db = getWritableDatabase();
		String selection = "_id>?";
		String[] selectionArgs = {"19000"};
		String[] colums = {"_id", "road_id", "field_id", "station", "country_name", "road_name"};
		Cursor c = db.query(TBL_NAME, colums, selection, selectionArgs, null, null, null);
		//Cursor c = db.query(TBL_NAME, null, selection, selectionArgs, null, null, null );
	
		return c;
	}
	
	public  Cursor query (String tableName, String selection, String[] selectionArgs){
		SQLiteDatabase db = getWritableDatabase();
		//String s = selection;
		//String[] sArgs = selectionArgs;
		
		Cursor c = db.query(tableName, null, selection , selectionArgs, null, null, null);
		return c;
	}
	
	
	public  Cursor query (String tableName, String[] colums, String selection, String[] selectionArgs){
		SQLiteDatabase db = getWritableDatabase();
		//String s = selection;
		//String[] sArgs = selectionArgs;
		
		Cursor c = db.query(tableName, colums, selection , selectionArgs, null, null, null);
		return c;
	}
	
	
	


	public void close() {
		if (db != null)
			db.close();
	}
	

	
	
	public void update() {
		SQLiteDatabase db = getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("Station","啊");
		String whereClause = "_id=?";
		String[] whereArgs = {"12114"};
		db.update(TBL_NAME, values, whereClause, whereArgs);
	}
	
	public void update(String tableName, ContentValues cv,String whereClause, String[] whereArgs){
		SQLiteDatabase db = getWritableDatabase();
		db.update(tableName, cv, whereClause, whereArgs);
	}


	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

	
}

如果有其他的操作,删除什么也可以在这个类中添加内容。

这样将其封装在类中,只提供接口,数据使用更加安全,比起将sqliteDb设置为全局变量这种方法。

具体的使用方法:

在登录的activity中生成数据库

private  dbCreater=new DBCreater(this);

dbCreater.openDatabase();

SQLiteDatabase sqlData=dbCreater.getDataBase();

这样sdcard中就有了这么一个数据库

查询的时候

举一个例子

Cursor  cur1=null;

cur1 = dbhelper.query("Department", new String[]{"_id","dep_name","sup_dep_id"}, "sup_dep_id=?", new String[]{"1"});//查询表Department中的"_id","dep_name","sup_dep_id"这几列,条件是sup_dep_id=1。

更新的时候举一个例子

ContentValues cv = new ContentValues();

String whereClause = "_id=?";
 String[] whereArgs = {a};
     

value = spinner.getSelectedItem().toString();//获取用户所选的值

Intent intent1 = getIntent();
string  a = intent1.getStringExtra("ID");

cv.put("station", value);
 cv.put("gran_time", granTime);
 cv.put("checked", 1);

dbhelper.update("Bridge", cv, whereClause, whereArgs);

关闭操作

dbCreater.closeDatabase(); 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值