gpt4 book ai didi

Android 设备上的 Javafxports 和 SQLite

转载 作者:行者123 更新时间:2023-11-30 08:44:45 26 4
gpt4 key购买 nike

我将使用 sqlite 编写示例代码,它必须适用于 Android 和 IOS(和桌面)

这是我的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 设备(如三星平板电脑)。

有人能告诉我为什么上面的代码不能在三星平板电脑上运行吗?或者这取决于我必须在我的代码中添加?

谢谢埃尔坎·卡普兰

最佳答案

您可以为每个平台加载您需要的驱动程序,并使用 Gluon Charm-Down了解平台并加载它。

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

编辑

也添加了桌面。

对于桌面,我们可以使用 org.sqlite.JDBC,对于 Android,我们可以使用 org.sqldroid.SQLDroidDriver。对于 iOS,不需要依赖关系,因为 SQLite.JDBCDriver 它已经包含在 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')
}
}

现在,在您的代码中,您可以根据应用程序运行的平台加载一个或另一个驱动程序,并创建连接,提供本地路径,如讨论的 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 对其中三个进行了测试,但前者比后者更好地管理平台依赖性。

关于Android 设备上的 Javafxports 和 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33655851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com