2016-07-03 3 views
1

に接続しようとしている間、私はこのコードを持っていたし、それは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のです! また、このような仕事のためにウェブサービスを使う方が良いとわかっていますが、現時点では私はそのようにはできません。 回避策があれば助かります。

答えて

1

StandardCharsetsがAPIレベル19で追加されました。このライブラリを使用する必要がある場合は、minSdkVersionを19以上に設定する必要があります。

+0

回避策はありませんか?これをどうすれば解決できますか? –

+0

@MaskedMan: "回避策はありませんか?" - ライブラリを使用しないでください。 JDBCは、最初はモバイルデバイスからの非常に良いアイデアではありません。あるいは、もしこのライブラリがオープンソースであれば、それをforkして 'StandardCharsets'への依存を取り除いてください。または、古いAndroidバージョンのサポートを計画している場合は、ライブラリの保守担当者にお尋ねください。 – CommonsWare

0

tomcatを実行しているときに同じエラーが発生しました JDKとJREのバージョンが競合しています。

は、私の場合は 1.6.0 にJDKフォーム 1.7 を変更し、エラーが修正されました。 (私のJREバージョン:1.7)

+0

私はそれを得ていなかった、私はTomcatを使用していなかった! ありがとうございます:) –

関連する問題