尝试连接到pc localhost

时间:2016-07-03 22:30:09

标签: java android jdbc

我有这个代码,它在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地址更改为laptop 在我的情况下本地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)

所以我搜索并没有找到任何匹配的问题,但我从答案中得出结论 另一个问题可能是由于最小的SDK,因为我的手机是API级别17,我使用的模拟器运行API 23版本。

修改
正如@CommonsWare回答并且我已经猜到了,这是因为需要SDK! 此外,我知道使用网络服务更好地完成这项工作,但目前我无法做到这一点。 任何解决方法都会有所帮助和赞赏:)

2 个答案:

答案 0 :(得分:1)

在API级别19中添加了

StandardCharsets。如果您需要使用此库,则需要将minSdkVersion设置为19或更高。

答案 1 :(得分:0)

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

在我的情况下,我更改了JDK表单 1.7 至 1.6.0 并且错误是固定的。 (我的JRE版本:1.7)