kłopot z formatem daty przesyłanym do mysql

0

Cześć, mam problem z formatem daty przesyłanym do mysql. Mam taką metodę w javie:

 java.sql.Date konwertujDate(String sData){
 
        DateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        java.util.Date mojaData = new java.util.Date();
        java.sql.Date sqlData;
 
        try{
            mojaData = format.parse(sData);
            sqlData = new java.sql.Date(mojaData.getTime());
        } catch(Exception e) {
            sqlData = null;
        }
 
 
        return sqlData;
   }  

Zapytanie w mysql zwraca poprawny wynik w gdy datę wpiszę ręcznie z apostrofami po obu stronach '2016-06-10', wartość przekazywana z javy nie ma tych apostrofów. Próbowałem szukać rozwiązań zarówno po stronie javy jak i sql, jednak nic nie przyniosło skutku.

Zapytanie:
SELECT DISTINCT
p.id_pomiar
FROM
ble.pomiar p
INNER JOIN
ble.lampa_elektronowa le
INNER JOIN
ble.typ t ON (t.id_typ = le.id_typ) AND (le.id_lampa = p.id_lampa)
WHERE
(t.typ = TYP) AND (le.nazwa_lampy = NAZWA_LAMPY) AND (p.data_pomiaru = DATA_POMIARU)
ORDER BY
p.id_pomiar ASC;

0

Hej. Wrzuć kod, gdzie wykorzystujesz tę metodę.
W jaki sposób populujesz statement?

0
void uzupelnianieComboBox(String ZAPYTANIE, String NAZWA_LAMPY, String TYP, String DATA, javax.swing.JComboBox jComboBox, String nazwa_zmiennej ){
        
        List<String> zawartoscCB = new ArrayList<>();
        String dana = null;
        java.sql.Date sqlData = konwertujDate(DATA);
        System.out.println(sqlData);
        
        Integer danaint = 0;
        
        
        MojResultSet mrs = new MojResultSet();
        ResultSet rs = mrs.wybierz(ZAPYTANIE, 0, NAZWA_LAMPY, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, TYP, sqlData, 0, 0, 0, 0);
        try{
            while(rs.next()){
                if("nazwa_lampy".equals(nazwa_zmiennej))
                    dana = rs.getString(nazwa_zmiennej);
                if("data_pomiaru".equals(nazwa_zmiennej))
                    dana = rs.getDate(nazwa_zmiennej).toString();
                if ("id_pomiar".equals(nazwa_zmiennej)){
                    danaint = rs.getInt(nazwa_zmiennej);
                    dana = danaint.toString();
                }
                zawartoscCB.add(dana);
                
            }
        } catch(SQLException ex){
            Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        if(zawartoscCB.isEmpty()){
            jComboBox.addItem("brak");
        }
        else{
            for(String b: zawartoscCB){
                jComboBox.addItem(b);
            }
        }
        zawartoscCB.clear();
   }  
package BLE;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class MojResultSet {
    
    Connection conn = null;
    ResultSet rs = null;
    CallableStatement pstmt = null;
    String polaczenieURL = "jdbc:mysql://localhost:3306/ble?zeroDateTimeBehavior=convertToNull&useSSL=false";
    String jkomunikat;
    
    
    public ResultSet wybierz(String v1, int v2, String v3, int v4, int v5, int v6, float v7, float v8, float v9, float v10, float v11, float v12, int v13, String v14, 
            java.sql.Date v15, int v16, int v17, int v18, int v19){
        
        try{
            conn = DriverManager.getConnection(polaczenieURL,"root","1234");
            Class.forName("com.mysql.jdbc.Driver"); // ustawienie sterownika mysql
            pstmt = conn.prepareCall("{call ble.procedura_lampa(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
            pstmt.setString(1, v1);
            pstmt.setInt(2, v2);
            pstmt.setString(3, v3);
            pstmt.setInt(4, v4);
            pstmt.setInt(5, v5);
            pstmt.setInt(6, v6);
            pstmt.setFloat(7, v7);
            pstmt.setFloat(8, v8);
            pstmt.setFloat(9, v9);
            pstmt.setFloat(10, v10);
            pstmt.setFloat(11, v11);
            pstmt.setFloat(12, v12);
            pstmt.setInt(13, v13);
            pstmt.setString(14, v14);
            pstmt.setDate(15, v15);
            pstmt.setInt(16, v16);
            pstmt.setInt(17, v17);
            pstmt.setInt(18, v18);
            pstmt.setInt(19, v19);
            pstmt.setString(20, "");
               
            rs = pstmt.executeQuery();
               
            pstmt.registerOutParameter(20, java.sql.Types.VARCHAR); 
            String jkomunikat = pstmt.getString(20);
            if(jkomunikat != null && !jkomunikat.isEmpty()){
                JOptionPane.showMessageDialog(null, jkomunikat);
                 
            }  
        } catch(SQLException wyjatek){
            System.out.println("SQLException: " + wyjatek.getMessage());
            System.out.println("SQLState: " + wyjatek.getSQLState());
            System.out.println("VendorError: " + wyjatek.getErrorCode());   
        } catch(ClassNotFoundException wyjatek){
            System.out.println("Problem ze sterownikiem");
        }
         
        return rs;
    }
    
    public void zamknijPolaczenie() throws SQLException {
        conn.close();
    }
    public void zamknijCallableStatement() throws SQLException {
        pstmt.close();
    }

    public String zwrocKomunikat(){
        return jkomunikat;
    }

    
    
}

od razu dziękuję za odzew :)

0

Jako parametr v16 przekazujesz 0.
A metodzie robisz z tego datę.

Generalnie "gratuluję" nazewnictwa.
Nie nazywaj tak parametrów (na honor!), bo potem masz takie problemy.
Poczytaj proszę o konwencjach nazewniczych w javie, bo oczy bolą od czytania i łatwo popełnić takie błędy.
Poza tym mieszasz warstwy, warstwa danych pomieszana z widokiem - JOptionPane w warstwie danych...
Nie połapiesz się w tym w przyszłości, jeśli program będzie miał więcej klas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1