在单个ANDROID数据库名称中创建多个表时出错

时间:2012-03-06 06:16:29

标签: android sqlite

当我在单个数据库中使用两个表时,我遇到了问题,我的应用程序强行关闭。请帮我在SINGLE DB中使用多个表格。

这里有两张表,即Property&引用相同的DB名称。

property.class

public class PropertyDb {  
    public static final String KEY_ADDRESS = "address";
    public static final String KEY_APT = " apt_no";
    public static final String KEY_CITY = "city";
    public static final String KEY_STATE = "state";
    public static final String KEY_COUNTY = "county";
    public static final String KEY_ZIPCODE = "zipcode";
    public static final String KEY_PROPERTY_VALUE = "property_value";
    public static final String KEY_PROPERTY_TYPE = "property_type";
    public static final String KEY_ROWID = "_id";
    private static final String TAG = "GetRateDb";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    private static final String TABLE_CREATE =   
            "create table if not exists property(_id integer primary key autoincrement,"
            +"address varchar(50) not null, apt_no varchar(50), city varchar(50) not null,"
            +"state varchar(50),  county  varchar(50),  zipcode  varchar(50)  ,"  
            +"property_value  varchar(50) not null, property_type varchar(50) );";

    private static final String DATABASE_NAME = "testDB"; 
    private static final String DATABASE_TABLE = "property";
    private static final int DATABASE_VERSION = 1;
    private final Context mCtx; 

    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(TABLE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS docdetails");
            onCreate(db);
        }
    }

    public PropertyDb(Context ctx) {
        this.mCtx = ctx;
    }

    public PropertyDb open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
    //  mDb = mDbHelper.getReadableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }

    public long createdetails(String address, String apt_no,
            String city, String state, String county,String zipcode, String property_value,
            String property_type) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ADDRESS, address);
        initialValues.put(KEY_APT,apt_no);
        initialValues.put(KEY_CITY, city);
        initialValues.put(KEY_STATE, state);
        initialValues.put(KEY_COUNTY, county);
        initialValues.put(KEY_ZIPCODE, zipcode);
        initialValues.put(KEY_PROPERTY_VALUE, property_value);
        initialValues.put(KEY_PROPERTY_TYPE, property_type);
        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }

    public boolean deletedetails(long rowId) {
        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    public Cursor fetchAlldetails()
    {
        Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_ADDRESS, KEY_APT,
                KEY_CITY, KEY_STATE, KEY_COUNTY, KEY_ZIPCODE , KEY_PROPERTY_VALUE, 
                KEY_PROPERTY_TYPE } , null, null, null, null, null);
        if (mCursor != null)
        {
            mCursor.moveToFirst();
        }
        mDbHelper.close();
        return mCursor;
    }

    public Cursor fetchdetails(long rowId) throws SQLException {
        Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] { KEY_ADDRESS, KEY_APT,
                KEY_CITY, KEY_STATE, KEY_COUNTY, KEY_ZIPCODE , KEY_PROPERTY_VALUE, 
                KEY_PROPERTY_TYPE},KEY_ROWID + "=" + rowId, null,null, null, null, null);
        if (mCursor != null)  
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public boolean updatedetails(long rowId, String address, String apt_no,String city, String state, String county,
            String zipcode, String property_value,String property_type)
    {
        ContentValues args = new ContentValues();
        args.put(KEY_ROWID, rowId);
        System.out.println("Key RowId ---- "+rowId);
        args.put(KEY_ADDRESS, address);
        System.out.println("address in property--- "+address);
        args.put(KEY_APT, apt_no);
        System.out.println("apt_no --- "+apt_no);
        args.put(KEY_CITY, city);
        args.put(KEY_STATE, state);
        args.put(KEY_COUNTY, county);
        args.put(KEY_ZIPCODE, zipcode);
        args.put(KEY_PROPERTY_VALUE, property_value);
        args.put(KEY_PROPERTY_TYPE, property_type);
        int i =  mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
        System.out.println("update---" +i);
        return i > 0;
    } 
}

