【问题标题】:Gluon Sample Project with JDBC doesn't work on iOS Device带 JDBC 的 Gluon 示例项目在 iOS 设备上不起作用
【发布时间】:2016-02-10 04:21:46
【问题描述】:

我有简单的 Gluon + JDBC 代码。 我可以在 Android 设备上连接此代码,但不能在 Ipad 上连接。

我的 build.gradle;

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.0.6'
    }
}

apply plugin: 'org.javafxports.jfxmobile'

repositories {
    jcenter()
}
dependencies {
    compile 'mysql:mysql-connector-java:5.0.2'
    iosRuntime 'mysql:mysql-connector-java:5.0.2'
}

mainClassName = 'com.mtt8.version15'

jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
        packagingOptions {
            exclude 'META-INF/INDEX.LIST'
        }

        ios {
            infoPList = file('src/ios/Default-Info.plist')
            forceLinkClasses = ['com.mtt8.**.*', 'com.mysql.**.*']
        }
    }
}

这里是 JavaCode:

private static final String serverIP="192.168.3.188";
    private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_CONNECTION = "jdbc:mysql://192.168.3.188:3306/kasse_sql?useUnicode=true&characterEncoding=UTF-8";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "MYPASSWORD";

    public static Connection connection = null;
    public static Statement statement = null;
    public static String SQL = null;

    public static PreparedStatement pst = null;


    public static Connection getDBConnection(){

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try {
            //connection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
            connection = DriverManager.getConnection("jdbc:mysql://192.168.3.188:3306/kasse_sql?user=root&password=MYPASSWORD&useUnicode=true&characterEncoding=UTF-8");
            msg.setText("Connection is OK");
            return  connection;
        } catch (SQLException e) {
            e.printStackTrace();
            msg.setText("Dont Connection");
        }

        return connection;
    }

正如我所说,此代码适用于 Android,但不适用于我的 Ipad。

./gradlew launchIOSDevice

后出现以下错误
java.sql.SQLException: Unsupported character encoding 'Cp1252'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    at com.mysql.jdbc.Buffer.readString(Buffer.java:430)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2823)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:812)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3269)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1182)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2644)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:179)
    at java.sql.DriverManager.getConnection(DriverManager.java:144)
    at com.mtt8.version15.getDBConnection(version15.java:58)
    at com.mtt8.version15.start(version15.java:32)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.LauncherImpl$$Lambda$9.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl$$Lambda$7.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at com.sun.javafx.application.PlatformImpl$$Lambda$19.run(Unknown Source)
    at java.security.AccessController.doPrivileged(AccessController.java:52)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.javafx.application.PlatformImpl$$Lambda$6.run(Unknown Source)
    at org.robovm.apple.uikit.UIApplication.main(Native Method)
    at org.robovm.apple.uikit.UIApplication.main(UIApplication.java:384)
    at org.javafxports.jfxmobile.ios.BasicLauncher.main(BasicLauncher.java:115)
IOSWindowSystemInterface : setSwapInterval unimp
setSwapInterval(1)
ES2ResourceFactory: Prism - createStockShader: FillPgram_Color.frag
ES2ResourceFactory: Prism - createStockShader: Texture_Color.frag
ES2ResourceFactory: Prism - createStockShader: Solid_TextureRGB.frag
IOSWindowSystemInterface : setSwapInterval unimp
setSwapInterval(0)

我尝试了不同的连接字符串,但结果是一样的。

谁能告诉我为什么我的代码不能在 Ipad 上运行?

谢谢 埃尔坎卡普兰

【问题讨论】:

  • 检查您的build.gradle 文件,您似乎已将iOS 包含在android 设置中。或者是发布代码的错字?
  • 我的 build.gradle 和上面一样...我只添加了带有“iosRuntime”的行
  • 该行不是必须的,它将从第一个依赖项中添加。并检查:jfxmobile { android { manifest = 'src/android/AndroidManifest.xml' packagingOptions { exclude 'META-INF/INDEX.LIST' } } ios { infoPList = file('src/ios/Default-Info.plist') forceLinkClasses = ['com.mtt8.**.*', 'com.mysql.**.*'] } }
  • Sorr jose,我不明白你的意思。这是我的代码:fs5.directupload.net/images/151109/6icx73dd.pngwidth="800" height="600">
  •  依赖项 { compile 'mysql:mysql-connector-java:3.1.14' } mainClassName = 'com.mtt8.version15' jfxmobile { android { manifest = 'src/android/AndroidManifest. xml' packagingOptions { 排除 'META-INF/INDEX.LIST' } } ios { infoPList = file('src/ios/Default-Info.plist') forceLinkClasses = ['com.mtt8.**.*', 'com .mysql.**.*'] } } 
    结果相同....

标签: java ios jdbc javafx javafxports


【解决方案1】:

连接器中使用的编码似乎发生了变化。

这是适用于 iOS 的最新版本:

dependencies {
    compile 'mysql:mysql-connector-java:3.1.12'
}

对于较新的版本(3.1.13+),我发现与您看到的相同的异常:

java.sql.SQLException: Unsupported character encoding 'Cp1252'.
at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java)

最后,您的build.gradle 文件有错字:

jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
        packagingOptions {
            exclude 'META-INF/INDEX.LIST'
        }
        // typo!! iOS should be outside android!
        ios {
            infoPList = file('src/ios/Default-Info.plist')
            forceLinkClasses = ['com.mtt8.**.*', 'com.mysql.**.*']
        }
    }

}

确保这是您设置选项的方式:

jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
        packagingOptions {
            exclude 'META-INF/INDEX.LIST'
        }
    }

    ios {
        forceLinkClasses = [ 'com.gluonhq.**.*', 'com.mysql.**.*']
        infoPList = file('src/ios/Default-Info.plist')
    }
}

【讨论】:

  • 谢谢你,Jose,;.) 我更正了我的错字并在 build.gradle 中设置了我的 IOS Lines....现在我在 Ipad AIR 上建立了连接...但仅适用于 3.1.12 版.....你的东西,它来自robovm端或jdbc端的错误?
  • 我不知道。那些 mysql 版本真的很旧,它们不适合移动设备。顺便说一句,如果您认为答案有效,请将其标记为已接受,以便其他人也可以找到它们并从中受益。
  • 何塞,但 5.0.2 版适用于 Android,但不适用于 Ipad ..... 在 Ipad 上仅适用于 3.1.12 版 ..... 似乎是 robovm 中的错误.. .
  • 如果您认为是这种情况,请随时向他们报告。
  • 好的,我这样做并尝试在 robovm 上打开一个错误 ....如何接受您的答案有效? (对不起,我是 stackoverflow 的新手)
猜你喜欢
  • 2020-04-10
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多