【问题标题】:How to properly install mysql connector in Eclipse?如何在 Eclipse 中正确安装 mysql 连接器?
【发布时间】:2016-02-10 07:36:27
【问题描述】:

首先我想说这是我大学的一个课程项目,同时也是我的第一个 Android 应用程序,它比计算器更复杂,所以我知道我可以做一些不可原谅的错误,但我的首要任务是代码应该工作。它可能不安全并且不考虑某些情况,但只要这些情况不出现,它就会出现。

我的应用程序打算在 Android 上运行,首先应该出现登录屏幕,该屏幕需要登录名和密码,生成密码的哈希值并联系 Web 服务器上的数据库以比较哈希值。有人告诉我使用免费数据库 db4free.net。

我创建了一个 Serwer 类,专门负责联系数据库。据我从教程和stackoverflow问题和答案中了解到,连接应包括:

  1. 正在加载驱动程序,
  2. 在 DriverManager 类中注册,
  3. 使用 getConnection 方法打开连接,传递凭据,
  4. 准备和执行 SQL 查询,
  5. 正在获取结果集。

我还了解到我应该下载一个 mysql-connector-java-5.1.38-bin.jar 文件。正如stackoverflow上的一些线程所建议的那样,我将它复制到项目的主目录中(我必须复制工作区并在完成后带到教授的计算机),将其作为外部库添加到属性的库选项卡中。现在,当我在智能手机上运行该项目时,我收到 java.lang.ClassNotFoundException: 没有找到类“com.mysql.jdbc.Driver” 错误。我还尝试在 Order and Export 选项卡中检查库 - 然后它甚至无法编译,返回 Conversion to Dalvik format failed with error 1

我在其他stackoverflow线程中尝试了很多场景,例如在许多配置中清理项目,更改构建路径的顺序等。我怀疑我犯了一个我看不到的简单愚蠢的错误并且我希望你能认出它。

这是我的 Serwer 课程:

package com.planer.serwer;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Driver;

import com.planer.MainActivity;
import com.example.planer.R;
import com.planer.pracownik.Pracownik;

public class Serwer {
        private Connection conn = null;
        private static Driver driver;
        private static int status;
        private MainActivity parentActivity;

        private final String user = parentActivity.getResources().getString(R.string.db_login);
        private final String pass = parentActivity.getResources().getString(R.string.db_pass);
        private final String url= "jdbc:mysql://db4free.net:3306/kalendarzplaner";

        public static final int STATUS_GOOD = 0;
        public static final int STATUS_NO_CONNECTION = 1;
        public static final int STATUS_NOT_AUTHENTICATED = 2;
        public static final int STATUS_SQL_EXCEPTION = 4;
        public static final int STATUS_NO_DRIVER = 8;


        public Serwer(MainActivity parentActivity){
            status = STATUS_NO_CONNECTION;
            try {
                driver = new com.mysql.jdbc.Driver();
            } catch (Exception ex) {
                status |= STATUS_NO_DRIVER;
            } catch (NoClassDefFoundError e){
                status |= STATUS_NO_DRIVER;
            }
            this.parentActivity = parentActivity;
        }

        public Pracownik authorize(String login, String passhash){
            Pracownik pracownik = new Pracownik("","",false,status);
            status |= this.polacz();
            if(status != Serwer.STATUS_GOOD) {
                pracownik.status |= status;
                return pracownik;
            }
            Statement statement = null;
            ResultSet resultSet = null;
            String query = "select passhash, imie_nazwisko, czy_kierownik from auth where login='" + login + "';";
            try {
                statement = conn.prepareStatement(query);
                resultSet = statement.executeQuery(query);
                resultSet.first();
                if(resultSet.getString("passhash").toString().compareTo(passhash)!= 0){
                    status |= Serwer.STATUS_NOT_AUTHENTICATED;
                    pracownik.status |= status;
                    return pracownik;
                }
                pracownik.login = login;
                pracownik.imie_nazwisko = resultSet.getString("imie_nazwisko");
                pracownik.czy_kierownik = resultSet.getBoolean("czy_kierownik");
            } catch (SQLException ex) {
                pracownik.status |= Pracownik.STATUS_SQL_EXCEPTION;
            }           
            return pracownik;
        }


        public int polacz() {
            int done = STATUS_NO_CONNECTION;
            if((status & STATUS_NO_DRIVER) != 0)
                return done;
            // Connection
            try {
                DriverManager.registerDriver(driver);
                conn = DriverManager.getConnection(url, user, pass);
                done = Serwer.STATUS_GOOD;
            } catch (java.sql.SQLException ex) {
                done |= Serwer.STATUS_SQL_EXCEPTION;
                System.out.println("SQLException: " + ex.getMessage());
            } 
            return done;
        }
}

如我所说,authorize 方法的结果状态为 9,这是未加载驱动程序时的预期状态。我还附加了我的工作区内容。

【问题讨论】:

    标签: android eclipse mysql-connector


    【解决方案1】:

    首先,我想建议您试用 Android Studio。它是专为 Android 开发而开发的新的更现代的 IDE。

    其次,在 Android 上联系数据库与在桌面应用程序中从 Java/C# 联系数据库有很大不同。

    要联系在线 MySQL 数据库,您需要一个 RESTful 服务(例如用 PHP 编写),该服务从数据库中获取数据并将其发送到应用程序。该服务就像是应用程序和数据库之间的通信点。该服务通常以 JSON 等对人类不友好的格式向应用程序发送数据,因此您的应用程序需要对其进行解析然后显示它。

    【讨论】:

    • 是的,我已经听说我应该使用Android Studio,但不幸的是教授坚持使用Eclipse。感谢您的建议和教程,但我不认为我正在使用的服务器可以提供用 PHP 编写代码,并且和以前一样,服务器 db4free 是教授强制的。
    • 使用 Eclipse 真的不是问题。关于数据库...db4free 也可以,但要连接到 android,RESTful 服务是最好的技术,并且可能是目前唯一使用的技术,但有一些例外。没有人鼓励使用适用于 Android 的 ODBC 驱动程序。从这个意义上说,继续使用你被告知的数据库,找到一个免费的网络托管站点,如awardspace.com,并用它来在那里托管你的 php 服务。如果您指向 db4free 的正确 IP,它们仍然可以与不在同一台服务器上的数据库通信。也许问问你的教授他是否同意你的解决方案。
    • 谢谢,我和教授谈过了,他同意了。现在它可以正常工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多