【问题标题】:Getting error in accessing SQLite database in android [closed]在android中访问SQLite数据库时出错[关闭]
【发布时间】:2014-06-03 11:49:48
【问题描述】:

我已经尝试了很多关于如何在 android 项目中显示资产文件夹中的数据的代码,但我无法做到这一点。请帮我解决这个问题。

感谢您的帮助 编辑:-
我的适配器类

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;

    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteException;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;

    public class DBAdapter extends SQLiteOpenHelper{
        private static String DB_PATH = "/data/data/com.example.mynwedb/databases/wbty";

        private static String DB_NAME = "wbty";

        private SQLiteDatabase myDataBase;

        private final Context myContext;

        public DBAdapter(Context context) 
        {
            super(context, DB_NAME, null, 1);
            this.myContext = context;
        }

        public void createDataBase() throws IOException{
            boolean dbExist = checkDataBase();

            if(dbExist)
            {
                Log.i("DB....", "database available....");
            }
            else
            {
                this.getWritableDatabase();

                try {

                    copyDataBase();

                } catch (IOException e) {

                    throw new Error("Error copying database");

                }

                Log.i("DB..", "database created.....");
            }   

        }


        public boolean checkDataBase(){

            SQLiteDatabase checkDB = null;

            try{

                String myPath = DB_PATH + DB_NAME;

                checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

            }catch(SQLiteException e){

                Log.e("CheckDb","DB not found");
                //database does't exist yet.

                if(checkDB != null){

                    checkDB.close();

                }
            }
            finally
            {
                if(checkDB != null){

                    checkDB.close();

                } 
                this.close();
            }
            return checkDB != null ? true : false;

        }




        private void copyDataBase() throws IOException{

            InputStream myInput = myContext.getAssets().open(DB_NAME);

            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 SQLiteDatabase openDataBase() throws SQLException{

            String myPath = DB_PATH + DB_NAME;

            return myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

        }


        @Override

        public synchronized void close() {

            if(myDataBase != null)

                myDataBase.close();

            super.close();

        }

        @Override

        public void onCreate(SQLiteDatabase db) {

        }

        @Override

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


        }  


        public void getData()
        {
            SQLiteDatabase myDB ;
            Cursor cursor ;
            try {

                myDB=this.openDataBase();                   

                cursor=myDB.rawQuery("SELECT * FROM descriptions",null);


                if (cursor != null ) {
                    if  (cursor.moveToFirst()) {
                        do {

                            // put your code to get data from cursor                      

                        }while (cursor.moveToNext());
                    }

                }



                if(cursor != null)
                {
                    myDB.close();
                    cursor.close();
                }                      
            }catch(SQLException sqle){

                throw sqle;

            }


        }
    } 

还有 MyActivity 类:-

import java.io.IOException;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

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

        DBAdapter myDbHelper = new DBAdapter(MainActivity.this); 
        try 
        {
            myDbHelper.createDataBase();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        finally
        {
            myDbHelper.close();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

我已将 db 文件保存在 assets 文件夹中。

【问题讨论】:

  • 向我们展示您的代码的相关部分。
  • 你想从asset文件夹中获取数据还是使用sqlite数据库,在这里粘贴一些代码。无论你尝试过什么。
  • 想要从 assets 文件夹中获取数据

标签: android sqlite


【解决方案1】:

您会遇到哪种错误?请告诉我们更多关于您的问题并发布 logcat。这不应该是一个答案,但我需要解释一下你做错了什么:

你为 outputFile 写的:

       String outFileName = DB_PATH + DB_NAME;

但这会给你以下路径:

      "/data/data/com.example.mynwedb/databases/wbtywbty";

因为你的DB_PATH

      "/data/data/com.example.mynwedb/databases/wbty";

而你的DB_NAME 是:

      "wbty";

如果我们得到更多信息,我会尽力帮助你......

编辑

checkDatabase() 中相同:

     String myPath = DB_PATH + DB_NAME;

【讨论】:

  • 感谢您的回答,实际上我正在获取我的 db 文件,但在访问其中的数据时我被卡住了。请帮助..
  • 好的,您能否发布 logcat 以查看您遇到哪种错误?
  • 我在 logcat 中没有收到任何错误。我正在获取我的 db 文件,但我无法从中获取数据。
  • 好吧,再次抱歉这个问题,但我需要了解更多信息。 1. copyDataBase() 是否成功? 2. 你想从哪个数据库中获取,原始的还是复制的? 3. 你的问题是你不知道如何获取数据,因为 getData();没有函数,没有获取数据的代码?
  • 实际上我想从原始数据中获取数据,并且我想显示数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多