在SQLiteOpenHelper

时间:2015-08-27 10:36:13

标签: android refactoring

我希望我不会问一些在嵌入式数据库编程中有直接答案的东西。如果我是,请指导我,我将结束这个问题。

我的问题如下:假设我的android应用程序中有一个SQLiteOpenHelper的子类。这个子类重写了适当的方法,并且还创建了一个数据库(比如database.db),我希望它具有一些用于将东西插入数据库的功能(即每个表)。如何编写这些方法以便重复代码很少?我问这个的原因是因为每个插入方法通常完全相同:获取数据库进行编写,创建ContentValues对象,用正确的数据填充它,并使用insert方法SQLiteOpenHelper

另一个选项,如果我不希望每个表都有一个insert方法,那就是从我对SQLiteOpenHelper的子类的引用中运行原始查询。说实话,对于通过此类插入/删除/查询数据库易于使用的API问题似乎都不是很好的解决方案。我很乐意帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我希望我能正确理解你。您需要将SQLiteOpenHelper类移动到另一个类文件中,并在每次需要打开数据库,获取查询或插入值时重用它的代码吗?

如果是 - 我可以提供链接供您在国外阅读,也可以为您提供一些片段。

让我们建议你有子类

class DBHelper extends SQLiteOpenHelper {

   public DBHelper(Context context) {...}

   public void onCreate(SQLiteDatabase db) {...}

   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {...}

}

在名为DBHelper的包中创建新的java类,并在其中移动DBHelper的完整代码。当你需要在代码中引用db时,请使用:

public class MainActivity extends AppCompatActivity{

   DBHelper dbHelper;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   dbHelper = new DBHelper(this);
   SQLiteDatabase db = dbHelper.getWritableDatabase();

   //rest of your code goes here

}

如果你想在不输入光标和查询代码的情况下从db获取数据,你可以去看看答案,由OschtärEi提供(link