に接続しようとしている間、私はこのコードを持っていたし、それはAVD上で正常に実行された:、java.nio.charset.StandardCharsets例外PCのローカルホスト
package com.mohammadfs.sample;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.e("M3", Thread.currentThread().getName());
Class.forName("org.mariadb.jdbc.Driver");
Connection connection = DriverManager.
getConnection("jdbc:mariadb://192.168.1.7:3306/fun", "root", "bingo");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from people");
if(resultSet.next()) {
Log.d("M3", resultSet.getString(2) + " " + resultSet.getString(3) + " " +
resultSet.getString(4));
}
}
catch(SQLException e) {
Log.e("M3", e.getMessage() + "\n");
for(StackTraceElement element: e.getStackTrace()) {
Log.e("M3", " " + element.toString());
}
}
catch(Exception e) {
Log.e("M3", "WTF!");
}
}
}).start();
}
}
しかし、物理的なデバイス上で私は No suitable driver
エラーを得たとき、そう最初に私は、接続変数を作成する前に Class.forName("org.mariadb.jdbc.Driver")
を追加し、私の場合には、ラップトップ ローカルのIPv4にIPアドレスを変更: 192.168.1.7
し、この例外が登場:
FATAL EXCEPTION: Thread-5122
java.lang.NoClassDefFoundError: java.nio.charset.StandardCharsets
at org.mariadb.jdbc.internal.packet.result.ErrorPacket.<init>(ErrorPacket.java:76)
at org.mariadb.jdbc.internal.packet.read.ReadInitialConnectPacket.<init>(ReadInitialConnectPacket.java:88)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.handleConnectionPhases(AbstractConnectProtocol.java:418)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:358)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:713)
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:471)
at org.mariadb.jdbc.Driver.connect(Driver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:175)
at java.sql.DriverManager.getConnection(DriverManager.java:209)
at com.mohammadfs.sample.MainActivity$1.run(MainActivity.java:27)
at java.lang.Thread.run(Thread.java:856)
は、私が検索し、一致する質問を見つけられませんでしたが、私は自分の携帯電話は、APIレベル17であり、私が使用してエミュレータがAPIを実行するので、それが原因で最小SDKであってもよいことは別の質問への答え から結論しました23バージョン。
EDIT
@CommonsWareが答えと私は推測してきたように、それがために必要なSDKのです! また、このような仕事のためにウェブサービスを使う方が良いとわかっていますが、現時点では私はそのようにはできません。 回避策があれば助かります。
回避策はありませんか?これをどうすれば解決できますか? –
@MaskedMan: "回避策はありませんか?" - ライブラリを使用しないでください。 JDBCは、最初はモバイルデバイスからの非常に良いアイデアではありません。あるいは、もしこのライブラリがオープンソースであれば、それをforkして 'StandardCharsets'への依存を取り除いてください。または、古いAndroidバージョンのサポートを計画している場合は、ライブラリの保守担当者にお尋ねください。 – CommonsWare