Eu to tentando rodar um projeto mas esta dando esse erro, mas não consigo identificar como soluciona-lo, aqui o erro
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
WARNING: row index is bigger than sorter’s row count. Most likely this is a wrong sorter usage.
Mas sei de que classe é, fui dar uma olhada mas não achei nada errado, alguém poderia me explicar por favor
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
public class Task {
private int id;
private int idProject;
private String name;
private String notes;
private String description;
private boolean isCompleted;
private Date deadline;
private Date createdAt;
private Date updatedAt;
private static final Logger LOG = Logger.getLogger(Task.class.getName());
public Task(int id, int idProject, String name, String notes, String description, boolean isCompleted, Date deadline, Date createdAt, Date updatedAt) {
this.id = id;
this.idProject = idProject;
this.name = name;
this.notes = notes;
this.description = description;
this.isCompleted = isCompleted;
this.deadline = deadline;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Task(){
this.isCompleted = false;
this.createdAt = new Date();
this.updatedAt = new Date();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getIdProject() {
return idProject;
}
public void setIdProject(int idProject) {
this.idProject = idProject;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public boolean isIsCompleted() {
return isCompleted;
}
public void setIsCompleted(boolean isCompleted) {
this.isCompleted = isCompleted;
}
public Date getDeadline() {
return deadline;
}
public void setDeadline(Date deadline) {
this.deadline = deadline;
}
public Date getCreatedAt() {
if(createdAt == null){
return new Date();
}
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Date getUpdatedAt() {
if(updatedAt == null){
return new Date();
}
return updatedAt;
}
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return this.name;
}
}
Atualiza seu código para usar o driver que está sendo mostrado no erro. Se traduzir a mensagem irá entender o problema.
Colega, eu traduzi, por isso que eu estou aqui, não sei como faz isso. Se só traduzisse fosse uma coisa tão obvia, resolveria o problema e nem pediria ajuda aqui
Posta o código onde você inicializa o driver do banco.
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ConnectionFactory {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/todo-app";
public static final String USER = "root";
public static final String PASS = "";
public static Connection getConnection() {
try {
Class.forName(DRIVER);
return DriverManager.getConnection(URL, USER, PASS);
} catch (Exception ex){
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection){
try {
if (connection != null) {
connection.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection, PreparedStatement statement){
try {
if (connection != null) {
connection.close();
}
if (statement != null){
statement.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection, PreparedStatement statement, ResultSet resultSet){
try {
if (connection != null) {
connection.close();
}
if (statement != null){
statement.close();
}
if (resultSet != null){
resultSet.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
Perfeito, agora vamos ao seu erro:
Loading class 'com.mysql.jdbc.Driver'
.
This is deprecated.
The new driver class is 'com.mysql.cj.jdbc.Driver'
A mensagem diz que:
Carregou a classe 'com.mysql.jdbc.Driver'
,
Que essa classe está obsoleta,
Que a nova classe a ser utilizada é 'com.mysql.cj.jdbc.Driver'
.
Ou seja, no seu código tem que alterar a constante abaixo:
public static final String DRIVER = "com.mysql.jdbc.Driver";
Dessa forma:
public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
Só complementando, hoje em dia não há mais necessidade de carregar a classe do driver. Basta chamar o getConnection
de DriverManager
que a mágica acontece. @insany_boy baixe a última versão do driver, coloque no projeto e atualize seu código para:
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ConnectionFactory {
public static final String URL = "jdbc:mysql://localhost:3306/todo-app";
public static final String USER = "root";
public static final String PASS = "";
public static Connection getConnection() {
try {
return DriverManager.getConnection(URL, USER, PASS);
} catch (Exception ex){
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection){
try {
if (connection != null) {
connection.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection, PreparedStatement statement){
try {
if (connection != null) {
connection.close();
}
if (statement != null){
statement.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
public static void closeConnection(Connection connection, PreparedStatement statement, ResultSet resultSet){
try {
if (connection != null) {
connection.close();
}
if (statement != null){
statement.close();
}
if (resultSet != null){
resultSet.close();
}
} catch (Exception ex) {
throw new RuntimeException("Erro de conexão com o banco de dados", ex);
}
}
}
1 curtida
Você leu e ignorou-a então, amigo. Elabore melhor sua pergunta da próxma vez que assim não perdemos tempo.
E complementando o complemento, a partir do Java 7 vc não precisa mais fechar tudo manualmente, podendo usar o try-with-resources. Exemplo adaptado daqui:
try (Connection con = DriverManager.getConnection(dadosDaConexao);
PreparedStatement ps = con.prepareStatement(sql)) {
ps.setInt(1, userId); // setar os parâmetros da query
try (ResultSet rs = ps.executeQuery()) {
while(rs.next()) {
// usar o ResultSet (por exemplo, rs.getInt("id"), etc)
}
}
} catch (SQLException e) {
e.printStackTrace(); // mostrar mensagem de erro, etc
}
Ou seja, ao final deste bloco, os recursos (ResultSet
, PreparedStatement
e Connection
) serão automaticamente fechados. Se ocorrer algum erro, será capturado pelo catch
.
Para mais detalhes sobre o funcionamento do try-with-resources, veja aqui.
E na verdade, hoje em dia em muitas aplicações, usa-se algum framework que abstrai o gerenciamento das conexões, sem precisar abrir e fechar explicitamente. Claro que para fins de aprendizado é importante fazer as coisas manualmente para entender como funciona. Mas em muitos projetos vc não vai precisar fazer isso.
1 curtida