如何记录现有记录插入数据库的次数?

时间:2015-06-09 23:58:14

标签: java sqlite android-contentprovider

我是全新的,我确信我以某种方式搞砸了代码,请帮我解决。

我有以下contentprovider用于构建数据库来存储收藏的标签:

public class FTagsContentProvider extends ContentProvider {

     static final String AUTHORITY = "ch.ethz.twimight.FTags";
     private static final String BASE_PATH = "ftags";
     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
              + "/" + BASE_PATH);

     // fields for the database
     public static final String COL_ID = "id";
     public static final String COL_TEXT = "text";
     public static final String COL_COUNT = "count";


     static final int FTAGS = 1;
     static final int FTAGS_ID = 2;

     DBHelper dbHelper;


     private static HashMap<String, String> FTagsMap;

     static final UriMatcher uriMatcher;
       static{
          uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
          uriMatcher.addURI(AUTHORITY, BASE_PATH, FTAGS);
          uriMatcher.addURI(AUTHORITY, BASE_PATH + "/#", FTAGS_ID);

       }

       // database declarations
       private SQLiteDatabase database;
       static final String DATABASE_NAME = "ftagtable.db";
       static final String TABLE_FTAGS = "FTags";
       static final int DATABASE_VERSION = 1;
       private static final String TABLE_FTAGS_CREATE = "create table " 
                  + TABLE_FTAGS
                  + "(" 
                  + COL_ID + " integer primary key autoincrement, " 
                  + COL_TEXT + " text not null, " 
                  + COL_COUNT + " integer"
                  + ");";

       private static class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
             db.execSQL(TABLE_FTAGS_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            Log.w(DBHelper.class.getName(),
                    "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ". Old data will be destroyed");
            db.execSQL("DROP TABLE IF EXISTS " +  TABLE_FTAGS);
            onCreate(db);
        }

       }

    @Override
    public boolean onCreate() {
        // TODO Auto-generated method stub
        Context context = getContext();
        dbHelper = new DBHelper(context);
        database = dbHelper.getWritableDatabase();

        if(database == null)
            return false;
        else
            return true;    
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        // TODO Auto-generated method stub
         SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

         queryBuilder.setTables(TABLE_FTAGS);

          switch (uriMatcher.match(uri)) {

          case FTAGS:
              queryBuilder.setProjectionMap(FTagsMap);
             break;
          case FTAGS_ID:
              queryBuilder.appendWhere( COL_ID + "=" + uri.getLastPathSegment());
             break;

          default:
             throw new IllegalArgumentException("Unknown URI " + uri);
          }
          if (sortOrder == null || sortOrder == ""){

             sortOrder = COL_TEXT;
          }
          Cursor cursor = queryBuilder.query(database, projection, selection, 
                  selectionArgs, null, null, sortOrder);
          /** 
           * register to watch a content URI for changes
           */
          cursor.setNotificationUri(getContext().getContentResolver(), uri);

          return cursor;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO Auto-generated method stub
        long row = database.insert(TABLE_FTAGS, "", values);


          if(row > 0) {
             Uri newUri = ContentUris.withAppendedId(CONTENT_URI, row);
             getContext().getContentResolver().notifyChange(newUri, null);
             return newUri;
          }
          throw new SQLException("Fail to add a new record into " + uri);
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        // TODO Auto-generated method stub
         int rowsUpdated = 0;

          switch (uriMatcher.match(uri)){
          case FTAGS:
             rowsUpdated = database.update(TABLE_FTAGS, values, selection, selectionArgs);
             break;
          case FTAGS_ID:
             rowsUpdated = database.update(TABLE_FTAGS, values, COL_ID + 
                     " = " + uri.getLastPathSegment() + 
                     (!TextUtils.isEmpty(selection) ? " AND (" +
                     selection + ')' : ""), selectionArgs);
             break;

          default: 
             throw new IllegalArgumentException("Unsupported URI " + uri );
          }
          getContext().getContentResolver().notifyChange(uri, null);
          return rowsUpdated;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // TODO Auto-generated method stub
        int count = 0;

         switch (uriMatcher.match(uri)){
          case FTAGS:

              count = database.delete(TABLE_FTAGS, selection, selectionArgs);
              break;
          case FTAGS_ID:
              String id = uri.getLastPathSegment(); //gets the id
              count = database.delete( TABLE_FTAGS, COL_ID +  " = " + id + 
                    (!TextUtils.isEmpty(selection) ? " AND (" + 
                    selection + ')' : ""), selectionArgs);
              break;
          default: 
              throw new IllegalArgumentException("Unsupported URI " + uri);
          }

          getContext().getContentResolver().notifyChange(uri, null);
          return count;


    }

    @Override
    public String getType(Uri uri) {
        // TODO Auto-generated method stub
        return null;
    }


}

我想将COL_COUNT设置为保持计数标签插入数据库的次数的值,最初每个标签应该为1,我希望它只更新计数,如1到2每次输入现有标签时都是如此。

这是活动:

public class TestActivity extends Activity {
     private EditText mText;

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


    public boolean check(String s){
        boolean t = false;
         ContentResolver contentResolver = this.getContentResolver();  
         Cursor cursor = contentResolver.query(FTagsContentProvider.CONTENT_URI,  
                 new String []{FTagsContentProvider.COL_TEXT}, FTagsContentProvider.COL_TEXT + "=?", new String[]{s}, null);  
         if(cursor.getCount > 0){
             t = true;
         }
         else{
             t = false;
         }
         cursor.close();
        return t;


    }

     public void addFTag(View view) {
          // Add a new tag
          ContentValues values = new ContentValues();

          mText = (EditText)findViewById(R.id.name);
          String mFtag = mText.getText().toString();
          boolean exist = check(mFtag);
          if(exist == false){
          values.put(FTagsContentProvider.COL_TEXT, 
                  mFtag);

          Uri uri = getContentResolver().insert(
                  FTagsContentProvider.CONTENT_URI, values);

          Toast.makeText(getBaseContext(), 
               "Record inserted!", Toast.LENGTH_LONG).show();
       }
          else{
              // code for only updating the COL_COUNT somehow
              Toast.makeText(this, "Some tag meet you again :)",
                        Toast.LENGTH_LONG).show();
          }}

       public void showAllTags(View view) {
          Cursor c = getContentResolver().query(FTagsContentProvider.CONTENT_URI, null, null, null, null);
          String result = "Results:";

          if (!c.moveToFirst()) {
              Toast.makeText(this, result+" no content yet!", Toast.LENGTH_LONG).show();
          }else{
              do{
                  result = result + "\n" + c.getString(c.getColumnIndex(FTagsContentProvider.COL_TEXT)) + 
                            " with id " +  c.getString(c.getColumnIndex(FTagsContentProvider.COL_ID)) + 
                            " has count: " + c.getString(c.getColumnIndex(FTagsContentProvider.COL_COUNT));
                  } while (c.moveToNext());
              Toast.makeText(this, result, Toast.LENGTH_LONG).show();
          }

       }
}

非常感谢任何帮助:)

0 个答案:

没有答案