当前位置:   article > 正文

Android studio引入外部SQLite数据库,获取数据库列表数据_android如何导入数据库

android如何导入数据库

准备工作:

准备好Android studio和一个创建管理数据库的软件,推荐SQLite Expert Professional或者Navicat Premium。这里以SQLite Expert Professional为例。

创建外部数据库:

1.穿件sqlite数据库,按照自己的项目要求定义数据库和相应的数据表

导入数据库到Android studio项目中

1.在main目录下创建assets文件,将准备好的sqlite数据库文件放入这个目录下

解释:assets文件夹下的文件在应用被打包成apk时不会被压缩

2.在main目录下的java目录下的com.example.xxxx包内创建一个java类,用于管理数据库,如图所示的MyDatabaseHelper

 3.在数据库的类中完成数据库的导入

  1. import android.content.Context;
  2. import android.database.sqlite.SQLiteDatabase;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. public class MyDatabaseHelper {
  9. //导入的sqlite数据库文件名
  10. private final String DB_NAME = "questionCenter.db";
  11. private SQLiteDatabase myDatabase;
  12. private Context context;
  13. //定义类的方法
  14. public MyDatabaseHelper(Context context) {
  15. this.context = context;
  16. }
  17. // 复制和加载区域数据库中的数据
  18. public String CopyDBFile() throws IOException {
  19. // 在第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/数据库名字
  20. //获取准确的路径,context.getPackageName()得到包名
  21. File dir = new File("data/data/" + context.getPackageName() + "/databases");
  22. //如果文件夹不存在,则创建指定的文件
  23. if (!dir.exists() || !dir.isDirectory()) {
  24. dir.mkdir();
  25. }
  26. //文件声明
  27. File file = new File(dir, DB_NAME);
  28. //输入流
  29. InputStream inputStream = null;
  30. //输出流
  31. OutputStream outputStream = null;
  32. //若不存在,通过IO流的方式,将assets目录下的数据库文件,写入到项目模拟手机中,当开启模拟
  33. //器时,会将数据库文件写入到模拟手机的内存中
  34. if (!file.exists()) {
  35. try {
  36. //创建文件
  37. file.createNewFile();
  38. //加载文件
  39. inputStream = context.getClass().getClassLoader().getResourceAsStream("assets/" + DB_NAME);
  40. //输出到文件
  41. outputStream = new FileOutputStream(file);
  42. byte[] buffer = new byte[1024];
  43. int len;
  44. //按字节写入
  45. while ((len = inputStream.read(buffer)) != -1) {
  46. outputStream.write(buffer, 0, len);
  47. }
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. } finally {
  51. //关闭资源
  52. if (outputStream != null) {
  53. outputStream.flush();
  54. outputStream.close();
  55. }
  56. if (inputStream != null) {
  57. inputStream.close();
  58. }
  59. }
  60. }
  61. return file.getPath();
  62. }
  63. }

4.打开自己安卓项目运行时的第一个Activity,在对应的oncreate()方法,使用数据库类中定义的数据库导入的方法,完成数据库的初始化操作

注意:不一定是在第一个Activity中,但必须是在项目使用数据库之前的那个Activity中导入数据库

  1. //导入数据库到创建的文件中
  2. MyDatabaseHelper myHelper = new MyDatabaseHelper(WelcomeActivity.this);
  3. try {
  4. myHelper.CopyDBFile();
  5. } catch (IOException e) {
  6. e.printStackTrace();
  7. }

在如图位置:

5.在对应的Activity的oncreate()方法中使用如图的代码可打开数据库,进行crud操作,增删查改、获取数据库数据

 获取数据库数据:(使用list集合)

1.在项目里面定义一个java类,用于定义数据表对应的列名。如用户表为例:

 对应的用户类的代码如下:

  1. public class UserDemo {
  2. //对应userInfo数据库中的数据信息
  3. public String username;
  4. public String password;
  5. public String savepsd;
  6. public String autologin;
  7. public String isregister;
  8. public int lastscore;
  9. }

 2.按照自己的要求获取数据表的信息数据

  1. //获取数据库的用户数据
  2. public List<UserDemo> getUsers(){
  3. List<UserDemo> list=new ArrayList<UserDemo>();
  4. //这是获取完整数据表信息的方法
  5. Cursor cursor = myDatabase.query("userInfo.db",null,null,null,null,null,null);
  6. //也可以使用Cursor对象的rawQuery方法,使用sql指定的数据
  7. //Cursor cursor = myDatabase.rawQuery("select * from userInfo",null);
  8. if(cursor.getCount()>0){
  9. cursor.moveToFirst();//cursor移动到第一个光标上
  10. int count=cursor.getCount();
  11. //cursor中的每一条记录生成一个question对象,并将该question对象添加到list中
  12. for(int i=0;i<count;i++){
  13. cursor.moveToPosition(i);
  14. UserDemo users =new UserDemo();
  15. users.username=cursor.getString(cursor.getColumnIndex("username"));
  16. users.lastscore=cursor.getInt(cursor.getColumnIndex("lastscoren"));
  17. users.password=cursor.getString(cursor.getColumnIndex("password"));
  18. users.autologin=cursor.getString(cursor.getColumnIndex("autologin"));
  19. users.savepsd=cursor.getString(cursor.getColumnIndex("savepsd"));
  20. users.isregister=cursor.getString(cursor.getColumnIndex("isregister"));
  21. list.add(users);
  22. }
  23. // System.out.println(list.get(2)); //可输出list集合的数据
  24. }
  25. return list;
  26. }

3.通过集合获取到数据后,可以按照自己的要求进行相应的功能实现

如果需要对导入的数据库进行操作,可参照外部sqlite数据库导入后对数据库进行操作https://blog.csdn.net/NXBBC/article/details/123734221?spm=1001.2014.3001.5502

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/267221
推荐阅读
相关标签
  

闽ICP备14008679号