使用进程和/或运行时运行android的sqlite3

时间:2017-02-19 15:36:50

标签: java android sqlite

我目前正在研究一个需要像在终端中运行sqlite3一样运行sqlite3的android项目。有了这个,我使用了以下方法:

使用Runtime exec()方法:

private void startProcess(String cmd){

    //ProcessBuilder processBuilder = new ProcessBuilder("echo hello world");
    //processBuilder.redirectErrorStream(true);
    try {
        final Process process = Runtime.getRuntime().exec(new String[]{"sqlite3 ", cmd});
        final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        new Thread(new Runnable() {

            String result = "";

            @Override
            public void run() {

                String line;

                try {
                    while((line = reader.readLine()) != null){
                        result += line + "\n";
                    }

                    reader.close();
                    process.getInputStream().close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

                Log.d("response", result);

            }
        }).start();


    } catch (IOException e) {
        e.printStackTrace();
    }


}

使用Process Builder:

     btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startProcess(new String[]{"sqlite3", code_area.getText().toString()});
        }
    });

}

private void startProcess(String[] cmd){

    ProcessBuilder processBuilder = new ProcessBuilder(cmd);
    processBuilder.redirectErrorStream(true);
    try {
        final Process process = processBuilder.start();
        final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        new Thread(new Runnable() {

            String result = "";

            @Override
            public void run() {

                String line;

                try {
                    while((line = reader.readLine()) != null){
                        result += line + "\n";
                    }

                    reader.close();
                    process.getInputStream().close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

                Log.d("response", result);

            }
        }).start();


    } catch (IOException e) {
        e.printStackTrace();
    }


}

两种方法都没有返回任何结果,也没有在logcat中抛出任何错误。

现在,我的问题是,1)如果有的话,它不会返回结果,也不会抛出错误, 2)是否有其他方法以在终端中运行sqlite3的方式运行sqlite3? 3)是否有任何我忽略的逻辑错误?

感谢您的帮助!

修改

我正在使用模拟器测试项目,并且尚未在真实设备上尝试过。

0 个答案:

没有答案
相关问题