java.lang.ClassNotFoundException: com.mysql.jbdc.Driver с .jar в библиотеках [дубликат]

Большинство ответов здесь дают полезные советы, когда у вас есть одна операция async, но иногда это возникает, когда вам нужно выполнить асинхронную операцию для каждой записи в массиве или другом списке подобная структура. Искушение состоит в том, чтобы сделать это:

// WRONG
var results = [];
theArray.forEach(function(entry) {
    doSomethingAsync(entry, function(result) {
        results.push(result);
    });
});
console.log(results); // E.g., using them, returning them, etc.

Пример:

// WRONG
var theArray = [1, 2, 3];
var results = [];
theArray.forEach(function(entry) {
    doSomethingAsync(entry, function(result) {
        results.push(result);
    });
});
console.log("Results:", results); // E.g., using them, returning them, etc.

function doSomethingAsync(value, callback) {
    console.log("Starting async operation for " + value);
    setTimeout(function() {
        console.log("Completing async operation for " + value);
        callback(value * 2);
    }, Math.floor(Math.random() * 200));
}
.as-console-wrapper {
  max-height: 100% !important;
}

Причина, 't работа заключается в том, что обратные вызовы из doSomethingAsync еще не запущены к тому моменту, когда вы пытаетесь использовать результаты.

Итак, если у вас есть массив (или список какого-то типа) и хотите выполнять асинхронные операции для каждой записи, у вас есть два варианта: выполнять операции параллельно (перекрывающиеся) или последовательно (последовательно последовательно).

Параллельный

Вы могут запускать все из них и отслеживать количество обратных вызовов, которые вы ожидаете, а затем использовать результаты, когда вы получили много обратных вызовов:

var results = [];
var expecting = theArray.length;
theArray.forEach(function(entry, index) {
    doSomethingAsync(entry, function(result) {
        results[index] = result;
        if (--expecting === 0) {
            // Done!
            console.log("Results:", results); // E.g., using the results
        }
    });
});

Пример:

var theArray = [1, 2, 3];
var results = [];
var expecting = theArray.length;
theArray.forEach(function(entry, index) {
    doSomethingAsync(entry, function(result) {
        results[index] = result;
        if (--expecting === 0) {
            // Done!
            console.log("Results:", results); // E.g., using the results
        }
    });
});

function doSomethingAsync(value, callback) {
    console.log("Starting async operation for " + value);
    setTimeout(function() {
        console.log("Completing async operation for " + value);
        callback(value * 2);
    }, Math.floor(Math.random() * 200));
}
.as-console-wrapper {
  max-height: 100% !important;
}

(Мы могли бы покончить с expecting и просто использовать results.length === theArray.length, но это оставляет нам открытым возможность того, что theArray изменяется, пока вызовы выдающиеся ...)

Обратите внимание, как мы используем index из forEach, чтобы сохранить результат в results в том же положении, что и запись это относится, даже если результаты a (поскольку асинхронные вызовы не обязательно завершаются в том порядке, в котором они были запущены).

Но что, если вам нужно вернуть те результаты от функции? Как указывали другие ответы, вы не можете; вы должны принять вашу функцию и вызвать обратный вызов (или вернуть Promise ). Вот вариант обратного вызова:

function doSomethingWith(theArray, callback) {
    var results = [];
    var expecting = theArray.length;
    theArray.forEach(function(entry, index) {
        doSomethingAsync(entry, function(result) {
            results[index] = result;
            if (--expecting === 0) {
                // Done!
                callback(results);
            }
        });
    });
}
doSomethingWith(theArray, function(results) {
    console.log("Results:", results);
});

Пример:

function doSomethingWith(theArray, callback) {
    var results = [];
    var expecting = theArray.length;
    theArray.forEach(function(entry, index) {
        doSomethingAsync(entry, function(result) {
            results[index] = result;
            if (--expecting === 0) {
                // Done!
                callback(results);
            }
        });
    });
}
doSomethingWith([1, 2, 3], function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value, callback) {
    console.log("Starting async operation for " + value);
    setTimeout(function() {
        console.log("Completing async operation for " + value);
        callback(value * 2);
    }, Math.floor(Math.random() * 200));
}
.as-console-wrapper {
  max-height: 100% !important;
}

Или вот версия, возвращающая Promise вместо:

