zxd_72 2013-06-07 09:32 采纳率: 0%
浏览 2492
已采纳

复制自定义的 sqlite 数据库到 android 中的错误

我想复制一个自定义的 sqlite 数据库到 android 中

public class DataBaseHelper extends SQLiteOpenHelper
{
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
private static String DB_PATH = "/data/data/mypackagename/databases/";//path of our database
private static String DB_NAME ="application-database";// Database name
private SQLiteDatabase mDataBase; 
private final Context mContext;
public DataBaseHelper(Context context) 
{
    super(context, DB_NAME, null, 1);
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    this.mContext = context;
}   
public void createDataBase() throws IOException
{
    //If database not exists copy it from the assets
      boolean mDataBaseExist = checkDataBase();
    if(!mDataBaseExist)
    {
        this.getReadableDatabase();
        this.close();
        try 
        {
            //Copy the database from assests
            copyDataBase();
            Log.e(TAG, "createDatabase database created");
        } 
        catch (IOException mIOException) 
        {
            throw new Error("ErrorCopyingDataBase");
        }
    }
}

当运行到 InputStream mInput = mContext.getAssets().open(DB_NAME);
给出一个错误,程序直接跳转到

catch (IOException mIOException) 
        {
            throw new Error("ErrorCopyingDataBase");
        }

数据库是在 assets 文件夹中。
这个问题出在哪里呢?

  • 写回答

3条回答 默认 最新

  • Curie-87 2013-06-08 02:27
    关注
       /**
         * 
         * @param sqlQuery SQL query to be fired
         * @param myObj Object to be fetched
         * @return Returns a Vector object containing raws fetched by the sqlQuery
         */
    
        public ArrayList<Object> fetchAllRows(String sqlQuery, Object myObj)
        {
            ArrayList<Object> records = new ArrayList<Object>();
            Object newObj;
            Cursor cursor = execQuery(sqlQuery);
    
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    //          System.out.println("Test While");
                    newObj = ClassUtils.newObject(myObj);
                    for (int i = 0; i < cursor.getColumnCount(); i++) {
                        String key = cursor.getColumnName(i);
                        String value = cursor.getString(i);
                        if (value == null) {
                            value = "";
                        }
                        ClassUtils.objectMapping(newObj, key, value);
                    }
                    records.add(newObj);
                }
                cursor.close();
            }
            return records;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) 
        {
    
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
    
        }
    }
    

    在第一个 activity 中添加下面的代码:

     Global.context = this;
     Global.dbMain = new DBConnect(this, Global.DB_MAIN);
    

    创建一个 Global.java 文件

    public class Global 
    {
        public static String DB_PATH = "data/data/YOUR_PACKAGE_NAME/databases/";
        public static final String DB_MAIN = "Database.sqlite";
    
        public static Context context;
        public static DBConnect dbMain;
    }
    

    现在假定你想从表格中选择信息

    Global.dbMain.openDataBase();
    System.out.println("database open ");
        try
        {
          Cursor c = Global.dbMain.execQuery("select * from tableName", null);
          while(c.moveToNext())
           {
             System.out.println("in while");
             String str= c.getString(1);
           }
          c.close();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
    Global.dbMain.close();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)