【问题标题】:PhoneGap(3.4.0) android app with sqlite, its working fine in emulator but not in device带有sqlite的PhoneGap(3.4.0)android应用程序,它在模拟器中运行良好,但在设备中却不行
【发布时间】:2014-11-10 20:19:51
【问题描述】:

我在 PhoneGap(3.4.0) 中使用 sqlite 创建了 Android 应用程序,它在模拟器中运行良好但在设备中无法运行。我正在使用包含大量记录的填充数据库。我用谷歌搜索了很多,但没有解决我的问题。 错误是

SQLitePlugin.executeSql[Batch](): Error=no such table: my_table_name (code 1): , while compiling: SELECT * from my_table_name

我的代码:

db = window.sqlitePlugin.openDatabase("myDB.sqlite", "1.0", "DB", 4000000);
db.transaction(function(tx) {      
     tx.executeSql("SELECT * from my_table_name", [], function(tx, res)  {                                           
      });
});

【问题讨论】:

  • 我已经完成了。
  • hmmm 看起来像no such table ...就是这样,问题解决了...关于SO的题外话:Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. 此代码将产生这样的错误,因为没有CREATE TABLE statment .. .
  • 呵呵I dont want to creat - 那你就不会有......简单的逻辑

标签: android cordova


【解决方案1】:

我用这个解决了我的问题,如果你正在为模拟器工作然后使用命令提示符复制你的数据库,我已经在资产文件夹中添加了 myDB.sqlite 然后运行

adb push myDB.sqlite /data/data/com.my_app.my_app/databases/myDB.sqlite

对于设备,只需将它们放入应用程序包中,即 Android 的资产文件夹。你需要 myDB.sqlite 和 file__0/0000000000000001.sqlite 文件。 More....

public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);
   super.init();
   try
   {
        String pName = this.getClass().getPackage().getName();
        this.copy("myDB.sqlite","/data/data/"+pName+"/databases/");
        this.copy("0000000000000001.sqlite","/data/data/"+pName+"/app_database/file__0/");
   }
   catch (IOException e)
   {
       e.printStackTrace();
   }

  super.loadUrl(Config.getStartUrl());    
}

void copy(String file, String folder) throws IOException 
{

   File CheckDirectory;
   CheckDirectory = new File(folder);
   if (!CheckDirectory.exists())
   { 
     CheckDirectory.mkdir();
   }

   InputStream in = getApplicationContext().getAssets().open(file);
   OutputStream out = new FileOutputStream(folder+file);
   // Transfer bytes from in to out
   byte[] buf = new byte[1024];
   int len; while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
   in.close(); out.close();

}

对于 iOS,您可以使用以下步骤:

第 1 步:sqlite 数据库中删除 .sqlite 扩展名。前任。如果我们有一个名为 myDB.sqlite 的数据库,则只使用 myDB

第 2 步: 然后将 myDB 文件拖到 Xcode 中的资源目录,方法是选择“为任何添加的文件夹创建组”选项并选中“将项目复制到目标中”组的文件夹(如果需要)”选项,同时添加参考。

第 3 步:现在使用以下代码将数据库复制到我们应用程序内的 Document 目录中。

-(void) copyDatabase{

   NSFileManager *fileManager = [NSFileManager defaultManager];
   NSError *error;

   NSString *dbPath = [self getDBPath];
   BOOL success = [fileManager fileExistsAtPath:dbPath];

   if(!success) {

     NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myDB"];
     success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

     if (!success)
       NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
  }
 }

- (NSString *) getDBPath
{

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
   NSString *documentsDir = [paths objectAtIndex:0];
   return [documentsDir stringByAppendingPathComponent:@"myDB"];
}

第 4 步: 使用此代码 [self copyDatabase]; 并在 didFinishLaunchingWithOptions(AppDelegate.m ) 方法中调用它,如下所示

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
   [self copyDatabase];
}

现在使用以下代码打开数据库。

function openDatabase() {
      try{
           if(!!window.openDatabase){
            var openDB = window.sqlitePlugin.openDatabase({name : "myDB"});
           }else{
              navigator.notification.alert("Local database is not supported by your device.");
           }
      }
      catch(error){
         console.log("ERROR:" + error.message);
 }

More detail...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多