{"id":3694,"date":"2015-11-26T10:45:17","date_gmt":"2015-11-26T10:45:17","guid":{"rendered":"http:\/\/www.fandroid.info\/?page_id=3694"},"modified":"2019-02-13T10:03:25","modified_gmt":"2019-02-13T08:03:25","slug":"kak-podklyuchit-bazu-dannyh-sqlite-v-android-prilozhenie","status":"publish","type":"page","link":"https:\/\/www.fandroid.info\/kak-podklyuchit-bazu-dannyh-sqlite-v-android-prilozhenie\/","title":{"rendered":"\u041a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0432 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435[:en]How to connect a SQLite database to an Android application"},"content":{"rendered":"

\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u043e\u0432\u00a0\u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c\u00a0\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0432 android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043d\u043e\u00a0\u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0443\u044e\u00a0\u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043a\u0430\u043a\u00a0\u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0432 android\u00a0\u043f\u0440\u043e\u0435\u043a\u0442?<\/p>\n

\u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u043d\u043e\u0433\u043e \u043b\u044e\u0434\u0435\u0439 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b CRUD, \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u044f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e SQLite \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 .<\/p>\n

\u0412 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0SQLite Software Manager, \u0438\u00a0\u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0411\u0414 \u0432 \u0430\u043d\u0434\u0440\u043e\u0438\u0434-\u043f\u0440\u043e\u0435\u043a\u0442,\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u00a0Android SQLite API.<\/p>\n

https:\/\/youtu.be\/iE_bsPfB00w<\/p>\n

\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n

<LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\n    tools:context=\".CopyDbActivity\">\n\n    <Button\n        android:id=\"@+id\/button01\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Copy Database\"><\/Button>\n\n\n<\/LinearLayout>\n<\/pre>\n
import android.database.Cursor;\nimport android.database.SQLException;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.Toast;\n\nimport java.io.IOException;\n\npublic class CopyDbActivity extends AppCompatActivity {\n\n    Cursor c = null;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_copy_db);\n\n        ((Button) findViewById(R.id.button01)).setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                DatabaseHelper myDbHelper = new DatabaseHelper(CopyDbActivity.this);\n                try {\n                    myDbHelper.createDataBase();\n                } catch (IOException ioe) {\n                    throw new Error(\"Unable to create database\");\n                }\n                try {\n                    myDbHelper.openDataBase();\n                } catch (SQLException sqle) {\n                    throw sqle;\n                }\n                Toast.makeText(CopyDbActivity.this, \"Success\", Toast.LENGTH_SHORT).show();\n                c = myDbHelper.query(\"EMP_TABLE\", null, null, null, null, null, null);\n                if (c.moveToFirst()) {\n                    do {\n                        Toast.makeText(CopyDbActivity.this,\n                                \"_id: \" + c.getString(0) + \"\\n\" +\n                                        \"E_NAME: \" + c.getString(1) + \"\\n\" +\n                                        \"E_AGE: \" + c.getString(2) + \"\\n\" +\n                                        \"E_DEPT:  \" + c.getString(3),\n                                Toast.LENGTH_LONG).show();\n                    } while (c.moveToNext());\n                }\n            }\n        });\n\n    }\n\n\n}<\/pre>\n
import android.content.Context;\nimport android.database.Cursor;\nimport android.database.SQLException;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteException;\nimport android.database.sqlite.SQLiteOpenHelper;\nimport android.util.Log;\n\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\n\/**\n * Created by Aylar-HP on 12\/10\/2015.\n *\/\npublic class DatabaseHelper extends SQLiteOpenHelper {\n\n    String DB_PATH = null;\n    private static String DB_NAME = \"extenalDB\";\n    private SQLiteDatabase myDataBase;\n    private final Context myContext;\n\n    public DatabaseHelper(Context context) {\n        super(context, DB_NAME, null, 10);\n        this.myContext = context;\n        this.DB_PATH = \"\/data\/data\/\" + context.getPackageName() + \"\/\" + \"databases\/\";\n        Log.e(\"Path 1\", DB_PATH);\n    }\n\n\n    public void createDataBase() throws IOException {\n        boolean dbExist = checkDataBase();\n        if (dbExist) {\n        } else {\n            this.getReadableDatabase();\n            try {\n                copyDataBase();\n            } catch (IOException e) {\n                throw new Error(\"Error copying database\");\n            }\n        }\n    }\n\n    private boolean checkDataBase() {\n        SQLiteDatabase checkDB = null;\n        try {\n            String myPath = DB_PATH + DB_NAME;\n            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);\n        } catch (SQLiteException e) {\n        }\n        if (checkDB != null) {\n            checkDB.close();\n        }\n        return checkDB != null ? true : false;\n    }\n\n    private void copyDataBase() throws IOException {\n        InputStream myInput = myContext.getAssets().open(DB_NAME);\n        String outFileName = DB_PATH + DB_NAME;\n        OutputStream myOutput = new FileOutputStream(outFileName);\n        byte[] buffer = new byte[10];\n        int length;\n        while ((length = myInput.read(buffer)) > 0) {\n            myOutput.write(buffer, 0, length);\n        }\n        myOutput.flush();\n        myOutput.close();\n        myInput.close();\n\n    }\n\n    public void openDataBase() throws SQLException {\n        String myPath = DB_PATH + DB_NAME;\n        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);\n\n    }\n\n    @Override\n    public synchronized void close() {\n        if (myDataBase != null)\n            myDataBase.close();\n        super.close();\n    }\n\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n        if (newVersion > oldVersion)\n            try {\n                copyDataBase();\n            } catch (IOException e) {\n                e.printStackTrace();\n\n            }\n    }\n\n    public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {\n        return myDataBase.query(\"EMP_TABLE\", null, null, null, null, null, null);\n    }\n\n\n}\n<\/pre>\n

\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>[:en]There are many lessons on how to create and edit SQLite databases in android applications, but how to use the finished database in the application, how to import the created SQLite databases into the android project?<\/p>\n

In fact, many developers are faced with data entry problems when it comes to testing an existing database, many people do not have time to create a new database and implement all CRUD methods, they just want to use the existing SQLite database.<\/p>\n

In this lesson, you will learn how to create a SQLite database with SQLite Software Manager, and import the created database into an android project using the Android SQLite API.<\/p>\n

https:\/\/youtu.be\/iE_bsPfB00w<\/p>\n

Project source code:<\/p>\n

<LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\n    tools:context=\".CopyDbActivity\">\n\n    <Button\n        android:id=\"@+id\/button01\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Copy Database\"><\/Button>\n\n\n<\/LinearLayout>\n<\/pre>\n
import android.database.Cursor;\nimport android.database.SQLException;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.Toast;\n\nimport java.io.IOException;\n\npublic class CopyDbActivity extends AppCompatActivity {\n\n    Cursor c = null;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_copy_db);\n\n        ((Button) findViewById(R.id.button01)).setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                DatabaseHelper myDbHelper = new DatabaseHelper(CopyDbActivity.this);\n                try {\n                    myDbHelper.createDataBase();\n                } catch (IOException ioe) {\n                    throw new Error(\"Unable to create database\");\n                }\n                try {\n                    myDbHelper.openDataBase();\n                } catch (SQLException sqle) {\n                    throw sqle;\n                }\n                Toast.makeText(CopyDbActivity.this, \"Success\", Toast.LENGTH_SHORT).show();\n                c = myDbHelper.query(\"EMP_TABLE\", null, null, null, null, null, null);\n                if (c.moveToFirst()) {\n                    do {\n                        Toast.makeText(CopyDbActivity.this,\n                                \"_id: \" + c.getString(0) + \"\\n\" +\n                                        \"E_NAME: \" + c.getString(1) + \"\\n\" +\n                                        \"E_AGE: \" + c.getString(2) + \"\\n\" +\n                                        \"E_DEPT:  \" + c.getString(3),\n                                Toast.LENGTH_LONG).show();\n                    } while (c.moveToNext());\n                }\n            }\n        });\n\n    }\n\n\n}<\/pre>\n
import android.content.Context;\nimport android.database.Cursor;\nimport android.database.SQLException;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteException;\nimport android.database.sqlite.SQLiteOpenHelper;\nimport android.util.Log;\n\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\n\/**\n * Created by Aylar-HP on 12\/10\/2015.\n *\/\npublic class DatabaseHelper extends SQLiteOpenHelper {\n\n    String DB_PATH = null;\n    private static String DB_NAME = \"extenalDB\";\n    private SQLiteDatabase myDataBase;\n    private final Context myContext;\n\n    public DatabaseHelper(Context context) {\n        super(context, DB_NAME, null, 10);\n        this.myContext = context;\n        this.DB_PATH = \"\/data\/data\/\" + context.getPackageName() + \"\/\" + \"databases\/\";\n        Log.e(\"Path 1\", DB_PATH);\n    }\n\n\n    public void createDataBase() throws IOException {\n        boolean dbExist = checkDataBase();\n        if (dbExist) {\n        } else {\n            this.getReadableDatabase();\n            try {\n                copyDataBase();\n            } catch (IOException e) {\n                throw new Error(\"Error copying database\");\n            }\n        }\n    }\n\n    private boolean checkDataBase() {\n        SQLiteDatabase checkDB = null;\n        try {\n            String myPath = DB_PATH + DB_NAME;\n            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);\n        } catch (SQLiteException e) {\n        }\n        if (checkDB != null) {\n            checkDB.close();\n        }\n        return checkDB != null ? true : false;\n    }\n\n    private void copyDataBase() throws IOException {\n        InputStream myInput = myContext.getAssets().open(DB_NAME);\n        String outFileName = DB_PATH + DB_NAME;\n        OutputStream myOutput = new FileOutputStream(outFileName);\n        byte[] buffer = new byte[10];\n        int length;\n        while ((length = myInput.read(buffer)) > 0) {\n            myOutput.write(buffer, 0, length);\n        }\n        myOutput.flush();\n        myOutput.close();\n        myInput.close();\n\n    }\n\n    public void openDataBase() throws SQLException {\n        String myPath = DB_PATH + DB_NAME;\n        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);\n\n    }\n\n    @Override\n    public synchronized void close() {\n        if (myDataBase != null)\n            myDataBase.close();\n        super.close();\n    }\n\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n        if (newVersion > oldVersion)\n            try {\n                copyDataBase();\n            } catch (IOException e) {\n                e.printStackTrace();\n\n            }\n    }\n\n    public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {\n        return myDataBase.query(\"EMP_TABLE\", null, null, null, null, null, null);\n    }\n\n\n}\n<\/pre>\n

\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"

\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u043e\u0432\u00a0\u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c\u00a0\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0432 android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043d\u043e\u00a0\u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0443\u044e\u00a0\u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043a\u0430\u043a\u00a0\u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQLite \u0432 android\u00a0\u043f\u0440\u043e\u0435\u043a\u0442? \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u043d\u043e\u0433\u043e \u043b\u044e\u0434\u0435\u0439 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 […]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":66,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/pages\/3694"}],"collection":[{"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/comments?post=3694"}],"version-history":[{"count":2,"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/pages\/3694\/revisions"}],"predecessor-version":[{"id":9210,"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/pages\/3694\/revisions\/9210"}],"wp:attachment":[{"href":"https:\/\/www.fandroid.info\/wp-json\/wp\/v2\/media?parent=3694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}