连接表sqlite android

时间:2016-02-20 15:09:27

标签: java android sqlite

我有两个表:用户和余额。 用户DAO:

public class NewUserDAO {
    public static final String TAG = "NewUserDAO";
    public static final String TABLE_NEWUSER = "newUser";
    //database fields
    private SQLiteDatabase mDataBase;
    private DatabaseHandler mDbHelper;
    private Context mContext;
    private String [] mAllColumns = {
            DatabaseHandler.COLUMN_NEWUSER_ID,
            DatabaseHandler.COLUMN_NEWUSER_NAME, DatabaseHandler.COLUMN_NEW_USER_PASSWORD,
            DatabaseHandler.COLUMN_NEW_USER_AGE };

    public NewUserDAO(Context context){
        this.mContext = context;
        mDbHelper = new DatabaseHandler(context);
        try{
            open();
        } catch (SQLException e){
            Log.e(TAG,"SQLexception on opening database" + e.getMessage());
            e.printStackTrace();
        }
    }
    public void open() throws SQLException{
        mDataBase = mDbHelper.getWritableDatabase();
    }
    public void close(){
        mDbHelper.close();
    }
    public void createNewUser(NewUserTable newUserTable){
        ContentValues values = new ContentValues();
        values.put(DatabaseHandler.COLUMN_NEWUSER_NAME,newUserTable.getName());
        values.put(DatabaseHandler.COLUMN_NEW_USER_PASSWORD, newUserTable.getPassword());
        values.put(DatabaseHandler.COLUMN_NEW_USER_AGE, newUserTable.getAge());
        mDataBase.insert(TABLE_NEWUSER, null, values);
        mDataBase.close();
    }

}

平衡DAO:

public class BalanceDAO {
public static final String TAG = "BalanceDAO";
public static final String TABLE_BALANCE = "balanceOfUser";
private Context mContext;

//Database fields
private SQLiteDatabase mDatabase;
private DatabaseHandler mDhelper;
private String[] mAllColumns = {
        DatabaseHandler.COLUMN_BALANCE_ID,
        DatabaseHandler.COLUMN_BALANCE_DOLLARBALANCE,
        DatabaseHandler.COLUMN_BALANCE_RUBBALANCE,
        DatabaseHandler.COLUMN_BALANCE_NEW_USER_ID
};
public BalanceDAO (Context context){
    mDhelper = new DatabaseHandler(context);
    this.mContext = context;
    try{
        open();
    }
    catch (SQLException e){
        Log.e(TAG, "SQLException on openning database" + e.getMessage());
        e.printStackTrace();
    }
}
public void open() throws SQLException {
    mDatabase = mDhelper.getWritableDatabase();
}
public void close(){
    mDhelper.close();
}
public void createBalance (BalanceTable balanceTable){
    ContentValues values = new ContentValues();
    values.put(DatabaseHandler.COLUMN_BALANCE_DOLLARBALANCE,balanceTable.getDollarBalance());
    values.put(DatabaseHandler.COLUMN_BALANCE_RUBBALANCE,balanceTable.getRubBalance());
    mDatabase.insert(TABLE_BALANCE, null, values);
    mDatabase.close();
 }
}

和SQLiteOpenHelper类:

public class DatabaseHandler extends SQLiteOpenHelper {

 //COLUMNS OF THE NEW USER TABLE
public static final String TABLE_NEWUSER = "newUser";
public static final String COLUMN_NEWUSER_ID = "id";
public static final String COLUMN_NEWUSER_NAME = "name";
public static final String COLUMN_NEW_USER_PASSWORD = "password";
public static final String COLUMN_NEW_USER_AGE = "age";

//COLUMNS OF THE BALANCE TABLE
public static final String COLUMN_BALANCE_ID = "id";
public static final String TABLE_BALANCE = "balanceOfUser";
public static final String COLUMN_BALANCE_DOLLARBALANCE = "dollarBalance";
public static final String COLUMN_BALANCE_RUBBALANCE = "rubBalance";
public static final String COLUMN_BALANCE_NEW_USER_ID = "newUserId";

private static final String DATABASE_NAME = "webStore";
private static final int DATABASE_VERSION = 1;


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

@Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
    if (!db.isReadOnly()) {
        // Enable foreign key constraints
        db.execSQL("PRAGMA foreign_keys=ON;");
    }
}

@Override
public void onCreate(SQLiteDatabase db) {
    String SQL_CREATE_NEWUSER = "CREATE TABLE " + TABLE_NEWUSER + "("
            + COLUMN_NEWUSER_ID + " INTEGER PRIMARY KEY autoincrement,"
            + COLUMN_NEWUSER_NAME + " TEXT not null,"
            + COLUMN_NEW_USER_PASSWORD + " TEXT not null,"
            + COLUMN_NEW_USER_AGE + " INTEGER"
            + ")";
    db.execSQL(SQL_CREATE_NEWUSER);
    String SQL_CREATE_BALANCE = "CREATE TABLE " + TABLE_BALANCE + "("
            + COLUMN_BALANCE_ID + " INTEGER PRIMARY KEY autoincrement,"
            + COLUMN_BALANCE_DOLLARBALANCE + " INTEGER,"
            + COLUMN_BALANCE_RUBBALANCE + " INTEGER,"
            + COLUMN_BALANCE_NEW_USER_ID + " INTEGER," + "FOREIGN KEY("+COLUMN_BALANCE_NEW_USER_ID+") REFERENCES "
            + TABLE_NEWUSER + "(id) "+ ")" ;
    db.execSQL(SQL_CREATE_BALANCE);
    onCreate(db);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NEWUSER);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_BALANCE);
 }
}

我想加入用户和余额表。我能怎么做?当我调用Create Method时,我有例外。

public void CreateUser(View view) {
    etName = (EditText)findViewById(R.id.etName);
    etPassword = (EditText)findViewById(R.id.etPassword);
    etAge = (EditText)findViewById(R.id.etAge);
    String name = String.valueOf(etName.getText());
    String password = String.valueOf(etPassword.getText());
    int age = Integer.parseInt(String.valueOf(etAge.getText()));
    BalanceTable balanceTable = new BalanceTable(0,0);
    NewUserTable newUserTable = new NewUserTable(name,password,age);
    //write to database of user from our edit texts
    DatabaseHandler databaseHandler = new DatabaseHandler(this);
    Log.d("Insert: ", "Inserting ..");
    NewUserDAO dbForUser = new NewUserDAO(this);
    dbForUser.createNewUser(newUserTable);
    BalanceDAO balanceDAO = new BalanceDAO(this);
    balanceDAO.createBalance(balanceTable);
}

从编辑文本中我获取数据。请帮忙

1 个答案:

答案 0 :(得分:0)

如果join,inner(我认为是你想要的)有几种类型,它显示匹配的数据,左边显示第一个表中的所有数据,第二个表中满足on条件的任何其他数据或者右边显示所有来自第二个表格和任何形式的匹配权利。

要加入两个表,您必须使用诸如

之类的语句
"SELECT <all the values you want> "+  
 " FROM users" +
 " left join balance" +
 " ON users.id=balance.userid " +
 " where <some condition> "+
 " order by gmttimestamp ;"; "

这将为您提供混合表的结果集