android如何在程序中往sqlite数据库建表?

时间:2021-10-13 08:20:09
做期末项目中,我在做一个简单的日程管理软件,设计出来有两张表:
日程(agenda)和日程类型(agendatype)
我想怎么在程序中往数据库中建表呢?
日程表引用类型表,请问该怎么建呢?

请大家指教,非常感谢!

(我自己建了2个DAO类,不知道这样对不对。请大家指教)
第一个是AgendaDAO

package com.hj.db.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.hj.db.model.*;

public class AgendaDAO extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "_AgendaManagement";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "_agenda";
private final static String FIELD_ID = "_id";
private final static String FIELD_TITLE = "_title";
private final static String FIELD_CONTENT = "_content";
private final static String FIELD_AGENDATIME = "_agendatime";
private final static String FIELD_AGENDADATE = "_agendadate";
private final static String FIELD_ALARMTIME = "_alarmtime";
private final static String FIELD_ALARMDATE = "_alarmdate";
private final static String FIELD_SETALARM = "_setalarm";
private SQLiteDatabase db;

public AgendaDAO(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "Create table " + TABLE_NAME + "(" + FIELD_ID
+ " integer primary key autoincrement," + FIELD_TITLE + ","
+ FIELD_CONTENT + "," + FIELD_AGENDATIME + ","
+ FIELD_AGENDADATE + "," + FIELD_ALARMTIME + ","
+ FIELD_ALARMDATE + "," + FIELD_SETALARM + " integer,"
+ "foreign key(_typeid) references _agendatype(_typeid) " + ")";
db.execSQL(sql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = " DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
db.execSQL(sql);

}

public ArrayList<Agenda> getAll() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from "+TABLE_NAME, null);
ArrayList<Agenda> agendas = toArrayList(cursor);
db.close();
return agendas;
}

public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_ID + "=?";
String[] whereValue = { Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
db.close();
}

public void update(Agenda a) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_ID + "=?";
String[] whereValue = { Integer.toString(a.getId()) };
ContentValues cv = new ContentValues();
cv.put(FIELD_TITLE, a.getTitle());
cv.put(FIELD_CONTENT, a.getContent());
cv.put(FIELD_AGENDATIME, a.getAgendaTime());
cv.put(FIELD_AGENDADATE, a.getAgendaDate());
cv.put(FIELD_ALARMTIME, a.getAlarmTime());
cv.put(FIELD_ALARMDATE, a.getAlarmDate());
cv.put(FIELD_SETALARM, a.getSetAlarm());
cv.put("_typeid", a.getTypeId());
db.update(TABLE_NAME, cv, where, whereValue);
db.close();
}

public long insert(Agenda a) {
SQLiteDatabase db = this.getReadableDatabase();
ContentValues cv = new ContentValues();
cv.put(FIELD_TITLE, a.getTitle());
cv.put(FIELD_CONTENT, a.getContent());
cv.put(FIELD_AGENDATIME, a.getAgendaTime());
cv.put(FIELD_AGENDADATE, a.getAgendaDate());
cv.put(FIELD_ALARMTIME, a.getAlarmTime());
cv.put(FIELD_ALARMDATE, a.getAlarmDate());
cv.put(FIELD_SETALARM, a.getSetAlarm());
cv.put("_typeid", a.getTypeId());
long row = db.insert(TABLE_NAME, null, cv);
db.close();
return row;

}

private ArrayList<Agenda> toArrayList(Cursor c) {
ArrayList<Agenda> arr = new ArrayList<Agenda>();

while (c.moveToNext()) {
Agenda a = new Agenda();
a.setId(c.getInt(0));
a.setTitle(c.getString(1));
a.setContent(c.getString(2));
a.setAgendaTime(c.getString(3));
a.setAgendaDate(c.getString(4));
a.setAlarmTime(c.getString(5));
a.setAgendaDate(c.getString(6));
a.setSetAlarm(c.getInt(7));
a.setTypeId(c.getInt(8));
arr.add(a);
}
return arr;
}

}



第二个是AgendaTypeDAO:

package com.hj.db.dao;

import java.util.ArrayList;

import com.hj.db.model.Agenda;
import com.hj.db.model.AgendaType;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class AgendaTypeDAO extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "_AgendaManagement";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "_agendatype";
private final static String FIELD_TYPEID = "_typeid";
private final static String FIELD_TYPENAME = "_typename";
private SQLiteDatabase db;

