我的项目中有一个listview链接到数据库,并从数据库显示其上下文但我的问题是每当我的应用程序运行它记录两次(ex.2记录第一次运行,4记录与相同的上下文,...)和我不知道wat是问题
这是我的数据库类:
new File(DIR_DATABASE).mkdirs();
dataBase = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/information.sqlite", null);
dataBase.execSQL("CREATE TABLE IF NOT EXISTS information (" +
"information_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ," +
"information_title TEXT)");
dataBase.execSQL("INSERT INTO information (information_title) VALUES ('قسمت اول')");
dataBase.execSQL("INSERT INTO information (information_title) VALUES ('قسمت دوم')");
和我的主要课程,显示listview:
ListView lstC findViewById(R.id.lstContent);
adapter = new AdapterNote(title);
lstContent.setAdapter(adapter);
readFromDataBase();
adapter.notifyDataSetChanged();
}
private void readFromDataBase() {
Cursor cursor = G.dataBase.rawQuery("SELECT * FROM information", null);
while (cursor.moveToNext()) {
StructNote detail = new StructNote();
detail.title = cursor.getString(cursor.getColumnIndex("information_title"));
title.add(detail);
}
cursor.close();
adapter.notifyDataSetChanged();
}
答案 0 :(得分:0)
您需要了解SQLiteOpenHelper。这是工作流程问题,因此您应该更好地阅读一些教程。 This是一个很好的教程,您可以在其中学习这个概念。
在很短的时间里,我列出了一些可能对您有用的要点:
在您的应用程序中,您将创建SQLiteOpenHelper类的子类.SQLiteOpenHelper是一个用于管理数据库创建和版本管理的帮助程序类。在子类覆盖中,onCreate()和onUpgrade()。
public class MySQLiteHelper extends SQLiteOpenHelper {
public void onCreate(SQLiteDatabase database) {
// create database command.
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// upgrade database command here.
}
}
创建一个DAO类,用于管理与数据库的交互。你的CRUD方法将在这里。有关详细信息,请参阅DAO模式。此类将集中访问数据库,因此您的活动片段将与此类交互以执行操作。不允许直接访问数据库。
public class ModelDataSource {
// needed to perform operation on database
private SQLiteDatabase database;
//needed to retrieve database object
private MySQLiteHelper dbHelper;
public boolean insertModel(Model model) {
// perform insert operation on database
}
}
在您的活动中,您可以与DAO进行互动以执行某些操作。
public class YourActivity extends Activity {
private ModelDataSource datasource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datasource = new ModelDataSource(this);
datasource.open();
boolean insertion_status = datasource.insert(modelobject);
}
}