JavaEar 专注于收集分享传播有价值的技术资料

Sqlite Database android : No such table erroe

i am creating two tables, placetypes and place table in my database class and i am inserting records in the tables.. the first table works perfectly fine but while inserting in second table it gives me an error.. "No such table place"

please help me , i tried changing the version number, reinstalling the app.. but nothing works .. database class

     package com.example.nearby_places;

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.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class Database extends SQLiteOpenHelper {

    //database name & version number
    private static final String db_name = "nearby_places";
    private static final int db_version = 5;

    //tables
    private static final String table_placetypes = "placetypes";
    private static final String table_places = "places";

    //column names
    private static final String type_id = "type_id";
    private static final String type_name = "type_name";
    private static final String place_id = "place_id";
    private static final String place_name = "place_name";
    private static final String place_address = "place_address";
    private static final String place_contact = "place_contact";


    public Database(Context context) {
        super(context, db_name, null, db_version);
        // TODO Auto-generated constructor stub
    }

    // create table queries
    String create_table_placetypes = "CREATE TABLE IF NOT EXISTS " + table_placetypes + "("
            + type_id + " INTEGER PRIMARY KEY NOT NULL," + type_name + " TEXT" + ")";



    String create_table_places = "CREATE TABLE IF NOT EXISTS table_places (type_id INTEGER, " +
            "place_id INTEGER PRIMARY KEY NOT NULL, place_name TEXT, " +
            "place_address TEXT, place_contact TEXT, " +
            "FOREIGN KEY (type_id) REFERENCES table_placetypes(type_id))";



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

        db.execSQL(create_table_placetypes);

        Log.d("creating", "placetypes created");
        db.execSQL(create_table_places);
        Log.d("creating", "places created");


    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + table_placetypes);
        db.execSQL("DROP TABLE IF EXISTS " + table_places);
        onCreate(db);

    }
    // add placetypes 
    void addplacetypes (placetypes pt) {

        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(type_name, pt.getTypename());

        db.insert(table_placetypes, null, values);
        db.close();

    }

     // Getting single placetypes
    placetypes getPlacetypes(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(table_placetypes, new String[] {type_id,
                type_name }, type_id + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

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

 // Getting All placetypes
    public List<placetypes> getAllPlacetypes() {
        List<placetypes> placetypesList = new ArrayList<placetypes>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + table_placetypes;

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

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                placetypes pt = new placetypes();
                pt.setTypeid(Integer.parseInt(cursor.getString(0)));
                pt.setTypename(cursor.getString(1));


                String name = cursor.getString(1);

                //MainActivity.ArrayofName.add(name);
                // Adding contact to list
                placetypesList.add(pt);
            } while (cursor.moveToNext());
        }

        // return placetype list
        return placetypesList;
}

    // Getting placetypes Count
    public int getPlacetypesCount() {
        String countQuery = "SELECT  * FROM " + table_placetypes;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

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

    public void addplaces(places p) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(place_name, p.getPlace_name());
        values.put(place_address, p.getPlace_address());
        values.put(place_contact, p.getPlace_contact());

        db.insert(table_places, null, values);
        db.close();

    }

    places getPlaces(int pid) {

        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(table_places, new String[] {place_id, place_name, place_address, place_contact}, place_id + "=?", new String[] { String.valueOf(pid) } , null, null, null, null);

        if(cursor != null)
             cursor.moveToFirst();

        places p = new places(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1),
                cursor.getString(2),
                cursor.getString(3)
                );

        return p;

    }

    public List<places> getAllPlaces() {

        List<places> placeList = new ArrayList<places>();
        String selectQuery = "SELECT * FROM " + table_places; 

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

        if(cursor.moveToFirst()) {
            do{
            places p = new places();
            p.setPlace_id(Integer.parseInt(cursor.getString(0)));
            p.setPlace_name(cursor.getString(1));
            p.setPlace_address(cursor.getString(2));
            p.setPlace_contact(cursor.getString(3));

            String p_name = cursor.getString(1);
            String p_address = cursor.getString(2);
            String p_contact = cursor.getString(3);

            placeList.add(p);
            }while(cursor.moveToNext());
        }
        return placeList;
    }

    public int getPlaceCount () {

        String selectQuery = "SELECT * FROM " +table_places;
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(create_table_places, null);
        cursor.close();

        return cursor.getCount();
    }

}