function doSomethingWith(theArray) {
    return new Promise(function(resolve) {
        var results = [];
        var expecting = theArray.length;
        theArray.forEach(function(entry, index) {
            doSomethingAsync(entry, function(result) {
                results[index] = result;
                if (--expecting === 0) {
                    // Done!
                    resolve(results);
                }
            });
        });
    });
}
doSomethingWith(theArray).then(function(results) {
    console.log("Results:", results);
});

Конечно, если doSomethingAsync передал нам ошибки, мы использовали бы reject, чтобы отклонить обещание, когда мы получили сообщение об ошибке.)

Пример:

function doSomethingWith(theArray) {
    return new Promise(function(resolve) {
        var results = [];
        var expecting = theArray.length;
        theArray.forEach(function(entry, index) {
            doSomethingAsync(entry, function(result) {
                results[index] = result;
                if (--expecting === 0) {
                    // Done!
                    resolve(results);
                }
            });
        });
    });
}
doSomethingWith([1, 2, 3]).then(function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value, callback) {
    console.log("Starting async operation for " + value);
    setTimeout(function() {
        console.log("Completing async operation for " + value);
        callback(value * 2);
    }, Math.floor(Math.random() * 200));
}
.as-console-wrapper {
  max-height: 100% !important;
}

(Или, альтернативно, вы можете сделать обертку для doSomethingAsync, который возвращает обещание, а затем сделайте следующее ...)

Если doSomethingAsync дает вам Promise , вы можете использовать Promise.all :

function doSomethingWith(theArray) {
    return Promise.all(theArray.map(function(entry) {
        return doSomethingAsync(entry, function(result) {
            results.push(result);
        });
    }));
}
doSomethingWith(theArray).then(function(results) {
    console.log("Results:", results);
});

Пример:

function doSomethingWith(theArray) {
    return Promise.all(theArray.map(function(entry) {
        return doSomethingAsync(entry, function(result) {
            results.push(result);
        });
    }));
}
doSomethingWith([1, 2, 3]).then(function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value) {
    console.log("Starting async operation for " + value);
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("Completing async operation for " + value);
            resolve(value * 2);
        }, Math.floor(Math.random() * 200));
    });
}
.as-console-wrapper {
  max-height: 100% !important;
}

Обратите внимание, что Promise.all решает свое обещание с помощью массива результатов всех обещаний, которые вы даете ему, когда все они разрешены, или отвергает его обещание, когда первый обещаний, которые вы ему даете, отклоняет.

Серия

Предположим, вы не хотите, чтобы операции были параллельны? Если вы хотите запускать их один за другим, вам нужно дождаться завершения каждой операции до начала следующего. Вот пример функции, которая делает это, и вызывает обратный вызов с результатом:

function doSomethingWith(theArray, callback) {
    var results = [];
    doOne(0);
    function doOne(index) {
        if (index < theArray.length) {
            doSomethingAsync(theArray[index], function(result) {
                results.push(result);
                doOne(index + 1);
            });
        } else {
            // Done!
            callback(results);
        }
    }
}
doSomethingWith(theArray, function(results) {
    console.log("Results:", results);
});

(Поскольку мы выполняем работу последовательно, мы можем просто использовать results.push(result), так как мы знаю, что мы не получим результаты не в порядке. В приведенном выше примере мы могли бы использовать results[index] = result;, но в некоторых из следующих примеров у нас нет индекса для использования.)

Пример:

function doSomethingWith(theArray, callback) {
    var results = [];
    doOne(0);
    function doOne(index) {
        if (index < theArray.length) {
            doSomethingAsync(theArray[index], function(result) {
                results.push(result);
                doOne(index + 1);
            });
        } else {
            // Done!
            callback(results);
        }
    }
}
doSomethingWith([1, 2, 3], function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value, callback) {
    console.log("Starting async operation for " + value);
    setTimeout(function() {
        console.log("Completing async operation for " + value);
        callback(value * 2);
    }, Math.floor(Math.random() * 200));
}
.as-console-wrapper {
  max-height: 100% !important;
}

(Или снова создайте обертку для doSomethingAsync, которая дает вам обещание и выполните ниже ...)

Если doSomethingAsync дает вам обещание, если вы можете использовать синтаксис ES2017 + (возможно, с транспилером, например Babel ), вы можете использовать функцию async с помощью for-of и await :

