2010-08-13 5 views
0

J'essaie d'insérer des valeurs dans la base de données SQLite Android. La question est, j'essaie d'insérer un mot, la table a 3 colonnes, ID, WORD, COUNT.Incrémenter et insérer des valeurs entières sur la base de données SQLite Android

Lorsque j'insère un mot dans la base de données, une méthode va vérifier si ce mot existe dans la base de données. Si oui, il incrémentera la valeur de COUNT pour ce mot.

Exemple. J'ai un mot "Question" dans la base de données avec la valeur COUNT 1, et je veux l'insérer à nouveau, la méthode trouvera ce mot et si je veux insérer "qUeSTion" ça n'a pas d'importance, ça me retournera "Question" quand je récupère les données, et il va incrémenter la valeur de COUNT de 1 à 2. Got it ??

SO voici mon code. J'ai des problèmes quand j'essaie de faire ça, cette vérification. Je ne sais pas quelle méthode utiliser, etc. J'utilise SQLiteStatement pour insérer. Mais les méthodes qui offrent ne fonctionnent pas. Toute idée de quelle utilisation?

Merci.

Classe DataHelper

public class DataHelper { 

private static final String DATABASE_NAME = "sms.db"; 
private static final int DATABASE_VERSION = 1; 
private static final String TABLE_NAME = "words"; 

private Context context; 
private SQLiteDatabase db; 

private SQLiteStatement insertStmt; 
private static final String INSERT = "insert into " 
    + TABLE_NAME + "(word) values (?)"; 

public DataHelper(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
    this.insertStmt = this.db.compileStatement(INSERT); 
} 

public long insert(String word) { 
    this.insertStmt.bindString(1, word);    
    return this.insertStmt.executeInsert(); 
} 

public List<String> selectAll() { 
    List<String> list = new ArrayList<String>(); 
    Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word"}, 
    null, null, null, null, "id desc"); 
    if (cursor.moveToFirst()) { 
    do { 
     list.add(cursor.getString(0)); 
    } while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) { 
    cursor.close(); 
    } 
    return list; 
} 
} 

classe SMSC'est la classe où je reçois les mots et l'insérer dans la base de données

public class SMS extends Activity { 

private DataHelper dh;  
private static TextView txtView;     
final Uri CONTENT_URI = Uri.parse("content://sms/sent"); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    this.dh = new DataHelper(this);   
    txtView = (TextView)findViewById(R.id.txtView);     
     Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, null);          
     String body;           
     if(cursor.moveToFirst()){ 
      body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); 
      if(body == ""){ 
       Toast.makeText(getBaseContext(), "There is no words to save!", Toast.LENGTH_LONG).show(); 
      } 
       else{        
        StringTokenizer st = new StringTokenizer(body); 
        while(st.hasMoreTokens()){         
         this.dh.insert(st.nextToken());        
         Toast.makeText(getBaseContext(), "The set of words has been updated!", Toast.LENGTH_LONG).show();                            
        } 
        List<String> words = this.dh.selectAll(); 
        StringBuilder sb = new StringBuilder(); 
        sb.append("Set of words:\n\n"); 
        for (String w : words) { 
         sb.append(w + " "); 
        }      
        Log.d("EXAMPLE", "words size - " + words.size());      
        txtView.setText(sb.toString()); 
       } 
     }    
} 
    } 
+0

Vous devriez utiliser 'db.query()' et 'db.update()' – Pentium10

+0

En fait, je pense que je devrais utiliser un argument where sur la méthode. Comment puis-je faire cela? Comment est le sintax pour l'argument where de la méthode db.query? – rogcg

+0

Comme une chaîne SQL par exemple: 'col1> 67 et col2 i not null' – Pentium10

Répondre

0

Réponse @MPelletier

Vous devrait également repenser le nom de votre colonne "C ount ", car c'est un mot réservé pour une fonction.

Questions connexes