main activity
             package com.example.nearby_places;

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


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {

    private ListView listView;
    public static ArrayList<String> ArrayofName = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         Database db = new Database(this);
         if(db.getAllPlacetypes().isEmpty())
         {
         /**
             * CRUD Operations
             * */
            // Inserting Places
            Log.d("Insert: ", "Inserting ..");
            db.addplacetypes(new placetypes("RESTURAUNTS"));
            db.addplacetypes(new placetypes("MALLS"));
            db.addplacetypes(new placetypes("GAS STATIONS"));
            db.addplacetypes(new placetypes("HOTELS"));
            db.addplacetypes(new placetypes("MOTELS")); 
         }
            // Reading all Places
            Log.d("Reading: ", "Reading all placetypes..");

            if(ArrayofName.isEmpty())
            {
                List<placetypes> placetypes = db.getAllPlacetypes();
                for (placetypes pt : placetypes) 
                {
                    String log = "Id: "+pt.getTypeid()+" ,Name: " + pt.getTypename();
                    // Writing Places to log
                    Log.d("Name: ", log);
                    System.out.println(log);
                    ArrayofName.add(pt.getTypename());
                }
            }   

            listView = (ListView) findViewById(R.id.listView1);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, ArrayofName);

            listView.setAdapter(adapter);

            listView.setOnItemClickListener(new OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
                    {
                       Toast.makeText(getApplicationContext(), ((TextView) v).getText(), Toast.LENGTH_SHORT).show();
                      // Intent i = new Intent(this,Activity2.class);
                      // startActivity(i);
                       Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                       startActivity(intent);


                    }
                }
            );
    }

    }


mainactivity2

        package com.example.nearby_places;

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


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity2 extends Activity {

    private ListView listView;
    public static ArrayList<String> ArrayofName = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         Database db = new Database(this);
         if(db.getAllPlaces().isEmpty())
         {
         /**
             * CRUD Operations
             * */
            // Inserting Places
            Log.d("Insert: ", "Inserting ..");
            db.addplaces(new places("Pizza Hut", "Clifton", "12345678"));
           /* db.addplacetypes(new placetypes("MALLS"));
            db.addplacetypes(new placetypes("GAS STATIONS"));
            db.addplacetypes(new placetypes("HOTELS"));
            db.addplacetypes(new placetypes("MOTELS")); 
         */}
            // Reading all Places
            Log.d("Reading: ", "Reading all places..");

            if(ArrayofName.isEmpty())
            {
                List<places> places = db.getAllPlaces();
                for (places p : places) 
                {
                    String log = "Id: "+p.getPlace_id() +" ,Name: " + p.getPlace_name() +" ,ADDRESS: " + p.getPlace_address() +"CONTACT NO. : " +p.getPlace_contact();
                    // Writing Places to log
                    Log.d("Name: ", log);
                    Log.d("ADDRESS: ", log);
                    Log.d("CONTACT NO : ", log);

                    System.out.println(log);
                    ArrayofName.add(p.getPlace_name());
                    ArrayofName.add(p.getPlace_address());
                    ArrayofName.add(p.getPlace_contact());
                }
            }   

            listView = (ListView) findViewById(R.id.listView1);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, ArrayofName);

            listView.setAdapter(adapter);

            listView.setOnItemClickListener(new OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
                    {
                       Toast.makeText(getApplicationContext(), ((TextView) v).getText(), Toast.LENGTH_SHORT).show();
                      // Intent i = new Intent(this,Activity2.class);
                      // startActivity(i);
                      // Intent intent = new Intent(MainActivity.this, Activity2.class);
                      // startActivity(intent);


                    }
                }
            );
    }

    }



kindly help me resolving this issue so i may proceed my other work. THANKS IN ADVANCE

2个回答

    最佳答案
  1. I had a similar problem , i changed my queries and it worked all well, most of the times when we try to enter data through content values it gives us error, so use direct query for insertion. see this query for help

    void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
    
    
        db.execSQL("insert into contacts (name,author,company,address,email,website,phone_number,script) VALUES (" + "'" + contact.get_name() + "'," + "'" + contact.get_author() + "'," + "'" + contact.get_company() + "'," + "'" + contact.get_address() + "'," + "'" + contact.get_email() + "'," + "'" + contact.get_website() + "'," + "'" + contact.get_phone_number() + "'," + "'" + contact.getscript() + "'" + ")");
    
    }
    

    Also check your container class, check if all the members are properly initialized there

  2. 参考答案2
  3. String create_table_placetypes = "CREATE TABLE " + table_placetypes + "(..."
    String create_table_places     = "CREATE TABLE table_places (..."
    

    You never create a table names places; the second command creates a table named table_places instead.