irpas技术客

Android studio引入外部SQLite数据库,获取数据库列表数据_星光宇辰_androidstudio连接sqlite数据库

irpas 7567

准备工作:

准备好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.在数据库的类中完成数据库的导入

import android.content.Context; import android.database.sqlite.SQLiteDatabase; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class MyDatabaseHelper { //导入的sqlite数据库文件名 private final String DB_NAME = "questionCenter.db"; private SQLiteDatabase myDatabase; private Context context; //定义类的方法 public MyDatabaseHelper(Context context) { this.context = context; } // 复制和加载区域数据库中的数据 public String CopyDBile() throws IOException { // 在第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/数据库名字 //获取准确的路径,context.getPackageName()得到包名 File dir = new File("data/data/" + context.getPackageName() + "/databases"); //如果文件夹不存在,则创建指定的文件 if (!dir.exists() || !dir.isDirectory()) { dir.mkdir(); } //文件声明 File file = new File(dir, DB_NAME); //输入流 InputStream inputStream = null; //输出流 OutputStream outputStream = null; //若不存在,通过IO流的方式,将assets目录下的数据库文件,写入到项目模拟手机中,当开启模拟 //器时,会将数据库文件写入到模拟手机的内存中 if (!file.exists()) { try { //创建文件 file.createNewFile(); //加载文件 inputStream = context.getClass().getClassLoader().getResourceAsStream("assets/" + DB_NAME); //输出到文件 outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len; //按字节写入 while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 if (outputStream != null) { outputStream.flush(); outputStream.close(); } if (inputStream != null) { inputStream.close(); } } } return file.getPath(); } }

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

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

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

在如图位置:

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

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

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

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

public class UserDemo { //对应userInfo数据库中的数据信息 public String username; public String password; public String savepsd; public String autologin; public String isregister; public int lastscore; }

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

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

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

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Android