android程序数据库问题... DBHelper helper = new DBHelper(this, DB_NAME, null, VERSION); 不懂啊

DBHelper是我重写的类,单独建立了一个DBHelper.java用来说明数据库,然后实例化了一个数据库,DB_NAME应该同oncreat(SQLiteDataba... DBHelper是我重写的类,单独建立了一个DBHelper.java用来说明数据库,然后实例化了一个数据库,DB_NAME应该同oncreat(SQLiteDatabase ***)里的***一致吧?version的值是啥呀?...

还有实例化数据库以后,写个这个:SQLiteDatabase db = carhelper.getWritableDatabase(); 在多个.java文件中实行数据库操作是都指向同一个数据库吗?

真是纠结了,跪求帮助
DBHelper helper = new DBHelper(this, DB_NAME, null, VERSION); 应该写在哪里啊?老是报错

提示DB_NAME和VERSION不能被定义成变量,可是我看很多源码都是这么写的...帮帮我吧...这句话怎么写呀?DB_NAME和VERSION是前面要定义还是就这么写呀?
展开
 我来答
logic1965
2011-05-09 · TA获得超过551个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:217万
展开全部
这里用ContentProvider方法来定义数据库。。
public class AlarmProvider extends ContentProvider //
{

private static final String DB_NAME = "Alarm.db"; //数据库名

private static final int DB_VERSION = 1;//版本号,当程序第一次运行时,数据库被建立,如果
//你更改了数据库,如增加一个表,这时,这个值一般要改一下,这样程序再次安装运行
//时,数据库可自行升级。。如果不改通常要手动删除数据库。。

private static final String ALARM_TABLE_NAME = "alarm"; //一个表名
private static final int ALARM = 1; //与表对应的整数值,相当于id

private static UriMatcher mUriMathcer; //Uri匹配器,建立uri,表名,id三者之间的关系,如下:

static{
mUriMathcer = new UriMatcher(UriMatcher.NO_MATCH);
mUriMathcer.addURI(AlarmInfo.AUTH, "alarm", ALARM);
}

private interface CreateTableInterface //表创建接口
{
public abstract void createAlarmTable(SQLiteDatabase db);
}
//内部类,数据库助手类,并实现表创建接口
private static class DatabaseHelper extends SQLiteOpenHelper implements CreateTableInterface
{

CreateTableInterface mCreateTableInterface = this;

Context mContext = null;

//构造函数,该函数调用后,数据库没有
//创建。。也就是下面的onCreate不会在它调用后就立即调用创建db
public DatabaseHelper(Context context)
{

super(context, DB_NAME, null, DB_VERSION);
// Log.i(TAG, "DatabaseHelper be called!");
mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) //这个方法只在第一次db连接创建db时调用,只一次
{
//create db table
mCreateTableInterface.createAlarmTable(db);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) //db升级时调用
{
// Log.i(TAG, "onUpgrade() be called!");
db.execSQL("DROP TABLE IF EXISTS "+ALARM_TABLE_NAME);
onCreate(db);
}

@Override
public void createAlarmTable(SQLiteDatabase db)
{
// 创建表
db.execSQL("CREATE TABLE "+ALARM_TABLE_NAME+" ("
+AlarmInfo._ID+" INTEGER PRIMARY KEY,"
+AlarmInfo._LABEL+" TEXT NOT NULL,"
+AlarmInfo._TIME+" TEXT NOT NULL,"
+AlarmInfo._ALERT+" TEXT NOT NULL,"
+AlarmInfo._REPEAT+" TEXT NOT NULL,"
+AlarmInfo._ACTIVE+" TEXT NOT NULL"
+");");
//在表中插入一些数据。。。
db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
+AlarmInfo._TIME+","+AlarmInfo._ALERT+","
+AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE+
") VALUES('Lunch Alarm','11 : 45 AM','"+Tag.TONE+"','"+Tag.EVERY_DAY+"','false');");

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
+AlarmInfo._TIME+","+AlarmInfo._ALERT+","
+AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE
+") VALUES('Work Alarm','08 : 45 AM','"+Tag.TONE+"',"+"'Mon,Tue,Wed,Thu,Fri'"
+",'false');");

db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
+AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","
+AlarmInfo._ACTIVE
+") VALUES('Work Alarm','09 : 00 AM','"+Tag.TONE+"',"
+"'"+Tag.WEEKENDS+"','false');");
db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
+AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","
+AlarmInfo._ACTIVE
+") VALUES('Yoga','10 : 15 PM','"+Tag.TONE+"',"+"'Sun,Wed','false');");
}
}
}

