sve*_*ija 5 java sqlite android
我有一些Android项目,其中大部分都与SQLite数据库连接.我感兴趣的是使用一些静态类如" DatabaseHelper.class "这是一个很好的编程习惯(或者是一个糟糕的习惯),其中我将使用与数据库操作相关的所有静态方法.例如
public static int getId(Context context, String name) {
dbInit(context);
Cursor result = db.rawQuery("SELECT some_id FROM table WHERE some_name = '" + name + "'", null);
result.moveToFirst();
int id = result.getInt(result.getColumnIndex("some_id"));
result.close();
return id;
}
Run Code Online (Sandbox Code Playgroud)
其中dbInit(context) (在我的所有静态方法中用于数据库操作)是
private static void dbInit(Context context) {
if (db == null) {
db = context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我需要一些东西时,我可以轻松地调用这些方法
int id = DatabaseHelper.getId(this, "Abc");
Run Code Online (Sandbox Code Playgroud)
编辑:我是否必须在每个连接上使用dbClose或者保持每个活动打开并关闭每个活动?那么我是否将上面的代码更改为这样的内容?
...
dbClose();
return id;
}
private static void dbClose() {
if (db != null) {
db.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我建议你养成每次需要时都能获得数据库连接的习惯,并在完成后将其释放回来.这种设施的通常名称是"数据库连接池".
这会将连接逻辑移出实际代码并进入池中,并允许您在以后需要时执行许多操作.一个简单的事情,可能是池记录了连接对象的使用时间,因此您可以获得有关数据库使用情况的信息.
如果您只需要一个连接,那么您的初始池可以非常简单.
我肯定会将你的数据库相关代码放在一个单独的类中,但是真的建议不要使用静态类或Singleton.它起初可能看起来很好,因为它很方便,但不幸的是它紧密地结合了你的类,隐藏了它们的依赖性,并且还使得单元测试变得更加困难.
维基百科中的缺点部分简要概述了您可能希望探索其他技术的原因.您还可以前往在这里或在那里,他们给一个使用数据库访问单身一类的具体例子,以及如何使用依赖注入,而不是能解决一些我提到的问题.
作为第一步,我建议使用在构造函数中实例化的普通类,例如:
public class MyActivity extends Activity {
private DBAccess dbAccess;
public MyActivity() {
dbAccess = new DBAccess(this);
}
}
Run Code Online (Sandbox Code Playgroud)
作为第二步,您可能想要研究像RoboGuice这样的框架来打破硬依赖.您的代码看起来像:
public class MyActivity extends Activity {
@Inject private DBAccess dbAccess;
public MyActivity() {
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多详情,请告诉我们!
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |