简体   繁体   English

没有找到合适的驱动程序 MySQL 和 Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM