从SQLite DB电子邮件和用户分数中获取并分别将分数发送给每个用户

时间:2012-01-20 16:43:56

标签: android sqlite

我在Android中创建了一个应用程序,当您点击发送邮件按钮时,需要向保存在数据库中的所有联系人发送电子邮件,向每个联系人发送电子邮件,分别为

这个想法是在数据库中滑动每个用户的夫妻(电子邮件,得分)并将其传递给发送电子邮件的特定方法

我实施了send方法,以便接收电子邮件地址和相关分数 我测试了发送电子邮件方法并正常工作,

唯一的问题是我无法定义适合的方式 通过点击按钮传递所有电子邮件地址和每个用户的相关分数。

我的DatabaseHelper类如下:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;




public class DatabaseHelper extends SQLiteOpenHelper {

static final String dbName="demoDB";
static final String PlayerTable="Players";
static final String colID="PlayerID";
static final String colName="PlayerName";
static final String colEmail="Email";
static final String colScore="Score";
static final String colDept="Dept";

static final String deptTable="Dept";
static final String colDeptID="DeptID";
static final String colDeptName="DeptName";

static final String viewEmps="ViewEmps";


public DatabaseHelper(Context context) {
    super(context, dbName, null,33);

    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

    db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
            colDeptName+ " TEXT)");

    db.execSQL("CREATE TABLE "+PlayerTable+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
            colName+" TEXT, "+colEmail+" TEXT, "+colScore+" Integer, "+colDept+" INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES "+deptTable+" ("+colDeptID+"));");


    db.execSQL("CREATE TRIGGER fk_empdept_deptid " +
            " BEFORE INSERT "+
            " ON "+PlayerTable+

            " FOR EACH ROW BEGIN"+
            " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+" WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+
            " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
            "  END;");

    db.execSQL("CREATE VIEW "+viewEmps+
            " AS SELECT "+PlayerTable+"."+colID+" AS _id,"+
            " "+PlayerTable+"."+colName+","+
            " "+PlayerTable+"."+colEmail+","+
            " "+PlayerTable+"."+colScore+","+
            " "+deptTable+"."+colDeptName+""+
            " FROM "+PlayerTable+" JOIN "+deptTable+
            " ON "+PlayerTable+"."+colDept+" ="+deptTable+"."+colDeptID
            );
    //Inserts pre-defined sections
    InsertDepts(db);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

    db.execSQL("DROP TABLE IF EXISTS "+PlayerTable);
    db.execSQL("DROP TABLE IF EXISTS "+deptTable);

    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger");
    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger22");
    db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid");
    db.execSQL("DROP VIEW IF EXISTS "+viewEmps);
    onCreate(db);
}

 void AddPlayer(Player emp)
{


     SQLiteDatabase db= this.getWritableDatabase();


    ContentValues cv=new ContentValues();

    cv.put(colName, emp.getName());
    cv.put(colName, emp.getEmail());
    cv.put(colScore, emp.getScore());
    cv.put(colDept, emp.getDept());
    //cv.put(colDept,2);

    db.insert(PlayerTable, colName, cv);
    db.close();


}

 int getPlayerCount()
 {
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor cur= db.rawQuery("Select * from "+PlayerTable, null);
    int x= cur.getCount();
    cur.close();
    return x;
 }

 Cursor getAllPlayers()
 {
     SQLiteDatabase db=this.getWritableDatabase();



     //Cursor cur= db.rawQuery("Select "+colID+" as _id , "+colName+", "+colEmail+","+colScore+" from "+PlayerTable, new String [] {});
     Cursor cur= db.rawQuery("SELECT * FROM "+viewEmps,null);
     return cur;

 }

 Cursor getAllDepts()
 {
     SQLiteDatabase db=this.getReadableDatabase();
     Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, "+colDeptName+" from "+deptTable,new String [] {});

     return cur;
 }

 void InsertDepts(SQLiteDatabase db)
 {
     ContentValues cv=new ContentValues();
        cv.put(colDeptID, 1);
        cv.put(colDeptName, "Sales");
        db.insert(deptTable, colDeptID, cv);
        cv.put(colDeptID, 2);
        cv.put(colDeptName, "IT");
        db.insert(deptTable, colDeptID, cv);
        cv.put(colDeptID, 3);
        cv.put(colDeptName, "HR");
        db.insert(deptTable, colDeptID, cv);
        db.insert(deptTable, colDeptID, cv);

 }

 public String GetDept(int ID)
 {
     SQLiteDatabase db=this.getReadableDatabase();

     String[] params=new String[]{String.valueOf(ID)};
     Cursor c=db.rawQuery("SELECT "+colDeptName+" FROM"+ deptTable+" WHERE "+colDeptID+"=?",params);
     c.moveToFirst();
     int index= c.getColumnIndex(colDeptName);
     return c.getString(index);
 }

 public Cursor getEmpByDept(String Dept)
 {
     SQLiteDatabase db=this.getReadableDatabase();
     String [] columns=new String[]{"_id",colName,colEmail,colScore,colDeptName};
     Cursor c=db.query(viewEmps, columns, colDeptName+"=?", new String[]{Dept}, null, null, null);
     return c;
 }

 public int GetDeptID(String Dept)
 {
     SQLiteDatabase db=this.getReadableDatabase();
     Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},colDeptName+"=?", new String[]{Dept}, null, null, null);
     //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+" WHERE "+colDeptName+"=?", new String []{Dept});
     c.moveToFirst();
     return c.getInt(c.getColumnIndex("_id"));

     }

 public int UpdateEmp(Player emp)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     ContentValues cv=new ContentValues();
     cv.put(colName, emp.getName());
     cv.put(colScore, emp.getScore());
     cv.put(colDept, emp.getDept());
     return db.update(PlayerTable, cv, colID+"=?", new String []{String.valueOf(emp.getID())});

 }

 public void DeleteEmp(Player emp)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     db.delete(PlayerTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
     db.close();



 }

}

请帮帮我。

1 个答案:

答案 0 :(得分:0)

  1. 创建在dbHelper类中返回HashMap的getScores

    public HashMap<String,String> getScores() {
    HashMap<String,String> list = new HashMap<String,String>();
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor = db.rawQuery("Select email,sum(score) from players group by Email",null);
        if (cursor.moveToFirst()) {
            do {
                list.put(cursor.getString(0),cursor.getString(1));
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
    return list;}
    
  2. 使用此方法发送电子邮件假设

  3. sendMail(String mailTo,String score);


    HashMap<String,String> scores = dbHelper.getScores();
    for(Map.Entry entry : scores.entrySet())
    {
         sendMail(entry.getKey(),entry.getValue());
    }
    

    希望这有助于澄清它。