我有另一张桌子     quote.class

public class QuoteDb {
public static final String KEY_TARGET_RATE = "targetRate";
public static final String KEY_LOAN_TERM = "loanTerm";
public static final String KEY_LOAN_AMOUNT = "loanAmount";
public static final String KEY_SELECT_PROPERTY = "selectProperty";
public static final String KEY_PROPERTY_VALUE = "propertyValue";
public static final String KEY_PROPERTY_TYPE = "propertyType";
public static final String KEY_ADDRESS = "Address";
public static final String KEY_CITY = "City";
public static final String KEY_STATE = "State";
public static final String KEY_COUNTY = "County";
public static final String KEY_ZIPCODE = "Zipcode";  
public static final String KEY_ROWID = "_id";
private static final String TAG = "GetRateDbQuote";
private DatabaseHelper mDbHelper;
private  SQLiteDatabase mDb;

//Create the Table
private static final String TABLE_CREATE =   
        "create table quotenew (_id integer primary key autoincrement,"
                +"targetRate varchar(50) not null, loanTerm integer not null, loanAmount varchar(50) not null,"
                +"selectProperty varchar(50) ,  propertyValue  varchar(50) not null,  propertyType  integer  not null,"
                +"Address  varchar(50) , City varchar(50) , State varchar(50) not null,"
                +"County varchar(50) not null, Zipcode varchar(50) );";    

private static final String DATABASE_NAME = "testDB";
private static final String DATABASE_TABLE = "quotenew";     
private static final int DATABASE_VERSION = 1;
private final Context mCtx;


// A helper class to manage database creation and version management
private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    //The onCreate() method is called by the Android system when your Activity starts
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLE_CREATE);
    }

    //Called when the database needs to be upgraded.
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS quotenew");
        onCreate(db);
    }

}

public QuoteDb(Context ctx) {
    this.mCtx = ctx;
}

//open the DB
public QuoteDb open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    //mDb = mDbHelper.getReadableDatabase();
    return this;
}

//close the DB
public void close() {
    mDbHelper.close();
}

//inserting the values
public long createdetails(String targetRate, String loanTerm,String loanAmount, String selectProperty,
        String propertyValue,String propertyType, String Address,String City,String State,String County,
        String Zipcode) {

    ContentValues initialValues = new ContentValues();

    initialValues.put(KEY_TARGET_RATE, targetRate);
    System.out.println("target Rate in DB--"+targetRate);

    initialValues.put(KEY_LOAN_TERM, loanTerm);
    initialValues.put(KEY_LOAN_AMOUNT, loanAmount);
    System.out.println("loan amount in DB--"+loanAmount);

    initialValues.put(KEY_SELECT_PROPERTY, selectProperty);
    initialValues.put(KEY_PROPERTY_VALUE, propertyValue);
    System.out.println("property value in DB-- "+propertyValue);

    initialValues.put(KEY_PROPERTY_TYPE, propertyType);
    initialValues.put(KEY_ADDRESS, Address);
    initialValues.put(KEY_CITY, City);
    initialValues.put(KEY_STATE, State);
    initialValues.put(KEY_COUNTY, County);
    initialValues.put(KEY_ZIPCODE, Zipcode);
    return mDb.insert(DATABASE_TABLE, null, initialValues);
}

//delete operation
public boolean deletedetails(long rowId) {
    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

public Cursor fetchAlldetails()
{
    Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TARGET_RATE, KEY_LOAN_TERM,
            KEY_LOAN_AMOUNT, KEY_SELECT_PROPERTY, KEY_PROPERTY_VALUE, KEY_PROPERTY_TYPE , KEY_ADDRESS, 
            KEY_CITY ,KEY_STATE,KEY_COUNTY,KEY_ZIPCODE} , null, null, null, null, null);

    if (mCursor != null)
    {
        mCursor.moveToFirst();
    }
    mDbHelper.close();
    return mCursor;
}

