【问题标题】:java.nio.charset.StandardCharsets exception while trying to connect to pc localhostjava.nio.charset.StandardCharsets 尝试连接到 pc localhost 时出现异常
【发布时间】:2016-07-03 22:30:09
【问题描述】:

我有这段代码,它在 AVD 上成功运行:

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") 在创建连接变量之前,并将 IP 地址更改为笔记本电脑 就我而言,本地 IPv4: 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 23 版本,所以 SDK 最低。

编辑
正如@CommonsWare 回答的那样,我猜到了,这是因为需要 SDK! 我也知道使用 Web 服务来完成这样的工作会更好,但目前我不能那样做。 任何解决方法都会有所帮助和赞赏:)

【问题讨论】:

    标签: java android jdbc


    【解决方案1】:

    StandardCharsets 是在 API 级别 19 中添加的。如果您需要使用此库,您需要将您的 minSdkVersion 设置为 19 或更高。

    【讨论】:

    • @MaskedMan:“没有任何解决方法吗?” -- 不要使用库。首先,JDBC 在移动设备上并不是一个好主意。或者,如果这个库是开源的,则分叉它并删除对StandardCharsets 的依赖(尽管除了这个之外可能还有其他缺失的类)。或者,询问库的维护者是否计划支持较旧的 Android 版本。
    【解决方案2】:

    我在运行tomcat时遇到了同样的错误 JDK和JRE版本有冲突。

    就我而言,我更改了 JDK 表单 1.7 到 1.6.0 并且错误已修复。 (我的 JRE 版本:1.7)

    【讨论】:

    • 我没明白,我没有使用Tomcat!不过谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多