如何在 Eclipse 中正确安装 mysql 连接器?
How to properly install mysql connector in Eclipse?
首先我想说这是我大学课程的项目,同时也是我的第一个应用程序 Android 比计算器更复杂,所以我明白了我本可以犯一些不可原谅的错误,但我的首要任务是代码应该工作。它可能不安全并且不考虑某些情况,但只要这些情况不会出现,它就会出现。
我的应用程序打算 运行 在 Android 上运行,首先应该出现登录屏幕,它接受登录名和密码,对密码进行哈希处理并联系数据库Web 服务器来比较哈希值。有人告诉我使用免费数据库 db4free.net。
我创建了一个 class 服务器,专门负责连接数据库。据我从教程和计算器问答中了解到,连接应包括:
- 正在加载驱动程序,
- 正在 DriverManager 中注册它 class,
- 使用 getConnection 方法打开连接,传递凭据,
- 准备和执行 SQL 查询,
- 正在获取结果集。
我还了解到我应该下载一个 mysql-connector-java-5.1.38-bin.jar 文件。正如 Whosebug 上的一些线程所建议的那样,我将它复制到项目的主目录中(我必须复制工作区并在完成后带到教授的计算机上),将它作为外部库添加到属性的库选项卡中。现在,当我在智能手机上 运行 项目时,出现 java.lang.ClassNotFoundException: Didn't find class "com.mysql.jdbc.Driver" 错误。我还尝试在 Order and Export 选项卡中检查库 - 然后它甚至无法编译,返回 Conversion to Dalvik format failed with error 1.
我在其他 Whosebug 线程中尝试了很多场景,例如在许多配置中清理项目,更改构建路径的顺序等。我怀疑我犯了一个简单而愚蠢的错误,但我没有看,我希望你能认出它。
这是我的服务器 class:
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;
}
}
正如我所说,授权方法的结果状态为9,这是未加载驱动程序时的预期。我还附加了我的工作区内容。
首先,我想首先建议您试用 Android Studio。它是专为 Android 开发而开发的新的更现代的 IDE。
其次,在 Android 上联系数据库与在桌面应用程序中从 Java/C# 联系数据库有很大不同。
要联系在线 MySQL 数据库,您需要一个 RESTful 服务(例如用 PHP 编写)从数据库获取数据并将其发送到应用程序。该服务就像应用程序和数据库之间的通信点。该服务通常以 JSON 等对人类不友好的格式向应用程序发送数据,因此您的应用程序需要解析该格式然后显示它。
首先我想说这是我大学课程的项目,同时也是我的第一个应用程序 Android 比计算器更复杂,所以我明白了我本可以犯一些不可原谅的错误,但我的首要任务是代码应该工作。它可能不安全并且不考虑某些情况,但只要这些情况不会出现,它就会出现。
我的应用程序打算 运行 在 Android 上运行,首先应该出现登录屏幕,它接受登录名和密码,对密码进行哈希处理并联系数据库Web 服务器来比较哈希值。有人告诉我使用免费数据库 db4free.net。
我创建了一个 class 服务器,专门负责连接数据库。据我从教程和计算器问答中了解到,连接应包括:
- 正在加载驱动程序,
- 正在 DriverManager 中注册它 class,
- 使用 getConnection 方法打开连接,传递凭据,
- 准备和执行 SQL 查询,
- 正在获取结果集。
我还了解到我应该下载一个 mysql-connector-java-5.1.38-bin.jar 文件。正如 Whosebug 上的一些线程所建议的那样,我将它复制到项目的主目录中(我必须复制工作区并在完成后带到教授的计算机上),将它作为外部库添加到属性的库选项卡中。现在,当我在智能手机上 运行 项目时,出现 java.lang.ClassNotFoundException: Didn't find class "com.mysql.jdbc.Driver" 错误。我还尝试在 Order and Export 选项卡中检查库 - 然后它甚至无法编译,返回 Conversion to Dalvik format failed with error 1.
我在其他 Whosebug 线程中尝试了很多场景,例如在许多配置中清理项目,更改构建路径的顺序等。我怀疑我犯了一个简单而愚蠢的错误,但我没有看,我希望你能认出它。
这是我的服务器 class:
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;
}
}
正如我所说,授权方法的结果状态为9,这是未加载驱动程序时的预期。我还附加了我的工作区内容。
首先,我想首先建议您试用 Android Studio。它是专为 Android 开发而开发的新的更现代的 IDE。
其次,在 Android 上联系数据库与在桌面应用程序中从 Java/C# 联系数据库有很大不同。
要联系在线 MySQL 数据库,您需要一个 RESTful 服务(例如用 PHP 编写)从数据库获取数据并将其发送到应用程序。该服务就像应用程序和数据库之间的通信点。该服务通常以 JSON 等对人类不友好的格式向应用程序发送数据,因此您的应用程序需要解析该格式然后显示它。