mysql 多个 android_在android中创建一个多表SQL数据库

我正在尝试为我的

Android应用程序创建一个多表数据库.我正在按照

http://androidforbeginners.blogspot.com/2010/01/creating-multiple-sqlite-database.html这个网站上的建议来做这件事.我继续得到以下错误.该错误似乎是由数据库表的onCreate引起的.

如果你在DBHelper类中查看我的onCreate,我有两个注释掉了.这使得它无论哪一个都不公开都可以工作.

必须有一种方法来创建多表数据库,因为数据库中的单个表几乎违背了拥有数据库的目的.

10-23 02:11:35.383: ERROR/AndroidRuntime(300): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/com.parkingticket/databases/Tickets.db

提前致谢.

这是我的代码

package com.parkingticket;

import java.sql.SQLException;

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.SQLiteException;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class TicketDBAdapter

{

private static final String DATABASE_NAME="Tickets.db";

private static final int DATABASE_VERSION = 1;

private static final String PARKEDCARS_TABLE = "ParkedCars";

private static final String PARKINGMETERS_TABLE = "ParkingMeters";

private static final String PARKINGTICKETS_TABLE = "ParkingTickets";

private static final String POLICEOFFICERS_TABLE = "PoliceOfficers";

// The name and column index for each column in PARKEDCARS

public static final String KEY_CARID = "carID";

public static final int CARID_COLUMN = 0;

public static final String KEY_CARMAKE = "Make";

public static final int CARMAKE_COLUMN = 1;

public static final String KEY_CARMODEL = "Model";

public static final int CARMODEL_COLUMN = 2;

public static final String KEY_CARCOLOR = "Color";

public static final int CARCOLOR_COLUMN = 3;

public static final String KEY_CARLICENSENUMBER = "LicenseNumber";

public static final int CARLICENSENUMBER_COLUMN = 4;

public static final String KEY_CARMINUTESPARKED = "MinutesParked";

public static final int CARMINUTESPARKED_COLUMN = 5;

// The name and column index for each column in PARKINGMETERS

public static final String KEY_METERID = "meterID";

public static final int METERID_COLUMN = 0;

public static final String KEY_MINUTESPURCHASED = "MinutesPurchased";

public static final int MINUTESPURCHASED_COLUMN = 1;

// The name and column index for each column in PARKINGTICKETS

//TODO create the columns and indexs for parking tickets

// The name and column index for each column in POLICEOFFICERS

public static final String KEY_OFFICERID = "officerID";

public static final int OFFICERID_COLUMN = 0;

public static final String KEY_OFFICERNAME = "Name";

public static final int OFFICERNAME_COLUMN = 1;

public static final String KEY_OFFICERBADGE = "BadgeNumber";

public static final int OFFICERBADE_COLUMN = 2;

//Variable to hold the database instance

private SQLiteDatabase ticketDB;

//Context of the application using the database.

private final Context context;

//Database open/upgrade helper

private TicketDBHelper ticketDBHelper;

public TicketDBAdapter(Context _context)

{

context = _context;

ticketDBHelper = new TicketDBHelper(context,DATABASE_NAME,null,DATABASE_VERSION);

}

public void open() throws SQLiteException

{

try

{

ticketDB = ticketDBHelper.getWritableDatabase();

}

catch(SQLiteException ex)

{

ticketDB = ticketDBHelper.getReadableDatabase();

}

}

public void close()

{

ticketDB.close();

}

//Insert a new ParkedCar

public long insertParkedCar(ParkedCar _car)

{

//Create a new row of values to insert

ContentValues newParkedCarValues = new ContentValues();

//Assign values for each row

newParkedCarValues.put(KEY_CARMAKE,_car.getMake());

newParkedCarValues.put(KEY_CARMODEL,_car.getModel());

newParkedCarValues.put(KEY_CARCOLOR,_car.getColor());

newParkedCarValues.put(KEY_CARLICENSENUMBER,_car.getLicenseNumber());

newParkedCarValues.put(KEY_CARMINUTESPARKED,_car.getMinutesParked());

//Insert the row

return ticketDB.insert(PARKEDCARS_TABLE,newParkedCarValues);

}

//Remove a ParkedCar based on its index

public boolean removeParkedCar(long _rowIndex)

{

return ticketDB.delete(PARKEDCARS_TABLE,KEY_CARID + "=" + _rowIndex,null)>0;

}

//Update a ParkedCar's MinutesParked

//TODO Create an update for ParkedCar's minutesParked.

public Cursor getAllParkedCarsCursor()

{

return ticketDB.query(PARKEDCARS_TABLE,new String[] {KEY_CARID,KEY_CARMAKE,KEY_CARMODEL,KEY_CARCOLOR,KEY_CARLICENSENUMBER,KEY_CARMINUTESPARKED},null);

}

public Cursor setCursorParkedCar(long _rowIndex) throws SQLException

{

Cursor result = ticketDB.query(true,PARKEDCARS_TABLE,new String []{KEY_CARID},null);

if ((result.getCount() == 0) || !result.moveToFirst())

{

throw new SQLException("No ParkedCar found for row: " + _rowIndex);

}

return result;

}

public static class TicketDBHelper extends SQLiteOpenHelper

{

public TicketDBHelper(Context context,String name,CursorFactory factory,int version)

{

super(context,name,factory,version);

}

//SQL Statement to create PARKEDCARS table

private static final String PARKEDCARS_CREATE = "create table " + PARKEDCARS_TABLE + " (" + KEY_CARID + " integer primary key autoincrement," + KEY_CARMAKE + " text not null," + KEY_CARMODEL + " text not null," + KEY_CARCOLOR + " text not null," + KEY_CARLICENSENUMBER + " text not null," + KEY_CARMINUTESPARKED + "int not null);";

//SQL Statement to create ParkingMeters table

private static final String PARKINGMETERS_CREATE = "create table" + PARKINGMETERS_TABLE + " (" + KEY_METERID + " integer primary key autoincrement," + KEY_MINUTESPURCHASED + " int not null);";

//SQL Statement to create ParkingTickets table

//TODO create the statement for parkingTickets

//SQL Statement to create PoliceOfficers table

private static final String POLICEOFFICERS_CREATE = "create table" + POLICEOFFICERS_TABLE + " (" + KEY_OFFICERID + " integer primary key autoincrement," + KEY_OFFICERNAME + " text not null," + KEY_OFFICERBADGE + "text not null);";

//Called when no database exists in disk and the helper class needs to create a new one.

@Override

public void onCreate(SQLiteDatabase _db)

{

//_db.execSQL(PARKEDCARS_CREATE);

_db.execSQL(PARKINGMETERS_CREATE);

//_db.execSQL(POLICEOFFICERS_CREATE);

}

//Called when there is a database verion mismatch meaning that the version of the database on disk needs to be upgraded to the current version

@Override

public void onUpgrade(SQLiteDatabase _db,int _oldVersion,int _newVersion)

{

//Log the version upgrade.

Log.w("TaskDBAdapter","Upgrading from version " + _oldVersion + " to " + _newVersion + ",which will destroy all old data");

//Upgrade the existing database to conform to the new version

//Multiple previous versions can be handled by comparing _oldVersoin and _newVersion values

//The simplest case is to drop teh old table and create a new one.

_db.execSQL("DROP TABLE IF EXISTS " + PARKEDCARS_TABLE);

_db.execSQL("DROP TABLE IF EXISTS " + PARKINGMETERS_TABLE);

_db.execSQL("DROP TABLE IF EXISTS " + POLICEOFFICERS_TABLE);

onCreate(_db);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值