public AgendaTypeDAO(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "Create table " + TABLE_NAME + "(" + FIELD_TYPEID
+ " integer primary key autoincrement," + FIELD_TYPENAME + ")";
db.execSQL(sql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = " DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);

}

public long insert(AgendaType at) {
SQLiteDatabase db = this.getReadableDatabase();
ContentValues cv = new ContentValues();
cv.put(FIELD_TYPENAME, at.getTypeName());
long row = db.insert(TABLE_NAME, null, cv);
db.close();
return row;

}

public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_TYPEID + "=?";
String[] whereValue = { Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
db.close();
}

public void update(AgendaType at) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_TYPEID + "=?";
String[] whereValue = { Integer.toString(at.getTypeId()) };
ContentValues cv = new ContentValues();
cv.put(FIELD_TYPENAME, at.getTypeName());
db.update(TABLE_NAME, cv, where, whereValue);
db.close();
}

public ArrayList<AgendaType> getAll() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + TABLE_NAME, null);
ArrayList<AgendaType> at = toArrayList(cursor);
db.close();

return at;

}

public AgendaType getById(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + TABLE_NAME + " where "
+ FIELD_TYPEID + "=" + id + "", null);
AgendaType at = new AgendaType();
if (cursor.moveToNext()) {
at.setTypeId(cursor.getInt(0));
at.setTypeName(cursor.getString(1));
}
db.close();
return at;

}

private ArrayList<AgendaType> toArrayList(Cursor c) {
ArrayList<AgendaType> arr = new ArrayList<AgendaType>();

while (c.moveToNext()) {
AgendaType a = new AgendaType();
a.setTypeId(c.getInt(0));
a.setTypeName(c.getString(1));
arr.add(a);
}
return arr;
}
}

7 个解决方案

#1


希望大家指教啊~~!真的不懂啊。。。

#2


你运行下程序后看下你的数据库文对不对就行了

#3


引用 2 楼 guoyoulei520 的回复:
你运行下程序后看下你的数据库文对不对就行了

请问能说详细一点吗?怎么看呢

#4


1  一般直接构建一个继承SQLiteOpenHelper的实现类就可以了,因为你只需要构造一个db文件,多张表,就完全够了, 你这整了两张表完全没必要。  

2  至于查看db文件,下个SQLiteSpy软件看就是了。

3 其它应该没什么问题,更新数据库的话,改变下DATABASE_VERSION的值就行,sql的话你自己运行下 不出错就没什么问题,但我一般使用第三方包,通过对bean使用注解来操作数据库,比较方便。

#5


该回复于2013-07-10 10:59:13被管理员删除

#6


引用 3 楼 luguo1024802 的回复:
Quote: 引用 2 楼 guoyoulei520 的回复:

你运行下程序后看下你的数据库文对不对就行了

请问能说详细一点吗?怎么看呢

到data/data/你的应用程序/db/这个目录里面有你创建的数据库文件
导出来用
http://sourceforge.net/projects/sqlitebrowser/

#7


sqlite  无非就是建库建表      但是我想说      写程序能加注释吗?不是看不懂,是很费解。我一直觉得写程序不加注释,就像上厕所不冲厕所一样……

#1


希望大家指教啊~~!真的不懂啊。。。

#2


你运行下程序后看下你的数据库文对不对就行了

#3


引用 2 楼 guoyoulei520 的回复:
你运行下程序后看下你的数据库文对不对就行了

请问能说详细一点吗?怎么看呢

#4


1  一般直接构建一个继承SQLiteOpenHelper的实现类就可以了,因为你只需要构造一个db文件,多张表,就完全够了, 你这整了两张表完全没必要。  

2  至于查看db文件,下个SQLiteSpy软件看就是了。

3 其它应该没什么问题,更新数据库的话,改变下DATABASE_VERSION的值就行,sql的话你自己运行下 不出错就没什么问题,但我一般使用第三方包,通过对bean使用注解来操作数据库,比较方便。

#5


该回复于2013-07-10 10:59:13被管理员删除

#6


引用 3 楼 luguo1024802 的回复:
Quote: 引用 2 楼 guoyoulei520 的回复:

你运行下程序后看下你的数据库文对不对就行了

请问能说详细一点吗?怎么看呢

到data/data/你的应用程序/db/这个目录里面有你创建的数据库文件
导出来用
http://sourceforge.net/projects/sqlitebrowser/

#7


sqlite  无非就是建库建表      但是我想说      写程序能加注释吗?不是看不懂,是很费解。我一直觉得写程序不加注释,就像上厕所不冲厕所一样……