我已经阅读了大量关于如何在使用 android 时创建和使用数据库连接的博客和教程。虽然我有很多工作示例,但不同的实现会导致不同的问题。
例如,我使用数据源类 Datasource 和数据库帮助类 DBManagement。
数据源
public class DataSource {
// Database fields
private SQLiteDatabase database;
private DBManagement dbHelper;
public SMSDataSource(Context context) {
dbHelper = new DBManagement(context);
}
public void open() throws SQLException {
if(database == null){
database = dbHelper.getWritableDatabase();
}
}
public Cursor exampleCursor(long constraint){
Cursor cur = database.query(DBManagement.TABLE_NAME,
new String[] {DBManagement.Column}, "constraint="+constraint, null, null, null, null);
return cur;
}
//.. other methods down here which do rawQuery, QueryBuilder, etc..
数据库管理
public class DBManagement extends SQLiteOpenHelper{
// .. table definitions and columns etc ..//
public DBManagement(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
在 Activity 中的 onCreate 方法中,我将调用 datasource.open() 并打开 SQL 连接。之后我会做:
DataSource datasource = new DataSource();
Cursor cursor = datasource.exampleCursor(1);
startManagingCursor(cursor);
如果我导航到一个新 Activity ,我会收到以下错误:
06-27 21:59:14.812: E/Database(13396): close() was never explicitly called on database '/data/data/com.example.package/databases/db.db'
如果我将 datasource.close(); 添加到 onCreate 的末尾,则所有简单的游标适配器都不起作用,或者如果对上下文执行操作,我会收到错误消息,指出数据库未打开菜单。
处理上述问题的最佳方法是什么?
所以我做了以下操作,但仍然遇到数据库问题:
@Override
public void onBackPressed() {
// do something on back.
//Log.i(getClass().toString(), "onBackPressed");
datasource.close();
finish();
return;
}
@Override
protected void onResume(){
super.onResume();
onCreate(null);
}
@Override
protected void onRestart(){
datasource = new DataSource(this);
datasource.open();
filters = datasource.getFilterCursor();
startManagingCursor(filters);
super.onRestart();
}
@Override
protected void onPause(){
//Log.i(getClass().toString(), "onPause");
((CursorAdapter) adapter).getCursor().close();
datasource.close();
super.onPause();
}
@Override
protected void onStop(){
//Log.i(getClass().toString(), "onStop");
datasource.close();
super.onStop();
}
我的 Datasource.java 类具有以下内容:
public Datasource(Context context){
dbHelper = new DBManagement(context);
}
public void open() throws SQLException {
if( database == null ){
database = dbHelper.getWritableDatabase();
}
}
public void close(){
if(dbHelper != null){
dbHelper.close();
}
}
最佳答案
其实很简单:
finally)等startManagingCursor()close()。当你的进程结束时,我会自动关闭。 此外:频繁打开和关闭绝对不是一个好主意,因为它会带来相当多的开销。
使用加载程序也是一种选择。您绝对不需要使用内容提供程序来使用加载程序,但它并不像它应该的那样简单。使用内容提供程序涉及 IPC,如果您不打算将数据导出到其他应用程序,这通常是矫枉过正的。
关于Android 数据库连接和游标哦,我的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262627/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD