安卓如何连接mysql数据库文件路径_五.在Android开发中 导入外部已有的数据库

1.先在AS中右键单击res目录,New-Folder-Raw Resources Folder,然后将已有的数据库文件放入Raw目录下

2.创建一个工具类ImportDB

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.util.Log;

import com.jabal.arabic.R;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

public class ImportDB {

private final int BUFFER_SIZE = 400000;

public static final String DB_NAME = "test.db"; //保存的数据库文件名

public static final String PACKAGE_NAME = "自己的包名";//此处改为自己应用的包名。

public static final String DB_PATH = "/data/data/"

+ PACKAGE_NAME+"/databases"; //在手机里存放数据库的位置

private SQLiteDatabase database;

public Context context;

public ImportDB(Context context) {

this.context = context;

}

public void openDatabase() {

this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);

}

public SQLiteDatabase openDatabase(String dbfile) {

try {

if (!(new File(dbfile).exists()))

{

//没有创建文件夹

File f=new File(DB_PATH);

if (!f.exists()){

f.mkdir();

}

//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库

InputStream is = this.context.getResources().openRawResource(

R.raw.arabic); //欲导入的数据库

FileOutputStream fos = new FileOutputStream(new File(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;

}

//do something else h

public void closeDatabase() {

this.database.close();

}

}

在Activity中使用此类即可

public ImportDB importDB;

importDB = new ImportDB(this);

importDB.openDatabase();

使用例子

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private EditText name;

private TextView result_address;

private Button query;

public ImportDB importDB;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/*

Intent intent = new Intent(this, MainActivity_home.class);

//创建Intent对象,Intent用于各组件之间通讯构造方法的参数

//第一个参数是当前activity.this

//第二个参数是要跳转的界面对应的activity.class

startActivity(intent);

//启动

finish();

//最后记得关掉这个activity否则内存越占越多

*/

init();

name = findViewById(R.id.explain);

query = findViewById(R.id.query_button);

result_address = findViewById(R.id.result);

query.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(ImportDB.DB_PATH + "/" + ImportDB.DB_NAME, null);

StringBuilder sb = new StringBuilder();

//参数依次是:表名,列名,where约束条件,where中占位符提供具体的值,指定group by的列,进一步约束

//指定查询结果的排序方式

Cursor cursor = db.query("test_word", null, null, null, null, null, null);

if (cursor.moveToFirst()) {

do {

String word = cursor.getString(cursor.getColumnIndex("word"));

String explain = cursor.getString(cursor.getColumnIndex("explain"));

sb.append(explain +"--"+word+ "\n");

} while (cursor.moveToNext());

}

cursor.close();

result_address.setText(sb.toString());

//Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();

}

});

}

private void init()

{

importDB = new ImportDB(this);

importDB.openDatabase();

}

}

ps:另外据网上所说数据库太大的话还需要分割

android开发如何获取res/raw和assets文件夹的路径

android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况:

1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以,方法如下:

//获取res/raw文件输入流

InputStream is=getResources().openRawResource(R.raw.XXX);

//获取assets文件输入流

InputStream is=getResources().getAssets().open("文件名");

2.如果你想对res/raw和assets文件写的动作,那就要得到相应uri,方法如下:

//获取res/raw的uri

Uri uri=Uri.paese("android:resource://包名/"+R.raw.xxx);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值