Android设备上的Javafxports和SQLite [英] Javafxports and SQLite on Android Device

查看:162
本文介绍了Android设备上的Javafxports和SQLite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将用sqlite编写一个示例代码,它必须同时适用于ANdroid和IOS(和桌面)

i will write a sample code with sqlite, that must work both ANdroid and IOS (and Desktop)

这是我的 build.gradle

  buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }
    dependencies { classpath 'org.javafxports:jfxmobile-plugin:1.0.6' }
}
apply plugin: 'org.javafxports.jfxmobile'
repositories {
    jcenter()
    mavenCentral()
    maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    maven { url 'https://oss.sonatype.org/content/repositories/releases' }
}
ext.CHARM_DOWN_VERSION = "1.0.0"
dependencies {
    compile 'mysql:mysql-connector-java:3.1.12'

    //compile 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'

    compile 'org.sqldroid:sqldroid:1.0.3'
    compile "com.gluonhq:charm-down-common:$CHARM_DOWN_VERSION"
    desktopRuntime "com.gluonhq:charm-down-desktop:$CHARM_DOWN_VERSION"

    //desktopRuntime 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'

    androidRuntime "com.gluonhq:charm-down-android:$CHARM_DOWN_VERSION"
    androidRuntime 'org.sqldroid:sqldroid:1.0.3'

    iosRuntime "com.gluonhq:charm-down-ios:$CHARM_DOWN_VERSION"
}
mainClassName = 'com.version17.Version17'
jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
        packagingOptions {
            exclude 'META-INF/INDEX.LIST'
        }
    }
    ios {
        infoPList = file('src/ios/Default-Info.plist')
        forceLinkClasses = ['com.version17.**.*', 'com.mysql.**.*', 'SQLite.**.*', 'com.gluonhq.**.*']
    }
}

sqliteHelper.java

public static void testSqli() throws SQLException, ClassNotFoundException{
    Class.forName("SQLite.JDBCDriver");

    String dbName = "mtt8.db";
    File dir = null;
    try {
        dir = PlatformFactory.getPlatform().getPrivateStorage();
    } catch (IOException e) {
        e.printStackTrace();
    }

    File db = new File (dir, dbName);
    String dbUrl = "jdbc:sqlite:" + db.getAbsolutePath();




    Connection conn = DriverManager.getConnection(dbUrl);

    //create table
    Statement st=null;

        st = conn.createStatement();
        st.executeUpdate("DROP TABLE IF EXISTS village;");
    st.executeUpdate("CREATE table village (id int, name varchar(20))");
        //insert row
    for (int i=0; i<50; i++){
        st.executeUpdate("INSERT INTO village VALUES (" +i+ ", 'Erkan Kaplan')");
    }


    //select
    String query = "SELECT id, name from village";
    ResultSet rs = null;

            rs = st.executeQuery(query);

            while(rs.next()) {
                int id = 0;
                id = rs.getInt(1);

                String name = null;

                    name = rs.getString(2);

                System.out.println("id:"+ id+ ", name: "+ name);
            st.executeUpdate("DELETE from village");
            rs.close();

    }

}

这项工作Ipad设备和桌面,但不适用于Android设备(如三星平板电脑)。

This work on Ipad Devices and Desktop but not on Android-Devices (like Samsung Tablet).

任何人都可以告诉我为什么上面的代码不适用于三星平板电脑?或者哪个必须添加我的代码?

Can anybody please say me why this code above dont work on Samsung Tablets? or which depends i must add in my code?

谢谢
Erkan Kaplan

thanks Erkan Kaplan

推荐答案

你可以加载每个平台所需的驱动程序,以及使用Gluon Charm-Down 了解有关平台并加载它。

You can load the driver you need for each platform, and with Gluon Charm-Down find out about the platform and load it.

使用Gluon 插件在IDE上,在 build.gradle 文件中,可以根据平台轻松添加不同的依赖项。

Using Gluon plugin on your IDE, in the build.gradle file it's easy to add different dependencies depending the platform.

编辑

还添加了桌面。

对于桌面,我们可以使用 org.sqlite.JDBC 对于Android,我们可以使用 org.sqldroid.SQLDroidDriver 。对于iOS,不需要依赖,因为 SQLite.JDBCDriver 它已被Robovm包含。

For Desktop we can use org.sqlite.JDBC and for Android we can use org.sqldroid.SQLDroidDriver. For iOS no dependency is required since SQLite.JDBCDriver it's already included by Robovm.

repositories {
    jcenter()
    maven { 
        url 'https://oss.sonatype.org/content/repositories/snapshots' 
    }
}

ext.CHARM_DOWN_VERSION = "1.0.0"

dependencies{
    compile "com.gluonhq:charm-down-common:$CHARM_DOWN_VERSION"

    desktopRuntime "com.gluonhq:charm-down-desktop:$CHARM_DOWN_VERSION"
    desktopRuntime 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'

    androidRuntime "com.gluonhq:charm-down-android:$CHARM_DOWN_VERSION"
    androidRuntime 'org.sqldroid:sqldroid:1.0.3'

    iosRuntime "com.gluonhq:charm-down-ios:$CHARM_DOWN_VERSION"
}

但是我们需要将它添加到 forceLinkClasses 选项:

But we need to add it to the forceLinkClasses option:

jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
    }

    ios {
        forceLinkClasses = [ 'your.package.**.*', 'SQLite.**.*']
        infoPList = file('src/ios/Default-Info.plist')
    }
}

现在,在您的代码中,您可以加载一个驱动程序或另一个驱动程序,具体取决于运行该应用程序的平台,并创建一个连接,提供一个本地路径,如所讨论的这里

Now, in your code you can load one driver or the other depending on the platform the app is running on, and create a connection, providing a local path like discussed here:

private void testSqli() throws SQLException, ClassNotFoundException {

    if (JavaFXPlatform.isAndroid()) {
        Class.forName("org.sqldroid.SQLDroidDriver");
    } else if (JavaFXPlatform.isIOS()) {
        Class.forName("SQLite.JDBCDriver");
    } else if (JavaFXPlatform.isDesktop()) {
        Class.forName("org.sqlite.JDBC");
    }

    File dir;
    String dbUrl = "jdbc:sqlite:";
    try {
        dir = PlatformFactory.getPlatform().getPrivateStorage();
        String dbName = "yourDatabase.db";
        File db = new File (dir, dbName);
        dbUrl = dbUrl + db.getAbsolutePath();
        Connection conn = DriverManager.getConnection(dbUrl);
        ...
    } catch (IOException ex) { }
}

现在您应该能够在桌面,Android和iOS上运行它。
我已经使用NetBeans和IntelliJ对其中的三个进行了测试,但前者比后者更好地管理平台依赖。

Now you should be able to run it on Desktop, Android and on iOS. I've tested on the three of them, both with NetBeans and with IntelliJ, but the former manages the platform dependencies better than the latter.

这篇关于Android设备上的Javafxports和SQLite的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