如何在Eclipse中正确安装mysql连接器?

时间:2016-02-06 18:42:09

标签: android eclipse mysql-connector

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

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

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

  1. 加载驱动程序,
  2. 在DriverManager类中注册,
  3. 使用getConnection方法打开连接,传递凭据
  4. 准备并执行SQL查询,
  5. 获取结果集。
  6. 我还了解到我应该下载一个mysql-connector-java-5.1.38-bin.jar文件。正如stackoverflow上的一些线程建议的那样,我将它复制到项目的主目录中(我必须复制工作区并在完成时将其带到教授的计算机上),将其作为外部库添加到属性的Libraries选项卡中。现在当我在智能手机上运行项目时,我得到一个 java.lang.ClassNotFoundException:没有找到类" com.mysql.jdbc.Driver" 错误。我还尝试在Order and Export选项卡中检查库 - 然后它甚至没有编译,返回转换为Dalvik格式失败,错误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,这是未加载驱动程序时的预期。我还附上了我的工作区内容。

    Workspace

1 个答案:

答案 0 :(得分:1)

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

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

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