JDBC 的 Gluon 示例项目不适用于 iOS 设备
Gluon Sample Project with JDBC doesn't work on iOS Device
我有简单的 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$launchApplication12(LauncherImpl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait5(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl$$Lambda.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null3(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda.run(Unknown Source)
at java.security.AccessController.doPrivileged(AccessController.java:52)
at com.sun.javafx.application.PlatformImpl.lambda$runLater4(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda.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 上工作吗?
谢谢
埃尔坎·卡普兰
连接器中使用的编码似乎发生了变化。
这是我在 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')
}
}
我有简单的 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$launchApplication12(LauncherImpl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait5(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl$$Lambda.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null3(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda.run(Unknown Source)
at java.security.AccessController.doPrivileged(AccessController.java:52)
at com.sun.javafx.application.PlatformImpl.lambda$runLater4(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda.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 上工作吗?
谢谢 埃尔坎·卡普兰
连接器中使用的编码似乎发生了变化。
这是我在 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')
}
}