public Cursor fetchdetails(long rowId) throws SQLException {
    Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {  KEY_TARGET_RATE, KEY_LOAN_TERM,
            KEY_LOAN_AMOUNT, KEY_SELECT_PROPERTY, KEY_PROPERTY_VALUE, KEY_PROPERTY_TYPE , KEY_ADDRESS, 
            KEY_CITY ,KEY_STATE,KEY_COUNTY,KEY_ZIPCODE},KEY_ROWID + " = " + rowId, null,null, null, null, null);
    if (mCursor != null)
    {
        mCursor.moveToFirst();
    }
    mDbHelper.close();
    return mCursor;
}

//updating the values
public boolean updatedetails(long rowId, String targetRate, String loanTerm,String loanAmount, String selectProperty,
        String propertyValue,String propertyType, String Address,String City,String County,String State,
        String Zipcode)
{
    System.out.println("I am in update QUOTEDB");
    ContentValues args = new ContentValues();
    args.put(KEY_ROWID, rowId);
    System.out.println("key rowID-- "+rowId);
    args.put(KEY_TARGET_RATE, Integer.parseInt(targetRate)); 
    System.out.println("target rate in update" +targetRate);
    args.put(KEY_LOAN_TERM, Integer.parseInt(loanTerm));
    args.put(KEY_LOAN_AMOUNT, Integer.parseInt(loanAmount));  
    args.put(KEY_SELECT_PROPERTY, selectProperty);
    args.put(KEY_PROPERTY_VALUE, Integer.parseInt(propertyValue));
    args.put(KEY_PROPERTY_TYPE, propertyType);
    args.put(KEY_ADDRESS, Address);
    args.put(KEY_CITY, City);
    args.put(KEY_STATE, State);
    args.put(KEY_COUNTY, County);
    System.out.println("county in update --" +County);
    args.put(KEY_ZIPCODE, Zipcode);
    int i =  mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
    System.out.println("update---" +i);
    return i>0;// mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;

}
} 

我正在

  

错误:无法找到表格quotenew和属性。

谢谢

1 个答案:

答案 0 :(得分:1)

    You should create multiple tables in single db name in this fashion:


public class EventDataSQLHelper extends SQLiteOpenHelper{
    private static final String DATABASE_NAME = "My_moodledata1.sqlite";
    private static final int DATABASE_VERSION = 1;

    public EventDataSQLHelper(Context context) {
        super(context,DATABASE_NAME, null,DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        final String CREATE_TABLE_SITEINFO =
                "CREATE TABLE siteinfo(id INTEGER PRIMARY KEY AUTOINCREMENT,sitename TEXT,username TEXT,firstname TEXT,lastname TEXT,fullname TEXT,userid TEXT,siteurl TEXT, userpictureurl TEXT,userpassword TEXT,photo BLOB);";
            db.execSQL(CREATE_TABLE_SITEINFO);
            final String CREATE_TABLE_SYNCHRONISE =  
                    "CREATE TABLE synchronise(id INTEGER PRIMARY KEY AUTOINCREMENT ,filetype TEXT, filepath TEXT,link TEXT,datetime Text);";
            db.execSQL(CREATE_TABLE_SYNCHRONISE);
            final String CREATE_TABLE_COURSEINFO =  
                    "CREATE TABLE courseinfo(id INTEGER PRIMARY KEY AUTOINCREMENT ,courseid TEXT, shortname TEXT,fullname TEXT,userid Text,sitename TEXT);";
            db.execSQL(CREATE_TABLE_COURSEINFO);
            final String CREATE_TABLE_PARTICIPANTINFO =  
                    "CREATE TABLE participantinfo(id INTEGER PRIMARY KEY AUTOINCREMENT ,courseid TEXT,userid Text,participantid TEXT ,fullname TEXT,email Text,description TEXT,city TEXT,country TEXT,imagesmall TEXT,imagelong TEXT,smallphoto BLOB,largephoto BLOB);";
            db.execSQL(CREATE_TABLE_PARTICIPANTINFO);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}