数据库拷贝

当我们在开发应用的时候,有的时候需要给将一些文件随这应用的启动拷贝到内存卡或者系统应用中

最常见的就是数据库的拷贝

思路 :1、读取到数据的输入流

2、获取终点地址

3、将输入流转换为输出流,写到应用中

public class DBuitls {
	private static final String TAG = "DBuitls";
	public static final String DB_NAME = "city.db";
	public static final int DB_VERSION = 1;

	private DBuitls() {
		super();
	}

	private static boolean extractDatabase(Context context, String name) {
		boolean retVal = false;
		// 获得数据存储的位置 ----/data/data/com.metek.copy/databases/city.db
		File db = context.getDatabasePath(name);
		if (!db.exists()) {
			File directory = db.getParentFile();
			directory.mkdirs();
			if (directory.exists()) {
				try {
					BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(db));
					InputStream in = context.getResources().openRawResource(R.raw.city);
					byte[] buf = new byte[1024 * 8];
					int length = 0;
					while (-1 != (length = in.read(buf))) {
						bos.write(buf, 0, length);
					}
					in.close();
					bos.close();
					retVal = true;
				} catch (FileNotFoundException ex) {
					Log.e(TAG, "Can not access db file.", ex);
				} catch (IOException ex) {
					Log.e(TAG, "Access db error.", ex);
				}
			} else {
				Log.e(TAG, "Can not make db directory.");
			}
		} else {
			retVal = true;
		}
		if (!retVal) {
			Log.e(TAG, "extractDatabase error");
			if (db.exists()) {
				db.delete();
			}
		}
		return retVal;
	}

	private static class PresetDbHelper extends SQLiteOpenHelper {
		public PresetDbHelper(Context context, String name) {
			super(context, name, null, 100);
			DBuitls.extractDatabase(context, name);
		}

		public void onCreate(SQLiteDatabase db) {
			Log.e(TAG, "This should never been called.");
		}

		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			Log.e(TAG, "This should never been called.");
		}
	}

	public static int getDBcount(Context context) {
		PresetDbHelper dbOpenHelper = new PresetDbHelper(context, DB_NAME);
		SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
		String sql = "select count(*) from city";
		Cursor cursor = database.rawQuery(sql, null);
		int result = 0;
		if (cursor != null) {
			if (cursor.moveToNext()) {
				result = Integer.parseInt(cursor.getString(0));
			}
			cursor.close();
		}
		database.close();
		return result;
	}

}
<pre name="code" class="java">
public class MainActivity extends Activity {
	private static final String TAG = null;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		int count = DBuitls.getDBcount(this);
		TextView text = (TextView) findViewById(R.id.count);
		Log.i(TAG, "查询到数据库发长度是 :" + count);
		text.setText("查询到数据库的长度是:" + count);
	}

}
				
时间: 2024-11-03 21:00:38

数据库拷贝的相关文章

服务器之间数据库拷贝

这只是一个简单的数据库拷贝 数据库:mysql server1: 1.数据导出 mysqldump -uroot -p --default-charter-set=utf-8 [database name] >[default name].sql 2.压缩 tar czf [default name].gz [default name].sql 3.资料传送 scp [default name].gz [email protected]:/[filename] 4.资料移除 rm -rf [de

mysql数据库拷贝

我们常常会有这种需求,将某个server上的mysql数据库完整复制到其它机器上,比方数据库迁移.要想做到这点最简单的就是使用mysql提供的现成工具:mysqldump. 使用mysqldump的时候须要指定账号.password.主机等信息. 比如:mysqldump -h 10.10.8.12 -u backup -P 6071  -p backup_db >backup_db.mysql 以上命令把10.10.8.12 主机的backup_db 数据库保存在backup_db.mysql

数据库语句之建表、拷贝数据表

1.数据库建表语句 create table tb_People(id integer primary key, Name varchar(255), Sex varchar(255)) 2.同数据库拷贝数据表 sql: insert into table1 select*from table2(完全拷贝) insert into table1 select distinct*from table2(不重复拷贝); insert into table1 select top 10*from ta

在Android程序中使用已有的SQLite数据库

已经将这篇文章迁移至 Code问答,你也能够到这里查看这篇文章,请多多关注我的新技术博客CodeWenDa.com 在中文搜索中,没有找到一篇比較好的关于怎样在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,依照它的步骤,測试成功.决定把这篇文章大致的翻译一下,想看原文的能够点击这里:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ .

迁移ASM故障磁盘组数据库到新磁盘组

由于原有磁盘组使用的是NORMAL冗余方式.剩余的空间只有3G.数据库空间为200G.ASM磁盘组空间不足以存放数据库.而且新增的磁盘只有一块300G的盘.为避免磁盘REBALANCE出现异常.因此将300G的磁盘做成EXTERNAL冗余方式,并采用RMAN COPY的方式,将数据库迁移到新的磁盘组.迁移成功后,在将原有的3块150G的磁盘删除.并创建一个新的EXTERNAL磁盘组备用. 1  ASM识别磁盘 1.1停集群环境 原有环境中使用了多路径,裸设备映射,ASMLIB配置.ASM添加磁盘

Android实例-手机安全卫士(三十三)-将数据库导入程序中

一.目标 1. 在项目中引入SQLiteDatabase数据库,通过输入输出流将数据库复制至指定path目录下: 2.通过SQLiteDatabase的openDatabase()使用数据库,通过 rawQuery()方法执行SQL语句: 3.初步实现号码归属地查询功能. 数据库结构: data1:  data2: 数据库在项目中:     查询结果: 二.代码实现 1.将电话归属地数据库(名称address.db)拷贝至项目的assets文件夹下: 2.在项目src文件夹中新建数据库工具包(取

[整理]数据库镜像与数据库快照

http://wuxinaiaman928.blog.163.com/blog/static/64932144200861035432565 在SQL Server2005课程中提到了数据库快照与数据库镜像的问题,这两个功能都是在SQL2005中增加的新特性,由于上课时间有限,没有时间进行详细的阐述,现将相关资料发布在上面,希望学员能够认真学习,加以领会.   数据库镜像是SQL Server 2005的一个新特性,它允许你将一个SQL Server中的数据库内容镜像到另一个SQL Server

数据库有基础知识

一.基本概念  DBMS:Database Management System数据库管理系统,是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库. RDBMS:Relational Database Management System关系型数据库管理系统,就是在数据库管理系统的基础上增加关系,通过数据.关系和对数据的约束三者组成的数据模型来存放和管理数据. SQL:Structed Query Language结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和

MySQL主从复制实现数据库服务器双机热备详细讲解

1.mysq主从复制简介 1.1.复制介绍 MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新.如果你想要设置链式复制服务器,从服务器本身也可以充当主服务器.请注意当你进行复制时,所