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 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突