package comandroidImportDatabase;
import javaioFile;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
import javaioInputStream;
import androidcontentContext;
import androiddatabasesqliteSQLiteDatabase;
import androidosEnvironment;
import androidutilLog;
public class DBManager {
private final int BUFFER_SIZE = 400000;
public static final String DB_NAME = "countriesdb"; //保存的数据库文件名
public static final String PACKAGE_NAME = "comandroidImportDatabase";
public static final String DB_PATH = "/data"
+ EnvironmentgetDataDirectory()getAbsolutePath() + "/"
+ PACKAGE_NAME; //在手机里存放数据库的位置
private SQLiteDatabase database;
private Context context;
DBManager(Context context) {
thiscontext = context;
}
public void openDatabase() {
thisdatabase = thisopenDatabase(DB_PATH + "/" + DB_NAME);
}
private SQLiteDatabase openDatabase(String dbfile) {
try {
if (!(new File(dbfile)exists())) {//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = thiscontextgetResources()openRawResource(
Rrawcountries); //欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = isread(buffer)) > 0) {
foswrite(buffer, 0, count);
}
fosclose();
isclose();
}
SQLiteDatabase db = SQLiteDatabaseopenOrCreateDatabase(dbfile,
null);
return db;
} catch (FileNotFoundException e) {
Loge("Database", "File not found");
eprintStackTrace();
} catch (IOException e) {
Loge("Database", "IO exception");
eprintStackTrace();
}
return null;
}
//do something else here<br>
public void closeDatabase() {
thisdatabaseclose();
}
}
HTML是无法读取数据库的,HTML是页面前端脚本语言,要想从HTML网页中获取SQL数据库里的数据,需要借助JSP或ASP或PHP或RUBY等语言来实现。
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(basetable);存储模式(内模式)称为“存储文件”(storedfile);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。
扩展资料
SQL语言的组成:
1、一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2、一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3、一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL和Ada语言等。
采用将项目中的sqlite文件拷到android内存卡上的固定位置,先判断位置上是否存在sqlite文件,不存在则复制文件。 sqlite可放在res的raw目录下,亦可放在assets下,放在assets下,可新建其他层次目录,本例选择assets
1首先,添加sdcard权限在AndroidManifestxml
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE" />
在activity中有如下代码
2Java代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
button2setOnClickListener(new ButtonOnClickListener() {
@Override
publicvoid onClick(View arg0) {
try{
String DATABASE_PATH = androidosEnvironmentgetExternalStorageDirectory()getAbsolutePath()
+ "/testdb"; //将要存放于的文件夹
String DATABASE_FILENAME = "testDatabasedb"; //文件名
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/testdb目录中存在,创建这个目录
if (!direxists())
dirmkdir();
// 如果在/sdcard/testdb目录中不存在
// testdb文件,则从asset\db目录中复制这个文件到
// SD卡的目录(/sdcard/testdb)
if (!(new File(databaseFilename))exists()) {
// 获得封装testDatabasedb文件的InputStream对象
AssetManager asset=getAssets();
InputStream is=assetopen("db/testDatabasedb");
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = newbyte[8192];
int count = 0;
// 开始复制testDatabasedb文件
while ((count = isread(buffer)) > 0) {
foswrite(buffer, 0, count);
}
fosclose();
isclose();
assetclose();
}
SQLiteDatabase mSQLiteDatabase=openOrCreateDatabase(databaseFilename, ActivityMODE_PRIVATE, null);//有则打开,没有创建
Cursor cur=mSQLiteDatabaserawQuery("select from table1", null);
if(cur!=null){
if(curmoveToFirst()){
do{
int idColumnIndex=curgetColumnIndex("id");
int numColumnIndex=curgetColumnIndex("num");
int dataColumnIndex=curgetColumnIndex("data");
int id=curgetInt(idColumnIndex);
int num=curgetInt(numColumnIndex);
String data=curgetString(dataColumnIndex);
Systemoutprintln("id:"+id+";num:"+num+";data:"+data);
}while(curmoveToNext());
curclose();
}
}
mSQLiteDatabaseclose();//关闭数据库连接
}catch(Exception e){
eprintStackTrace();
}
//deleteDatabase("testDatabasedb");//删除数据库
}
});
根据系统数据交换的方式以及读写数据的相对关系不同,可以将外部系统与SAP系统的接口形式分为:主动式,被动式和中间式
1、主动式接口
即外部系统将SAP系统所需的信息直接写入SAP系统的数据库中。这种方式要求详细了解SAP系统内部的数据库结构,并且SAP系统允许外部系统往里写数据(即有写的权限)。一般来说,主动式接口形式需要对SAP系统的数据库结构很清楚,对SAP系统录入数据时需要进行哪些数据校验也要很清楚,同时也要遵循SAP系统的数据校验规范,将其所需的物料信息、产品信息、加工信息等一一写入SAP系统中,保证数据的准确性和有效性。
采用主动式接口形式的优点:外部系统与SAP系统中的信息同步性好。但在安全性方面存在一定问题,如出现写数据冲突,即外部系统写数据到SAP系统的同时,SAP系统本身也在往数据库中写入数据。对于SAP系统建议一般不要采用此种方式。
2、被动式接口
被动式接口,即SAP系统从外部系统中读取所需的数据,将其写入自已的数据库中。对于被动式又有两种方式:全被动式和半被动式。
.全被动式:外部系统完全公开其表达和存储信息的数据库结构,SAP系统读取信息时自行判断哪些信息是增加的,哪些是修改的,哪些己删除了。
.半被动式:外部系统除公开其数据库结构外,还提供一些握手信号单独存入握手信号表中,握手信息说明哪些信息作了更新,这样SAP系统在读取外部系统中的信息(如某物料更改信息)时,根据握手信号表来读取外部系统中已经发生更改的部分信息,不需要全部读一遍,这样可以提高接口处理的速度。
采用被动式接口形式的优点:外部系统与SAP系统的同步性也做得比较好,安全性方面也比主动式要好。但实现起来较为麻烦,需要有较强的SAP接口方面的知识。一般由专门的SAP实施顾问来完成这种开发。
3、中间式接口
中间式接口,即外部系统将SAP系统所需的信息生成中间文件或中间数据表,SAP系统直接读取中间文件或将中间表中的信息写入数据库中,这种方式要求对外部系统和SAP系统两方都要做一些开发工作。
需要特别提出的是:采用中间式接口时必须时刻注意如何保证外部和SAP信息一致性。常用的有两种方式:一种是由SAP系统来保证,即外部系统将SAP系统所需的信息定期写在中间文件或数据表中,SAP系统读取该信息时与SAP系统中已有的信息进行分析比较,判断哪是新增的、哪是修改的、哪些删除了,最后把更新的信息写入SAP系统中:另一种是,外部系统在生成中间文件或数据表时,与SAP系统中己有的数据进行比较,判断哪些数据进行了更新,并将更新的数据写入中间文件或数据表。然后,SAP系统读取中间文件或数据表中的数据直接写入自己的数据库中。这种方式要求在外部系统写中间文件之前SAP系统将其数据库中的数据导出,以供外部系统进行比较用。
中间式接口是比较常用的一种方式,这种方式外部系统和SAP系统相对独立,接口不涉及双方内部的结构,而且接口的责任也很明确,数据的安全性也得到了保证。但这种方式存在的问题就是两个系统的数据同步性稍差一些,但只要合理地规定读写中间文件或数据表的时间,数据的同步性是不会影响使用的。
以上就是关于如何导入已有的外部数据库全部的内容,包括:如何导入已有的外部数据库、怎样从HTML网页中获取SQL数据库里的数据(html怎么访问数据库)、如何在项目中读取外部建立的sqlite数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)