如何导入已有的外部数据库

如何导入已有的外部数据库,第1张

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数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10171785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存