Cześć!
Mam kolejny problem z pewnym kursem Javy (kurs jest z 2012 XD). Kiedy chcę wysłać zapytanie UPDATE do bazy danych MySQL to wywala mi błąd w następującym kodzie:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
abstract public class Query
{
private static final String JDBC_URL = "jdbc:mysql://localhost/Loty?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
protected String sql;
protected Connection connection;
private Statement statement;
protected ResultSet resultSet;
public Query()
{
this("");
}
public void execute()
{
execute(new HashMap<String, Object>());
}
public Query(String sql)
{
this.sql = sql;
}
public void execute(Map<String, Object> context)
{
try
{
connectToDatabase();
transformSql(context);
executeSql();
process(context);
close();
} catch (ClassNotFoundException | SQLException e)
{
e.printStackTrace();
}
}
protected void transformSql(Map<String, Object> context){}
private void close() throws SQLException
{
// TODO Auto-generated method stub
resultSet.close();
statement.close();
connection.close();
}
abstract protected void process(Map<String, Object> context) throws SQLException;{}
private void executeSql() throws SQLException
{
statement = connection.createStatement();
if(sql == null || sql.trim().equals(""))
{
return;
}
resultSet = statement.executeQuery(sql);
}
private void connectToDatabase() throws ClassNotFoundException, SQLException
{
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(JDBC_URL,"root", "");
}
}
package model2;
import java.util.Date;
public class Loty
{
private long id;
private String skad;
private String dokad;
private Date dataWylotu;
private int cena;
private int iloscMiejscBiznes;
private int iloscMiejscEkonomicznych;
public Loty(long id, String skad, String dokad, Date date, int cena, int iloscMiejscBiznes,
int iloscMiejscEkonomicznych)
{
super();
this.id = id;
this.skad = skad;
this.dokad = dokad;
this.dataWylotu = date;
this.cena = cena;
this.iloscMiejscBiznes = iloscMiejscBiznes;
this.iloscMiejscEkonomicznych = iloscMiejscEkonomicznych;
}
@Override
public String toString()
{
return "Loty [id=" + id + ", skad=" + skad + ", dokad=" + dokad + ", dataWylotu=" + dataWylotu + ", cena="
+ cena + ", iloscMiejscBiznes=" + iloscMiejscBiznes + ", iloscMiejscEkonomicznych="
+ iloscMiejscEkonomicznych + "]";
}
public long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
public String getSkad()
{
return skad;
}
public void setSkad(String skad)
{
this.skad = skad;
}
public String getDokad()
{
return dokad;
}
public void setDokad(String dokad)
{
this.dokad = dokad;
}
public Date getDataWylotu()
{
return dataWylotu;
}
public void setDataWylotu(Date dataWylotu)
{
this.dataWylotu = dataWylotu;
}
public int getCena()
{
return cena;
}
public void setCena(int cena)
{
this.cena = cena;
}
public int getIloscMiejscBiznes()
{
return iloscMiejscBiznes;
}
public void setIloscMiejscBiznes(int iloscMiejscBiznes)
{
this.iloscMiejscBiznes = iloscMiejscBiznes;
}
public int getIloscMiejscEkonomicznych()
{
return iloscMiejscEkonomicznych;
}
public void setIloscMiejscEkonomicznych(int iloscMiejscEkonomicznych)
{
this.iloscMiejscEkonomicznych = iloscMiejscEkonomicznych;
}
}
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import model2.Loty;
public class AktualizujLot extends Query
{
@Override
protected void process(Map<String, Object> context) throws SQLException
{
Loty lot = (Loty) context.get("lot");
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE lotyKurs SET skad = ?, dokad = ?, dataWylotu = ?, cena = ?" + "WHERE id = ?");
preparedStatement.setString(1, lot.getSkad());
preparedStatement.setString(2, lot.getDokad());
preparedStatement.setDate(3, (java.sql.Date) new Date(lot.getDataWylotu().getTime()));
preparedStatement.setInt(4, lot.getCena());
preparedStatement.setInt(5, (int) lot.getId());
preparedStatement.execute();
}
public static void main(String[] args) throws ParseException
{
AktualizujLot akutualizujLot = new AktualizujLot();
Map<String, Object> context = new HashMap<String, Object>();
Loty lot = new Loty(1, "Londyn", "Warszawa", new SimpleDateFormat("yyyy-MM-dd").parse("2012-02-01"), 1234, 20, 120);
context.put("lot", lot);
akutualizujLot.execute(context);
}
}
Błąd jest następujący:
Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
at AktualizujLot.process(AktualizujLot.java:27)
at Query.execute(Query.java:40)
at AktualizujLot.main(AktualizujLot.java:42)
Próbowałem z metodą która powinna konwertować ale nic nie pomagało, metoda znajduję się poniżej:
private static java.sql.Date convertUtilToSql(java.util.Date uDate) {
java.sql.Date sDate = new java.sql.Date(uDate.getTime());
return sDate;
}