Sqlite Database android : 没有这样的表错误



我正在我的数据库类中创建两个表,place类型和place表,我在表中插入记录..第一个表工作得很好,但是在插入第二个表时它给了我一个错误。"没有这样的桌子"

请帮助我,我尝试更改版本号,重新安装应用程序..但没有任何效果..数据库类

     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
String create_table_placetypes = "CREATE TABLE " + table_placetypes + "(..."
String create_table_places     = "CREATE TABLE table_places (..."

您永远不会创建名为places的表;第二个命令会创建一个名为 table_places 的表。

我有一个类似的问题,我更改了我的查询,它运行良好,大多数时候当我们尝试通过内容值输入数据时,它会给我们错误,因此使用直接查询进行插入。 请参阅此查询以获取帮助

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() + "'" + ")");
}

还要检查您的容器类,检查所有成员是否在那里正确初始化

相关内容

最新更新