Android设备上的Javafxports和SQLite

Android设备上的Javafxports和SQLite,java,android,sqlite,javafxports,Java,Android,Sqlite,Javafxports,我将用sqlite编写一个示例代码,该代码必须同时适用于ANdroid和IOS(以及桌面) 这是我的体形。gradle buildscript { repositories { jcenter() mavenCentral() maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } dependencies { classpath

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

这是我的体形。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();

    }

}
publicstaticvoidtestsqli()抛出SQLException,ClassNotFoundException{
类forName(“SQLite.JDBCDriver”);
字符串dbName=“mtt8.db”;
File dir=null;
试一试{
dir=PlatformFactory.getPlatform().getPrivateStorage();
}捕获(IOE异常){
e、 printStackTrace();
}
File db=新文件(dir,dbName);
String dbUrl=“jdbc:sqlite:”+db.getAbsolutePath();
连接conn=DriverManager.getConnection(dbUrl);
//创建表
语句st=null;
st=conn.createStatement();
st.executeUpdate(“删除表格,如果存在;”);
st.executeUpdate(“创建表村(id int,name varchar(20))”;
//插入行

对于(inti=0;i您可以为每个平台加载所需的驱动程序,使用Gluon查找平台并加载它

在IDE上使用Gluon,在
build.gradle
文件中,可以很容易地根据平台添加不同的依赖项

编辑

还添加了桌面

对于桌面,我们可以使用
org.sqlite.JDBC
,对于Android,我们可以使用
org.sqldroid.SQLDroidDriver
。对于iOS,不需要依赖项,因为
sqlite.jdbdriver
已经包含在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
选项中:

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

    ios {
        forceLinkClasses = [ 'your.package.**.*', 'SQLite.**.*']
        infoPList = file('src/ios/Default-Info.plist')
    }
}
现在,在您的代码中,您可以根据应用程序运行的平台加载一个或另一个驱动程序,并创建连接,提供本地路径,如所述:

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

hi jose,谢谢,我编辑了上面的构建梯度,如果我在Android上部署,会出现以下错误:如果您使用IntelliJ,可能
androidRuntime
不起作用(在NetBeans中是这样的)。尝试将其移动到运行时'org.sqldroid:sqldroid:1.0.3'
。它在iOS上也可以正常工作,因为它不会被添加。Jose,可能是,它们有冲突?如果我注释或删除行compile'org.xerial:sqlite jdbc:3.9.0-SNAPSHOT',我就可以。/gredlew AndroidStall没有任何问题。但是如果我尝试编译某个时间结果总是像这里这样的错误为什么要添加org.xerial?正如我说的,我将编写一个小应用程序。首先连接到我的局域网上的mysql服务器,并将结果保存为客户端中的sqlite.db…客户端可能是IOS或安卓。。。
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) { }
}