Java 如何在单击事件时从数据库获取数据?
我正在动态生成一个事件。我将这些事件数据存储在sqlite数据库中。现在我想检索单击事件的数据。我尝试检索数据,但始终获取第0个id数据 生成事件功能:Java 如何在单击事件时从数据库获取数据?,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在动态生成一个事件。我将这些事件数据存储在sqlite数据库中。现在我想检索单击事件的数据。我尝试检索数据,但始终获取第0个id数据 生成事件功能: private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title) { final View eventView = inflater.inflate(R.layo
private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title) {
final View eventView = inflater.inflate(R.layout.event_view, dayplanView, false);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams();
RelativeLayout container = (RelativeLayout) eventView.findViewById(R.id.container);
TextView tvTitle = (TextView) eventView.findViewById(R.id.textViewTitle);
if (tvTitle.getParent() != null)
((ViewGroup) tvTitle.getParent()).removeView(tvTitle);
tvTitle.setText(title);
int distance = (toMinutes - fromMinutes);
layoutParams.topMargin = dpToPixels(fromMinutes + 9);
layoutParams.height = dpToPixels(distance);
eventView.setLayoutParams(layoutParams);
dayplanView.addView(eventView);
container.addView(tvTitle);
eventView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i = new Intent(getActivity(),AddEventActivity.class);
startActivity(i);
}
});
}
这是我获取数据的尝试:
db = new EventTableHelper(getApplication());
eventData = new EventData();
if(editMode)//true
{
eventData = events.get(id);
Toast.makeText(getApplicationContext(),String.valueOf(id),Toast.LENGTH_LONG).show();
title.setText(eventData.getTitle());
eventTitle = title.getText().toString();
db.updateEvent(eventData);
Toast.makeText(getApplicationContext(),"Edit mode",Toast.LENGTH_LONG).show();
Log.i("Log","save mode");
}
我有EventTableHelper,因为我创建了获取事件、更新和删除事件的函数
public class EventTableHelper extends SQLiteOpenHelper {
private static final String TABLE = "event";
private static final String KEY_ID = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_FROM_DATE = "datefrom";
private static final String KEY_TO_DATE = "dateto";
private static final String KEY_LOCATION = "location";
private static final String KEY_DAY_OF_WEEK = "dayofweek";
public EventTableHelper(Context context) {
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
public void createTable(SQLiteDatabase db){
String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE+ "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_TITLE + " TEXT,"
+ KEY_FROM_DATE + " DATE,"
+ KEY_TO_DATE + " DATE,"
+ KEY_DAY_OF_WEEK + " TEXT "
+ KEY_LOCATION + " TEXT" + ")";
db.execSQL(CREATE_EVENTS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
// createTable(db);
// onCreate(db);
}
public void addEvent(EventData event) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TITLE,event.getTitle());
values.put(KEY_FROM_DATE, event.getFromDate());
values.put(KEY_TO_DATE,event.getToDate());
values.put(KEY_DAY_OF_WEEK,event.getDayOfWeek());
values.put(KEY_LOCATION,event.getLocation());
db.insert(TABLE, null, values);
db.close();
}
EventData getEvent(int id) {
SQLiteDatabase db = this.getReadableDatabase();
EventData eventData = new EventData();
Cursor cursor = db.query(TABLE, new String[]{KEY_ID,
KEY_TITLE, KEY_FROM_DATE, KEY_TO_DATE,KEY_DAY_OF_WEEK, KEY_LOCATION}, KEY_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if( cursor != null && cursor.moveToFirst() ) {
eventData = new EventData(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2),
cursor.getString(3), cursor.getString(4), cursor.getString(5));
}
return eventData;
}
public List<EventData> getAllEvents() {
List<EventData> conList = new ArrayList<EventData>();
String selectQuery = "SELECT * FROM " + TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
EventData event = new EventData();
event.setId(Integer.parseInt(cursor.getString(0)));
event.setTitle(cursor.getString(1));
event.setFromDate(cursor.getString(2));
event.setToDate(cursor.getString(3));
event.setLocation(cursor.getString(4));
conList.add(event);
} while (cursor.moveToNext());
}
return conList;
}
}
公共类EventTableHelper扩展了SQLiteOpenHelper{
私有静态最终字符串TABLE=“event”;
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串键\u TITLE=“TITLE”;
私有静态最终字符串键\u FROM_DATE=“datefrom”;
私有静态最终字符串密钥\u TO_DATE=“dateto”;
私有静态最终字符串KEY_LOCATION=“LOCATION”;
私有静态最终字符串密钥\u DAY\u OF_WEEK=“dayofweek”;
公共EventTableHelper(上下文){
super(context,Constants.DATABASE\u NAME,null,Constants.DATABASE\u VERSION);
}
@凌驾
public void onCreate(SQLiteDatabase db){
}
public void createTable(SQLiteDatabase db){
字符串CREATE_EVENTS_TABLE=“CREATE TABLE”+TABLE+”(“
+密钥ID+“整数主键,”
+键+标题+文本
+键从日期+日期
+按键至日期+日期
+每周的关键日期+“文本”
+按键位置+“文本”+”;
execSQL(创建事件表);
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表);
//createTable(db);
//onCreate(db);
}
public void addEvent(EventData事件){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_TITLE,event.getTitle());
value.put(KEY_FROM_DATE,event.getFromDate());
put(KEY-TO-DATE,event.getToDate());
value.put(KEY_DAY_OF u WEEK,event.getDayOfWeek());
value.put(KEY_LOCATION,event.getLocation());
db.insert(表,空,值);
db.close();
}
EventData getEvent(int id){
SQLiteDatabase db=this.getReadableDatabase();
EventData EventData=新的EventData();
Cursor Cursor=db.query(表,新字符串[]{KEY\u ID,
密钥标题、密钥自日期、密钥至日期、密钥周的日期、密钥位置、密钥ID+“=?”,
新字符串[]{String.valueOf(id)},null,null,null,null);
if(cursor!=null&&cursor.moveToFirst()){
eventData=新的eventData(Integer.parseInt(cursor.getString(0))、cursor.getString(1)、cursor.getString(2),
cursor.getString(3)、cursor.getString(4)、cursor.getString(5));
}
返回事件数据;
}
公共列表getAllEvents(){
List conList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表格;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
EventData事件=新的EventData();
setId(Integer.parseInt(cursor.getString(0));
event.setTitle(cursor.getString(1));
event.setFromDate(cursor.getString(2));
event.setToDate(cursor.getString(3));
event.setLocation(cursor.getString(4));
conList.add(事件);
}while(cursor.moveToNext());
}
返回列表;
}
}
我想显示数据并在发生更改时更新数据
哪里出了问题?从哪里获取
位置
?抱歉位置为空。我试过这样做,但Id没有设置为查看@ρцσρρєK`eventData=events.get(Id)`仅返回第0行的行?在id show full code中赋值的地方,我没有给id赋值。它的键id+键id+“整数主键”。我存储的数据如下:db.addEvent(新的EventData(eventTitle、startTime、endTime、dayOfWeek、location));通过单击其他事件,我获得了第0个事件的标题。