Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLiteDatabase getWritableDatabase() not working

Tags:

android

sqlite

I am getting the error

02-15 08:36:13.097: I/SqliteDatabaseCpp(404): sqlite returned: error code = 1, msg = near "null": syntax error, db=/data/data/com.lifeApp/databases/contactsManager

on line 157 of my code. This is the section under the method

getAllContacts()

The code that isn't working is

SQLiteDatabase db = this.getWritableDatabase();

Full example:

package com.lifeApp;

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

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

import android.content.ContentValues;
import android.database.Cursor;

public class DatabaseHandler extends SQLiteOpenHelper {

   // All Static variables
   // Database Version
   private static final int DATABASE_VERSION = 1;

   // Database Name
   private static final String DATABASE_NAME = "contactsManager";

   // Contacts table name
   private static final String TABLE_CONTACTS = "contacts";

   // Contacts Table Columns names
   private static final String KEY_ID = "id";
   private static final String FIRSTNAME = "firstname";
   private static final String LASTNAME = "lastname";
   private static final String PASSWORD = "password";
   private static final String EMAIL = "email";

   private static final String KEY_PH_NO = "phone_number";

private static final String KEY_NAME = null;

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

   // Creating Tables
   @Override
   public void onCreate(SQLiteDatabase db) {

       String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
               + KEY_ID + " INTEGER PRIMARY KEY," 
               + KEY_NAME + " TEXT,"
               + FIRSTNAME + " TEXT,"
               + LASTNAME + " TEXT,"
               + PASSWORD  + " TEXT"
               + EMAIL + " TEXT"
               + KEY_PH_NO + " TEXT" + ")";
       db.execSQL(CREATE_CONTACTS_TABLE);
   }

   // Upgrading database
   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       // Drop older table if existed
       db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

       // Create tables again
       onCreate(db);
   }

   /**
    * All CRUD(Create, Read, Update, Delete) Operations
    */

   // Adding new contact
   void addContact(Contact contact) {
       SQLiteDatabase db = this.getWritableDatabase();

       ContentValues values = new ContentValues();
       values.put(KEY_NAME, contact.getName()); // Contact Name
       values.put(FIRSTNAME, contact.getFirstname());
       values.put(LASTNAME, contact.getLastname());
       values.put(EMAIL, contact.getEmail());
       values.put(PASSWORD, contact.getPassword());
       values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

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

   // Getting single contact
   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), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6));
       // return contact
       return contact;
   }

   // Getting All Contacts
   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.setFirstname(cursor.getString(1));
               contact.setLastname(cursor.getString(2));
               contact.setPassword(cursor.getString(3));
               contact.setEmail(cursor.getString(4));
               // Adding contact to list
               contactList.add(contact);
           } while (cursor.moveToNext());
       }

       // return contact list
       return contactList;
   }

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

       ContentValues values = new ContentValues();
       values.put(KEY_NAME, contact.getName());
       values.put(FIRSTNAME, contact.getFirstname());
       values.put(LASTNAME, contact.getLastname());
       values.put(PASSWORD, contact.getPassword());
       values.put(EMAIL, contact.getEmail());
       values.put(KEY_PH_NO, contact.getPhoneNumber());

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

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

   // Getting contacts Count
   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();
   }

}
like image 515
user997101 Avatar asked Feb 21 '23 11:02

user997101


1 Answers

In CREATE_CONTACTS_TABLE you miss some commas

   String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
           + KEY_ID + " INTEGER PRIMARY KEY," 
           + KEY_NAME + " TEXT,"
           + FIRSTNAME + " TEXT,"
           + LASTNAME + " TEXT,"
           + PASSWORD  + " TEXT"           <==
           + EMAIL + " TEXT"               <==
           + KEY_PH_NO + " TEXT" + ")";
   db.execSQL(CREATE_CONTACTS_TABLE);
like image 195
crbin1 Avatar answered Feb 23 '23 23:02

crbin1