在 Android 应用中导入 sql 脚本

Posted

技术标签:

【中文标题】在 Android 应用中导入 sql 脚本【英文标题】:Import sql script in Android app 【发布时间】:2018-01-04 10:29:02 【问题描述】:

我有一个带有我的数据库的 mysql 脚本,我想使用该脚本将此数据库导入我的 android 应用程序,当我执行此代码时它可以工作(我没有任何异常或错误)但是当我尝试从 DB 获取信息它不起作用。

    private static String DB_PATH = "/data/data/com.example.importDB/databases/";
    private static String DB_NAME = "mydb.sql";
    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public DataBaseHelper(Context context) 
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    

    public void createDataBase() throws IOException 
        boolean dbExist = checkDataBase();
        if(dbExist)
            //do nothing - database already exist
        else
            this.getReadableDatabase();
            try 
                copyDataBase();
             catch (IOException e) 
                throw new Error("Error copying database");
            
        
    

    private boolean checkDataBase()
        SQLiteDatabase checkDB = null;
        try
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        catch(SQLiteException e)
            //database does't exist yet.
        
        if(checkDB != null)
            checkDB.close();
        
        return checkDB != null ? true : false;
    

    private void copyDataBase() throws IOException
        InputStream myInput = myContext.getResources().openRawResource(R.raw.mydb);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0)
            myOutput.write(buffer, 0, length);
        
        myOutput.flush();
        myOutput.close();
        myInput.close();

    

    public void openDataBase() throws SQLException 
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    

    @Override
    public synchronized void close() 
        if(myDataBase != null)
            myDataBase.close();

        super.close();
    

我的“mydb.sql”在 res/raw 文件夹中

这是 mySql 脚本:

https://mega.nz/#!KUkA0JRY!r2BsQwmJbtmxgTAB1DZVpG-j_JO4oEhY9oIfg3K4Ohk

谢谢

【问题讨论】:

您的脚本链接要求提供“解密密钥” - 另外,您是否正在导入脚本?或者尝试运行脚本来导入数据?一个 mySQL DB 应该有多个文件... 我更新了链接,我正在尝试运行脚本并生成包含所有信息的数据库 【参考方案1】:

您正在复制一个 SQL 脚本,然后将其用作数据库。这行不通。

您需要在 Android 中创建一个新数据库。然后你有几个选项来运行脚本 SQL:

1) 如果将它保存在文件中很重要,您可以找到像 ScriptRunner (http://gulvaniharesh.blogspot.com/2013/08/import-sql-script-of-mysql-from-java.html) 这样的工具 - 我没有使用它,但 Android 没有类似的东西。

2) 将您的 SQL 脚本移动到创建数据库时执行的静态字符串。我已经看到了这个并且做了很多。

3) 将您的 SQL 脚本移动到 XML 资源,然后像上面的 #2 一样执行。我也看到并做了很多。

【讨论】:

以上是关于在 Android 应用中导入 sql 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中导入名为update.sql脚本,用shell实现,怎么写啊

Navicat中导入数据库SQL脚本并执行

在 Node 环境中导入 SQL 转储

在 Eclipse 中的 android 应用程序中导入打开的街道地图

在android Studio中导入.aar [重复]

在 webpack 中导入非模块供应商脚本