2012-10-11 4 views
1

Je veux construire une application Android avec une base de données SQLite. J'ai deux classes Java. La première est la classe la deuxième contact ans la classe DatabaseHandle pour les opérations comment ajouter, mettre à jour, etc ...Comment je peux démarrer mon application Android SQLite sans erreur

Je ne reçois pas une erreur, mais si je commence ma demande je deviens ce message ...

enter image description here

Voici ma Contactez classe

package de.linde.sqlite; 

public class Contact { 

    int _id; 
    String _name; 
    String _phone_number; 

    public Contact(){} 

    public Contact(int id,String name,String _phone_number){ 

     this._id = id; 
     this._name = name; 
     this._phone_number = _phone_number; 
    } 

    public Contact(String name,String _phone_number){ 

     this._name = name; 
     this._phone_number = _phone_number; 
    } 

    public int getID(){ 

     return this._id; 
    } 

    public void setID(int id){ 

     this._id = id; 
    } 

    public String getName(){ 

     return this._name; 
    } 

    public void setName(String name){ 

     this._name = name; 
    } 

    public String getPhoneNumber(){ 

     return this._phone_number; 
    } 

    public void setPhoneNumber(String phone_number){ 

     this._phone_number = phone_number; 
    } 
} 

Voici mon DatabaseHandler classe

package de.linde.sqlite; 

import java.util.ArrayList; 
import java.util.List; 

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

public class DatabaseHandler extends SQLiteOpenHelper { 

    //Datenbank version 
    private static final int DATABASE_VERSION = 1; 
    //Datenbankname 
    private static final String DATABASE_NAME = "contactsManager"; 
    //Tabellenname 
    private static final String TABLE_CONTACTS = "contacts"; 
    //Tabellenspalten 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "name"; 
    private static final String KEY_PH_NO = "phone_number"; 

    public DatabaseHandler(Context context){ 

     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db){ 

     String CREATE_CONTACTS_TABLE = "CREATE TABLE" + TABLE_CONTACTS + "(" 
             + KEY_ID + "INTEGER PRIMARY KEY," + KEY_NAME + "TEXT," 
             + KEY_PH_NO + " TEXT" + ")"; 

     db.execSQL(CREATE_CONTACTS_TABLE); 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 

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

     onCreate(db); 
    } 

    public void addContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); // Contact Name 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 

     // Inserting Row 
     db.insert(TABLE_CONTACTS, null, values); 
     db.close(); // Closing database connection 
    } 

    public Contact getContact(int id) { 
     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
       KEY_NAME, KEY_PH_NO }, KEY_ID + "=?", 
       new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 

     Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), cursor.getString(2)); 
     // return contact 
     return contact; 
    } 

    public List<Contact> getAllContacts() { 
     List<Contact> contactList = new ArrayList<Contact>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setPhoneNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return contactList; 
    } 

    public int getContactsCount() { 
     String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     cursor.close(); 

     // return count 
     return cursor.getCount(); 
    } 

    public int updateContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); 
     values.put(KEY_PH_NO, contact.getPhoneNumber()); 

     // updating row 
     return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
       new String[] { String.valueOf(contact.getID()) }); 
    } 

    public void deleteContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
       new String[] { String.valueOf(contact.getID()) }); 
     db.close(); 
    } 


} 

Voici mon MainActivity

package de.linde.sqlite; 

import java.util.List; 

import android.os.Bundle; 
import android.util.Log; 
import android.app.Activity; 

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     DatabaseHandler db = new DatabaseHandler(this); 

     Log.d("Insert: ", "Inserting .."); 
     db.addContact(new Contact("Wladimir","024324324")); 
     db.addContact(new Contact("Max","0324324324")); 
     db.addContact(new Contact("Benny","0324324")); 
     db.addContact(new Contact("derSchwarze","051324324")); 

     Log.d("Reading: ","Reading all Contacts.."); 
     List<Contact> contacts = db.getAllContacts(); 

     for (Contact cn : contacts) { 

      String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber(); 
      Log.d("Name: ", log); 
     } 
    } 

} 

Mon activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 



</RelativeLayout> 

Ce que je fais mal :(

+2

Publiez votre détails Logcate – Deepika

+0

près "de TABLEcontacts": erreur de syntaxe: CREATE TABLEcontacts (idINTEGER clé primaire, nameTEXT, phone_number TEXTE) ceci est l'erreur que je reçois dans l'erreur errormessage – Tarasov

+0

nous essayons comme cela, il est très utilisé complète http://www.vogella.com/articles/AndroidSQLite/article.html – NagarjunaReddy

Répondre

3

Ajouter des espaces entre les valeurs que vous ajoutez à CREATE_CONTACTS_TABLE et la chaîne concaténée, de sorte que vous construisez un t valide chaîne de création capable:

"CREATE TABLE " + TABLE_CONTACTS + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT, " + KEY_PH_NO + " TEXT)"; 

Vous devez désinstaller l'application du téléphone/émulateur puis exécutez à nouveau pour rendre la base de données à recréée.

La même chose est valable pour la chaîne dans la méthode onUpgrade:

"DROP TABLE IF EXISTS " + TABLE_CONTACTS 
+0

ok les i ajouter des espaces et maintenant créer la base de données, mais le l'insertion ne fonctionne pas:/ – Tarasov

+1

@Tarasov Si vous avez des problèmes, alors publiez l'exception que vous obtenez du logcat et pointez la ligne où cela arrive. – Luksprog

+0

Erreur lors de l'insertion de phone_number = 024324324 name = Wladimir et android.database.sqlite.SQLiteException: les contacts de la table n'ont pas de colonne nommée name:, lors de la compilation: INSERT INTO contacts (numéro_téléphone, nom) VALUES (?,?); – Tarasov

Questions connexes