ссылаясь на таблицу файла базы данных, хранящейся в папке активов (Android) - PullRequest
0 голосов
/ 09 декабря 2011

Я новичок в SQL. У меня есть база данных mac-адресов, которые я создал с помощью браузера Sqliteman.Это простая база данных с одной таблицей с именем access_points.База данных с именем macad.db находится в моей папке активов. У меня есть приложение для вставки новых mac-адресов в таблицу access_points из edittextview.Адаптер БД имеет следующие инициализации:

public static String DATABASE_NAME="macad.db";
public static String DATABASE_PATH= "/data/data/com.example.myproject/databases/";
public static String LOCAL_DATABASE_NAME="macad.db";

какое должно быть значение для инициализации моей таблицы (access_points).Пожалуйста, замените вопросительные знаки своим ответом.

public static String DATABASE_TABLE= ????;

Кроме того, мой метод insertmac в DB Adapter приведен ниже.Как бы я сослался на мою таблицу "access_points" macad.db, которая хранится в папке активов?пожалуйста, замените вопросительные знаки своим ответом в приведенной ниже инструкции db.insert ().

public long insertmac(String mac) 
    {
        ContentValues macValue = new ContentValues();
        macValue.put("macaddress1", macaddress1);
        return db.insert(????, null, macValue);
    }

Также есть ли способ убедиться, что, если mac-адрес уже существует в таблице access_points, он неположить снова в таблицу ??Заранее спасибо за любое решение. Мой класс DBAdapter находится ниже:

public class DbAdapternew {
    private static final String TAG = DbAdapter.class.getName();
    //private DatabaseHelper mDbHelper;
    public static SQLiteDatabase myDb;
    public static String DATABASE_NAME="macad.db";
    public static String DATABASE_TABLE="access_points";
    public static String DATABASE_PATH= "/data/data/com.example.myproject/databases/";
    public static String LOCAL_DATABASE_NAME="macad.db";
    private static final int DATABASE_VERSION = 2;
    private static Context myContext;
    public static final String KEY_MAC = "mac_add"; // column 1
    public static final String KEY_floor = "floor_id";  // column 2
    public static final String KEY_build= "building_id"; //column 3
    public static final String KEY_zone = "zone_id";      // column 4 
    private DatabaseHelper DBHelper;
    private static class DatabaseHelper extends SQLiteOpenHelper {



        Context helperContext;

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            helperContext = context;
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database!!!!!");
            onCreate(db);
        }

        public void createDataBase() throws IOException {
            Log.i(TAG,"DB NAME : "+DATABASE_NAME);
            Log.i(TAG,"DB PATH : "+DATABASE_PATH);
            Log.i(TAG,"LOCAL DB NAME : "+LOCAL_DATABASE_NAME);


            boolean dbExist = checkDataBase();
            if (dbExist) {
            } else {
                this.getReadableDatabase();
                try {
                    copyDataBase();
                } catch (IOException e) {
                    //throw new Error("Error copying database");
                }
            }
        }

        public SQLiteDatabase getDatabase() {
            String myPath = DATABASE_PATH + DATABASE_NAME;
            return SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        }

        private boolean checkDataBase() {
            SQLiteDatabase checkDB = null;
            try {
                String myPath = DATABASE_PATH + DATABASE_NAME;
                checkDB = SQLiteDatabase.openDatabase(myPath, null,
                        SQLiteDatabase.OPEN_READONLY);
            } catch (SQLiteException e) {
            }
            if (checkDB != null) {
                checkDB.close();
            }
            return checkDB != null ? true : false;
        }

        private void copyDataBase() throws IOException {

            Log.i(TAG,"LOCAL DB NAME : "+LOCAL_DATABASE_NAME);
            // Open your local db as the input stream
            InputStream myInput = myContext.getAssets().open(LOCAL_DATABASE_NAME);

            // Path to the just created empty db
            String outFileName = DATABASE_PATH + DATABASE_NAME;

            // Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);

            // transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            // Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
        }

        public void openDataBase() throws SQLException {
            // Open the database
            String myPath = DATABASE_PATH + DATABASE_NAME;
            myDb = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READWRITE);
        }

        @Override
        public synchronized void close() {

            if (myDb != null)
                myDb.close();

            super.close();

        }
    }


    public DbAdapternew(Context ctx) {
        this.myContext = ctx;
        DBHelper = new DatabaseHelper(ctx);
    }

    public DbAdapternew open() throws SQLException {
        myDb = DBHelper.getWritableDatabase();

        return this;

    }

    public void close() {
        DBHelper.close();
    }

    public Cursor fetchAllData(String table) {

        try {
            myDb.rawQuery("SELECT * FROM " + table, null);
            Log.i(TAG, "Row Collected");
        } catch (SQLiteException e) {
            myDb.execSQL("CREATE TABLE IF NOT EXISTS " + table
                    + " (mac_add VARCHAR)");
            Log.i(TAG, "TABLE Not Found");
        }
        return myDb.rawQuery("SELECT * FROM " + table, null);
    }

    public Cursor fetchData(String sqlQuery) {

        try {
            myDb.rawQuery(sqlQuery, null);
            Log.i(TAG, "Query Executed");
        } catch (SQLiteException e) {
            Log.i(TAG, e.toString());
        }
        return myDb.rawQuery(sqlQuery, null);
    }

    public void executeQuery(String sql) {
        myDb.execSQL(sql);
    }
     public long insertrow(String editmac) 
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_MAC, editmac.toString());  //for column 1 in macad.db
            initialValues.put(KEY_floor, "uf");            //for column 2 
            initialValues.put(KEY_build, "ub");            //for column 3
            initialValues.put(KEY_zone, "uz");             //for column 4
            return myDb.insert(DATABASE_TABLE, null, initialValues);
        }

}

В моей работе есть нажатие кнопки обновления, которая должна привести к вводу напечатанного mac-адреса в edittextview в macad.db.код для этого:

updzonedb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                db.open();
                try
                {

                  db.insertrow(editmac.getText().toString());   


                 }
                catch (Exception ex)
                {

                  }
                db.close();
            }
          });

1 Ответ

0 голосов
/ 09 декабря 2011

Вы скопировали файл базы данных .db из ресурса в каталог data/data/<package_name>databases?

Если да , тогда используйте то же имя таблицы, которое находится вваша база данных при создании с помощью SQLIte Manager.

Если NO , тогда пройдите этот вопрос SO Как отправить приложение Android с базой данных?

public static String DATABASE_TABLE= "access_points";

и

public long insertmac(String mac) 
    {
        ContentValues macValue = new ContentValues();
        macValue.put("macaddress1", macaddress1);
        return db.insert(DATABASE_TABLE, null, macValue);
    }
...