2

I am a beginner in the android world and so I am learning to import data from an existing database created using DB browser. Below I am adding the link from which I am learning to import data from existing database file. How to import and use external database in android studio ?

NOTE: I have correctly placed the .db file in the assets folder. I am sharing my main.java code below:

package com.javahelps.externaldatabasedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.List;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = findViewById(R.id.listView);
        DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
        databaseAccess.open();
        List<String> quotes = databaseAccess.getQuotes();
        databaseAccess.close();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, quotes);
        listView.setAdapter(adapter);
    }
}

My activity_main.xml file code is :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
tools:context=".MainActivity"
android:orientation="vertical">

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" />
</LinearLayout>

My DatabaseOpenHelper.java class code is as follows:

package com.javahelps.externaldatabasedemo;

import android.content.Context;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class DatabaseOpenHelper extends SQLiteAssetHelper {
    private static final String DATABASE_NAME = "quotes.db";
    private static final int DATABASE_VERSION = 1;

    public DatabaseOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    } 
}

And lastly my DatabaseAccess.java class is :

package com.javahelps.externaldatabasedemo;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class DatabaseAccess {
    private SQLiteOpenHelper openHelper;
    private SQLiteDatabase database;
    private static DatabaseAccess instance;

    private DatabaseAccess(Context context) {
        this.openHelper = new DatabaseOpenHelper(context);
    }
    public static DatabaseAccess getInstance(Context context) {
        if (instance == null) {
            instance = new DatabaseAccess(context);
        }
        return instance;
    }

    /**
    * Open the database connection.
    */
    public void open() {
        this.database = openHelper.getWritableDatabase();
    }

    /**
    * Close the database connection.
    */
    public void close() {
        if (database != null) {
            this.database.close();
        }
    }

    /**
    * Read all quotes from the database.
    *
    * @return a List of quotes
    */
    public List<String> getQuotes() {
        List<String> list = new ArrayList<>();
        Cursor cursor = database.rawQuery("SELECT quote FROM quotes", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            list.add(cursor.getString(0));
            cursor.moveToNext();
        }
        cursor.close();
        return list;
    }
}

How can I resolve this problem from the above code?

A.A Noman
  • 5,244
  • 9
  • 24
  • 46

2 Answers2

0

According to the tutorial you have mentioned, the developer has put the quotes.db.zip file inside assets/databases directory. But you are mentioning that you have placed the .db file instead, please re-check.

iamgopal
  • 634
  • 5
  • 12
0

I have seen the similar post. I hope it will help you. Find the link below: how to put database and read database from assets folder android which are created and exported in sqllite

Also check the permission

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Prafulla Malviya
  • 375
  • 3
  • 17