async function doSomethingWith(theArray) {
    const results = [];
    for (const entry of theArray) {
        results.push(await doSomethingAsync(entry));
    }
    return results;
}
doSomethingWith(theArray).then(results => {
    console.log("Results:", results);
});

Пример:

async function doSomethingWith(theArray) {
    const results = [];
    for (const entry of theArray) {
        results.push(await doSomethingAsync(entry));
    }
    return results;
}
doSomethingWith([1, 2, 3]).then(function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value) {
    console.log("Starting async operation for " + value);
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("Completing async operation for " + value);
            resolve(value * 2);
        }, Math.floor(Math.random() * 200));
    });
}
.as-console-wrapper {
  max-height: 100% !important;
}

Если вы не можете использовать синтаксис ES2017 + (пока), вы можете использовать вариацию на Обещают уменьшить шаблон (это сложнее, чем обычное сокращение Promise, потому что мы не передаем результат от одного к другому, а вместо gat

function doSomethingWith(theArray) {
    return theArray.reduce(function(p, entry) {
        return p.then(function(results) {
            return doSomethingAsync(entry).then(function(result) {
                results.push(result);
                return results;
            });
        });
    }, Promise.resolve([]));
}
doSomethingWith(theArray).then(function(results) {
    console.log("Results:", results);
});

Пример:

function doSomethingWith(theArray) {
    return theArray.reduce(function(p, entry) {
        return p.then(function(results) {
            return doSomethingAsync(entry).then(function(result) {
                results.push(result);
                return results;
            });
        });
    }, Promise.resolve([]));
}
doSomethingWith([1, 2, 3]).then(function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value) {
    console.log("Starting async operation for " + value);
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("Completing async operation for " + value);
            resolve(value * 2);
        }, Math.floor(Math.random() * 200));
    });
}
.as-console-wrapper {
  max-height: 100% !important;
}

.. , который менее громоздк с функциями стрелок ES2015 + :

function doSomethingWith(theArray) {
    return theArray.reduce((p, entry) => p.then(results => doSomethingAsync(entry).then(result => {
        results.push(result);
        return results;
    })), Promise.resolve([]));
}
doSomethingWith(theArray).then(results => {
    console.log("Results:", results);
});

Пример:

function doSomethingWith(theArray) {
    return theArray.reduce((p, entry) => p.then(results => doSomethingAsync(entry).then(result => {
        results.push(result);
        return results;
    })), Promise.resolve([]));
}
doSomethingWith([1, 2, 3]).then(function(results) {
    console.log("Results:", results);
});

function doSomethingAsync(value) {
    console.log("Starting async operation for " + value);
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("Completing async operation for " + value);
            resolve(value * 2);
        }, Math.floor(Math.random() * 200));
    });
}
.as-console-wrapper {
  max-height: 100% !important;
}

65
задан naXa 11 March 2015 в 14:46
поделиться

15 ответов

Если вы получили ошибку в своей IDE (ошибка времени компиляции), вам нужно добавить свой jar-файл mysql-коннектора в свои библиотеки и добавить его в свою ссылочную библиотеку проекта.

Если вы получите эту ошибку при ее запуске, а затем, вероятно, потому, что вы не включили JAR-файл mysql-connector в папку lib вашего веб-сервера.

Добавьте mysql-connector-java-5.1.25-bin.jar в свой путь к классам, а также в каталог lib вашего веб-сервера , Путь Tomcat lib приведен в качестве примера Tomcat 6.0\lib

46
ответ дан Asad 31 August 2018 в 13:54
поделиться

Исключение также может возникать из-за того, что путь класса не определен.

После нескольких часов исследований и буквально проходящих сотни страниц, проблема заключалась в том, что путь к классу библиотеки не был определен.

Задайте путь класса следующим образом на вашей машине Windows

set classpath=path\to\your\jdbc\jar\file;.
0
ответ дан Harsh 31 August 2018 в 13:54
поделиться

проверить jar (mysql-connector-java-bin) в вашем пути к классу скачать здесь

7
ответ дан KhAn SaHaB 31 August 2018 в 13:54
поделиться

В проекте в папку «Библиотеки» -> щелкните правой кнопкой мыши -> Добавить библиотеку -> Mysqlconnector 5.1

