从另一个活动中的一个活动打开数据库

时间:2017-05-12 04:17:47

标签: java android sqlite

我正在尝试重用我在主要活动中创建的数据库。但我不能让第二个活动引用数据库。

主要活动代码:

public class StoreAccount extends AppCompatActivity {
static final int READ_BLOCK_SIZE = 100;

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


    final AccountDB db1 = new AccountDB(this);


    Button buttonSave = (Button) findViewById(R.id.buttonSave);
    buttonSave.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            EditText account = (EditText) findViewById(R.id.editTextAccount);
            String acc = account.getText().toString();
            EditText username = (EditText) findViewById(R.id.editTextUsername);
            String user = username.getText().toString();
            EditText password = (EditText) findViewById(R.id.editTextPassword);
            String pass = password.getText().toString();
            EditText days = (EditText) findViewById(R.id.editTextDays);
            int expiry = Integer.parseInt(days.getText().toString());
            /**
             * CRUD Operations
             * */
            // add Accounts

            db1.addAccount(new Account(acc, user, pass, expiry));
            //db.addBook(new Book("Android Programming: The Big Nerd Ranch Guide", "Bill Phillips and Brian Hardy"));
            //db.addBook(new Book("Learn Android App Development", "Wallace Jackson"));


            // get all accounts
            List<Account> list1 = db1.getAllAccounts();

            // delete one account
            db1.deleteAccount(list1.get(0));

            // get all accounts
            db1.getAllAccounts();

        }

    });
}

第二项活动

public class AccountView extends StoreAccount {
//@Override
protected void onCreate(Bundle savedInstanceState, SQLiteDatabase db) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_account_view);

    Context context = getApplicationContext();
    context.getDatabasePath(AccountDb.AccountDb);
    //AccountDB db1 = new AccountDB(this);
    List<Account> list1 = db1.getAllAccounts();

}

}

数据库代码

public class AccountDB extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "AccountDB";

public AccountDB(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // SQL statement to create account table
    String CREATE_ACCOUNT_TABLE = "CREATE TABLE accounts ( " +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "account TEXT, " +
            "username TEXT, " +
            "password TEXT, " +
            "expiry INTEGER )";

    // create accounts table
    db.execSQL(CREATE_ACCOUNT_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older accounts table if existed
    db.execSQL("DROP TABLE IF EXISTS accounts");

    // create fresh accounts table
    this.onCreate(db);
}
//---------------------------------------------------------------------

/**
 * CRUD operations (create "add", read "get", update, delete) account + get all accounts + delete all accounts
 */

// Accounts table name
private static final String TABLE_ACCOUNTS = "accounts";

// Accounts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_ACCOUNT = "account";
private static final String KEY_USERNAME = "username";
private static final String KEY_PASSWORD = "password";
private static final String KEY_DAYS = "expiry";

private static final String[] COLUMNS = {KEY_ID, KEY_ACCOUNT, KEY_USERNAME, KEY_PASSWORD, KEY_DAYS};

public void addAccount(Account account) {
    Log.d("addAccount", account.toString());
    // 1. get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    // 2. create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();
    values.put(KEY_ACCOUNT, account.getAccount()); // get account
    values.put(KEY_USERNAME, account.getUsername()); // get username
    values.put(KEY_PASSWORD, account.getPassword()); // get password
    values.put(KEY_DAYS, account.getDays()); // get expiry

    // 3. insert
    db.insert(TABLE_ACCOUNTS, // table
            null, //nullColumnHack
            values); // key/value -> keys = column names/ values = column values

    // 4. close
    db.close();
}

public Account getAccount(int id) {

    // 1. get reference to readable DB
    SQLiteDatabase db = this.getReadableDatabase();

    // 2. build query
    Cursor cursor =
            db.query(TABLE_ACCOUNTS, // a. table
                    COLUMNS, // b. column names
                    " id = ?", // c. selections
                    new String[]{String.valueOf(id)}, // d. selections args
                    null, // e. group by
                    null, // f. having
                    null, // g. order by
                    null); // h. limit

    // 3. if we got results get the first one
    if (cursor != null)
        cursor.moveToFirst();

    // 4. build account object
    Account account = new Account();
    account.setId(Integer.parseInt(cursor.getString(0)));
    account.setAccount(cursor.getString(1));
    account.setUsername(cursor.getString(2));
    account.setPassword(cursor.getString(3));
    account.setDays(Integer.parseInt(cursor.getString(4)));

    Log.d("getAccount(" + id + ")", account.toString());

    // 5. return account
    return account;
}

// Get All Accounts
public List<Account> getAllAccounts() {
    List<Account> accounts = new LinkedList<Account>();

    // 1. build the query
    String query = "SELECT  * FROM " + TABLE_ACCOUNTS;

    // 2. get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);

    // 3. go over each row, build account and add it to list
    Account account = null;
    if (cursor.moveToFirst()) {
        do {
            account = new Account();
            account.setId(Integer.parseInt(cursor.getString(0)));
            account.setAccount(cursor.getString(1));
            //account.setUsername(cursor.getString(2));
            //account.setPassword(cursor.getString(3));
            //account.setDays(Integer.parseInt(cursor.getString(4)));

            // Add account to accounts
            accounts.add(account);
        } while (cursor.moveToNext());
    }

    Log.d("getAllAccounts()", accounts.toString());

    // return accounts
    return accounts;
}

// Updating single account
public int updateAccount(Account account) {

    // 1. get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    // 2. create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();
    values.put("account", account.getAccount()); // get account
    values.put("username", account.getUsername()); // get username
    values.put("password", account.getPassword()); // get password
    values.put("expiry", account.getDays()); // get expiry

    // 3. updating row
    int i = db.update(TABLE_ACCOUNTS, //table
            values, // column/value
            KEY_ID + " = ?", // selections
            new String[]{String.valueOf(account.getId())}); //selection args

    // 4. close
    db.close();

    return i;

}

// Deleting single account
public void deleteAccount(Account account) {

    // 1. get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    // 2. delete
    db.delete(TABLE_ACCOUNTS,
            KEY_ID + " = ?",
            new String[]{String.valueOf(account.getId())});

    // 3. close
    db.close();

    Log.d("deleteAccount", account.toString());

}

public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_ACCOUNTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int cnt = cursor.getCount();
    cursor.close();
    return cnt;


 }


}

1 个答案:

答案 0 :(得分:0)

在AccountView Activity中创建Database类的对象并访问数据库类方法

AccountDB accountdb = new AccountDB(this);
List<Account> list1 = accountdb.getAllAccounts();