[英]No suitable driver found MySQL and Java
I'm trying to use eclipse to connect my MySQL database with java but I keep getting this error when I run the code.我正在尝试使用 eclipse 将我的 MySQL 数据库与 java 连接,但是在运行代码时我不断收到此错误。 I've looked up the error and find people saying the jdbc is incorrect but as far as I can tell it's correct.
我查了一下错误,发现有人说 jdbc 不正确,但据我所知,它是正确的。
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/foods at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at s2w6_teamDB.sql/dao.DBConnection.getConnection(DBConnection.java:21) at s2w6_teamDB.sql/dao.FoodDao.<init>(FoodDao.java:23) at s2w6_teamDB.sql/application.Menu.<init>(Menu.java:13) at s2w6_teamDB.sql/application.Application.main(Application.java:5)
java.sql.SQLException:
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at s2w6_teamDB.sql/dao.DBConnection.getConnection(DBConnection.java:21) at s2w6_teamDB.sql/dao.FoodDao.<init>(FoodDao.java:23) at s2w6_teamDB.sql/application.Menu.<init>(Menu.java:13) at s2w6_teamDB.sql/application.Application.main(Application.java:5)
找不到适合 jdbc:mysql://localhost:3306/foods 的驱动程序at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at s2w6_teamDB.sql/dao.DBConnection.getConnection(DBConnection.java:21) at s2w6_teamDB.sql/dao.FoodDao.<init>(FoodDao.java:23) at s2w6_teamDB.sql/application.Menu.<init>(Menu.java:13) at s2w6_teamDB.sql/application.Application.main(Application.java:5)
In application package Application在应用程序包中
package application;
public class Application {
public static void main(String[] args) {
Menu menu = new Menu();
menu.start();
}
}
Menu菜单
package application;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import dao.FoodDao;
import entity.Food;
public class Menu {
private FoodDao foodDao = new FoodDao();
private Scanner scanner = new Scanner(System.in);
private List<String> options = Arrays.asList("Display Foods", "Display a Food", "Create Food", "Update Food", "Delete Food");
public void start() {
String selection = "";
do {
printMenu();
selection = scanner.nextLine();
try {
if (selection.equals("1")) {
displayFoods();
} else if (selection.equals("2")) {
displayFood();
} else if (selection.equals("3")) {
createFood();
} else if (selection.equals("4")) {
updateFood();
} else if (selection.equals("5")) {
deleteFood();
} else if (selection.equals("-1")) {
System.out.println("Exiting...");
} else {
System.out.println("Invalid input");
}
} catch (SQLException e) {
e.printStackTrace();
}
if (!selection.equals("-1")) {
System.out.println("Press enter to continue...");
scanner.nextLine();
}
} while (!selection.equals("-1"));
}
private void printMenu() {
System.out.println("Select an Option: (-1 to exit program)\n------------------------------------------");
for (int i = 0; i < options.size(); i++) {
System.out.println(i + 1 + ") " + options.get(i));
}
}
private void displayFoods() throws SQLException {
List<Food> foods = foodDao.getFoods();
for (Food food : foods) {
System.out.println(food.getFoodId() + ": " + food.getName());
}
}
private void displayFood() throws SQLException {
System.out.print("Enter food name: ");
String name = scanner.nextLine();
Food food = foodDao.getFoodByName(name);
System.out.println(food.getFoodId() + ": " + food.getName());
}
private void createFood() throws SQLException {
System.out.print("Enter new food name: ");
String name = scanner.nextLine();
foodDao.addNewFood(name);
}
private void updateFood() throws SQLException {
System.out.println("Enter food by name to update: ");
String nameOld = scanner.nextLine();
System.out.println("Enter new food name: ");
String nameNew = scanner.nextLine();
foodDao.updateFoodByName(nameNew, nameOld);
}
private void deleteFood() throws SQLException {
System.out.println("Enter food by name to delete: ");
String name = scanner.nextLine();
foodDao.deleteFoodByName(name);
}
}
In dao package DBConnection在 dao 包中 DBConnection
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private final static String URL = "jdbc:mysql://localhost:3306/foods";
private final static String USERNAME = "root";
private final static String PASSWORD = "root";
private static Connection connection;
private static DBConnection instance;
private DBConnection(Connection connection) {
DBConnection.connection = connection;
}
public static Connection getConnection() {
if (instance == null) {
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
instance = new DBConnection(connection);
System.out.println("Connection successful");
} catch (SQLException e) {
e.printStackTrace();
}
}
return DBConnection.connection;
}
}
FoodDao美食道
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import entity.Food;
public class FoodtDao {
private Connection connection;
private final String GET_FOODS_QUERY = "SELECT * FROM foods";
private final String GET_FOOD_BY_NAME_QUERY = "SELECT * FROM foods WHERE name = ?";
private final String CREATE_FOOD_BY_NAME_QUERY = "INSERT INTO foods(name) VALUES (?)";
private final String UPDATE_FOOD_BY_NAME_QUERY = "UPDATE foods SET name = ? WHERE name = ?";
private final String DELETE_FOOD_BY_NAME_QUERY = "DELETE FROM foods WHERE name = ?";
public FoodDao() {
connection = DBConnection.getConnection();
}
public List<Food> getFoods() throws SQLException {
ResultSet rs = connection.prepareStatement(GET_FOODS_QUERY).executeQuery();
List<Food> Foods = new ArrayList<Food>();
while (rs.next()) {
food.add(populateFoods(rs.getInt(1), rs.getString(2)));
}
return foods;
}
private Food populateFoods(int id, String name) {
return new Food(id, name);
}
public Food getFoodByName(String name) throws SQLException {
PreparedStatement ps = connection.prepareStatement(GET_FOOD_BY_NAME_QUERY);
ps.setString(1, name);
ResultSet rs = ps.executeQuery();
rs.next();
return populateFoods(rs.getInt(1), rs.getString(2));
}
public void addNewFood(String name) throws SQLException {
PreparedStatement ps = connection.prepareStatement(CREATE_FOOD_BY_NAME_QUERY);
ps.setString(1, name);
ps.executeUpdate();
}
public void updateFoodByName(String nameNew, String nameOld) throws SQLException {
PreparedStatement ps = connection.prepareStatement(UPDATE_FOOD_BY_NAME_QUERY);
ps.setString(1, nameNew);
ps.setString(2, nameOld);
ps.executeUpdate();
}
public void deleteFoodByName(String name) throws SQLException {
PreparedStatement ps = connection.prepareStatement(DELETE_FOOD_BY_NAME_QUERY);
ps.setString(1, name);
ps.executeUpdate();
}
}
In entity package Food在实体包 Food
package entity;
public class Food {
private int foodId;
private String name;
public Food(int foodId, String name) {
this.foodId = foodId;
this.name = name;
}
public int getFoodId() {
return foodId;
}
public void setFoodId(int foodId) {
this.foodId = foodId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Assuming you're using Maven, you need to add the following to your pom.xml
:假设您正在使用 Maven,您需要将以下内容添加到您的
pom.xml
:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
If you're not using Maven but eg Gradle or Ivy, you can find the equivalent instructions on this page .如果您不使用 Maven,而是使用 Gradle 或 Ivy,您可以在此页面上找到等效的说明。
If you're not using any build system, just download the JAR from that same page and put in on your classpath.如果您没有使用任何构建系统,只需从同一页面下载 JAR 并将其放入您的类路径中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.