private DatabaseHelper mDatabaseHelper; //定义helper

//以下重写insert,delete,update,query等方法
@Override
public synchronized int delete(Uri uri, String selection, String[] selectionArgs)
{
SQLiteDatabase db = null;
boolean success = false;
int count = 0;
try{
db = mDatabaseHelper.getWritableDatabase();
db.acquireReference();
success = true;
switch(mUriMathcer.match(uri)){
case ALARM:
count = db.delete(ALARM_TABLE_NAME, selection, selectionArgs);
break;
}
}catch(SQLException e){
e.printStackTrace();
}finally{
if(success == true){
db.releaseReference();
}
}

return count;
}

@Override
public String getType(Uri uri)
{
switch(mUriMathcer.match(uri)){
case ALARM:
return AlarmInfo.CONTENT_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}

@Override
public synchronized Uri insert(Uri uri, ContentValues initValues)
{
SQLiteDatabase mSQLiteDatabase = null;
boolean success = false;
try{
mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
mSQLiteDatabase.acquireReference();
success = true;
long mRowId;
ContentValues values;
if(initValues == null){
values = new ContentValues();
}else{
values = initValues;
}
switch(mUriMathcer.match(uri)){
case ALARM:
mRowId = mSQLiteDatabase.insert(ALARM_TABLE_NAME,
AlarmInfo._ID, values);
if(mRowId > 0){
return uri;
}else{
throw new SQLException("Failed to insert to "+uri);
}
}

}catch(SQLException e){
e.printStackTrace();
}finally{
if(success == true)
mSQLiteDatabase.releaseReference();
}
return null;
}

@Override
public boolean onCreate()
{
// Log.i("alarm provider", "onCreate()...");
mDatabaseHelper = new DatabaseHelper(getContext());
return true;
}

@Override
public synchronized Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteQueryBuilder mSQLiteQueryBuilder = new SQLiteQueryBuilder();
switch(mUriMathcer.match(uri)){
case ALARM:
mSQLiteQueryBuilder.setTables(ALARM_TABLE_NAME);
break;
}
SQLiteDatabase mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
mSQLiteDatabase.acquireReference();

Cursor mCursor = mSQLiteQueryBuilder.query(mSQLiteDatabase, projection,
selection, selectionArgs, null, null, sortOrder);
mSQLiteDatabase.releaseReference();
return mCursor;
}

@Override
public synchronized int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
SQLiteDatabase mSQLiteDatabase = null;
int count = 0;
boolean success = false;
try{
mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
mSQLiteDatabase.acquireReference();
success = true;
switch(mUriMathcer.match(uri)){
case ALARM:
count = mSQLiteDatabase.update(ALARM_TABLE_NAME, values,
selection, selectionArgs);
break;

default:
break;
}

}catch(SQLException e){
e.printStackTrace();
}finally{
if(success == true)
mSQLiteDatabase.releaseReference();
}
return count;
}

}
可以参考android alarm源码,query,update等方法写法基本不改什么,只替换表名。或增加一个case.
愚者妄自称雄
2011-05-05 · TA获得超过647个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:216万
展开全部
DBHelper helper = new DBHelper(this, DB_NAME, null, VERSION)应该写在全局类得下面,然后你在你的程序中进行类的调用~、
你的SQL语句不是都指向一个数据苦的,每次需要调用时应该调用一下数据库,建议你建一个BaseClass把数据库的调用写成一个全局类函数,每次调用一下就行了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式