2
ответ дан Kika_Fortez 31 August 2018 в 13:54
поделиться

Для IntelliJ Idea перейдите в свою структуру проекта (файл, структуру проекта) и добавьте файл .jar-соединителя mysql в свою глобальную библиотеку. После этого щелкните правой кнопкой мыши по нему и выберите «Добавить в модули». Hit Apply / OK, и вы должны быть добрым.

0
ответ дан Michael Sims 31 August 2018 в 13:54
поделиться

Это связано с тем, что папка WEB-INF не существует в местоположении в подкаталоге в ошибке. Вы либо скомпилируете приложение для использования папки WEB-INF в public_html ИЛИ скопируете папку WEB-INF в подпапку, как в приведенной выше ошибке.

1
ответ дан MilesWeb 31 August 2018 в 13:54
поделиться

В вашем пути к классам вам понадобится включить jar для MySQL MySQL Connector Jar .

Если вы используете Eclipse: Как добавить зависимые библиотеки в Eclipse

Если вы используете командную строку, укажите путь к контейнеру драйвера, используя параметр -cp java.

java -cp C:\lib\* Main
11
ответ дан Narendra Pathai 31 August 2018 в 13:54
поделиться

Для проектов Gradle вам нужна зависимость от MySQL Java Connector :

dependencies {
    compile 'mysql:mysql-connector-java:6.0.+'
}
11
ответ дан naXa 31 August 2018 в 13:54
поделиться

Тривиально, как может показаться в моем случае версия netbeans версии maven 7.2.1 была другой. В проекте есть папка, называемая зависимостями. Щелкните правой кнопкой мыши, а затем появится всплывающее окно, в котором вы можете искать пакеты. В области запроса put

mysql-connector

Он выведет совпадения (кажется, он делает это против некоторого репозитория). Дважды щелкните, затем установите.

1
ответ дан Paul 31 August 2018 в 13:54
поделиться

Я понял вашу проблему, добавив эту зависимость в ваш pom.xml, ваша проблема будет решена,

https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1 0,38

0
ответ дан Ravi Kumar Ravanam 31 August 2018 в 13:54
поделиться

Если вы используете tomcat, а затем вместе с каталогом проектов, вы также должны скопировать файл jar-файла соединителя базы данных в tomcat / lib. это сработало для меня

0
ответ дан Santosh Kadam 31 August 2018 в 13:54
поделиться

API JDBC в основном состоит из интерфейсов, которые работают независимо от любой базы данных. Для каждой базы данных, которая реализует API JDBC, требуется конкретный драйвер базы данных.

Сначала загрузите баннер соединителя MySQL с сайта www.mysql.com, затем:

Right Click the project -- > build path -- > configure build path

На вкладке библиотеки нажмите Add External Jar и выберите свою банку.

8
ответ дан Sathish SR 31 August 2018 в 13:54
поделиться

Разъем драйвера не находится в вашем пути сборки. Настройте путь сборки и укажите его в «mysql-connector-java-5.1.25-bin.jar» (проверьте версию, которую вы используете). В качестве альтернативы вы можете использовать maven: D

2
ответ дан shikjohari 31 August 2018 в 13:54
поделиться

Для проектов на основе Maven вам нужна зависимость.

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
</dependency>
2
ответ дан tomtomssi 31 August 2018 в 13:54
поделиться

Кажется, что библиотека подключений mysql не включена в проект. Решите проблему, следуя одному из предложенных решений:

  • MAVEN PROJECTS SOLUTION

Добавьте зависимость mysql-коннектора к файлу проекта pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

Здесь вы все версии: https://mvnrepository.com/artifact/mysql/mysql-connector-java

  • ALL РЕШЕНИЕ ПРОЕКТОВ

Добавьте библиотеку jar вручную в проект.

Щелкните правой кнопкой мыши проект -> путь сборки -> настроить путь сборки

В Libraries Tab нажмите Add External Jar и Select свою банку.

Здесь вы можете найти zip для mysql-коннектора здесь

  • Объяснение:

При создании проекта java выдает вам исключение, потому что файл (класс com.mysql.jdbc.Driver) из библиотеки подключений mysql не является найденный. Решение добавляет библиотеку в проект, а java найдет com.mysql.jdbc.Driver

102
ответ дан tremendows 31 August 2018 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: