UTF-8 działa na Eclipse, ale nie działa z eksportowanym słoikiem

Pracuję nad aplikacją komputerową zJava Swing i zapisz dane na aMySQL baza danych w języku arabskim z użyciemUTF-8.

Kiedy uruchomię aplikację zEclipse wszystko działa dobrze, ale kiedy kończę i eksportuję swoją pracę dorunnable jar za pomocąEclipse export, nic nie wiąże się z bazą danych.

Logowanie nie działaKiedy próbuję zapisać datę w mojej bazie danych wArabic dostaję?????? w bazie danych

Jednak, jak wspomniałem wcześniej, wszystko działa poprawnie, gdy go uruchomięEclipse. Czy ktoś może mi pomóc, muszę dostarczyć swoją pracę

Oto przykład mojej pracy:

W ten sposób łączę się z moją bazą danych:

static Connection conn = null;
static String url      = "jdbc:mysql://localhost:3306/";
static String dbName   = "gestiondestock";
static String driver   = "com.mysql.jdbc.Driver";
static String userName = "root"; 
static String password = "";
static String unicode= "?useUnicode=yes&characterEncoding=UTF-8";

To jest kod dlabuttonLogin ActionPerformed:

private void buttonLogin_ActionPerformed(ActionEvent e) {
    if(textField.getText().equals("") || passwordField.getText().equals(""))
    {
       jd =new JDialog();
        jd.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        jd.setTitle("الرجاء ملء الفراغ");
        jd.setVisible(true);
        jd.setLocationRelativeTo(null);
        jd.setSize(400,200);
        jd.setContentPane(buildpp());   
    }
    else{
        if(textField.getText().equals("Adel91") || passwordField.getText().equals("Adel91"))
        {
            CardLayout cardLayout = (CardLayout) contentPane.getLayout();
            cardLayout.show(contentPane, "Panel_Home");
        }
        else{
            try{
                String usernamena = new String(textField.getText());
                String passwordlogin = new String(passwordField.getText());

                MessageDigest mdEnc4 = MessageDigest.getInstance("MD5");

                mdEnc4.update(passwordlogin.getBytes(), 0, passwordlogin.length());
                String passwordlogindmd5 = new BigInteger(1, mdEnc4.digest()).toString(16); // Encrypted 

                try{
                    Class.forName(driver).newInstance();
                    conn = DriverManager.getConnection(url+dbName+unicode,userName,password);
                    Statement st = conn.createStatement();

                    ResultSet res = st.executeQuery("SELECT username,password FROM client ");

                    String user = null;
                    String pass = null;

                    if(res.next()) {
                        user = new String( res.getBytes(1), "UTF-8");
                        pass =  new String( res.getBytes(2), "UTF-8");
                    }

                    if(usernamena.equals(user)&&passwordlogindmd5.equals(pass)){
                        CardLayout cardLayout = (CardLayout) contentPane.getLayout();
                        cardLayout.show(contentPane, "Panel_Home");
                    }
                    else{
                        jd =new JDialog();
                        jd.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                        jd.setTitle("كلمة المرور والإسم غير مناسبان");
                        jd.setVisible(true);
                        jd.setLocationRelativeTo(null);
                        jd.setSize(430,200);
                        jd.setContentPane(buildwronglogin());
                    }
                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            } catch (NoSuchAlgorithmException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } 
        }
    }   
}

Wynikowe zmienne MySQL przy użyciu tego cmd: SHOW VARIABLES LIKE 'c%'; abd każdy cien jest uts8

 SLaks28 sie 2012, 01:44
Jakie masz błędy?
 SLaks28 sie 2012, 02:05
Nie używaj MD5. Powinieneś użyć bezpiecznego, solonego, iterowanego skrótu. Korzystnie scrypt, bcrypt lub PBKDFv2.
 SLaks28 sie 2012, 02:33
Twoja logika nie powiedzie się, jeśli masz więcej niż jednego użytkownika. Użyj klauzuli WHERE z parametrami.
 SLaks28 sie 2012, 02:15
Wiem, że problem nie dotyczy MD5. Jednak gdy twoja baza danych zostanie zhakowana, problem będzie dotyczył MD5.Nie używaj MD5.
 Adel Bachene28 sie 2012, 02:35
@Slaks Mam tylko jednego użytkownika i działa, gdy uruchamiam aplikację z Eclipse Chcę mieć jakiś pomysł, dlaczego kiedy eksportuję go do pliku jar, nie działa ??????
 Adel Bachene28 sie 2012, 01:56
@veer ok będę edytował i dodawał przykład, jak go przekazać
 Sujay28 sie 2012, 02:21
@ user1417996: To nie jest temat, ale następnym razem, gdy opublikujesz swój kod, upewnij się, że jest poprawnie sformatowany. Zwłaszcza gdy publikujesz znaczny rozmiar kodu :)
 Adel Bachene28 sie 2012, 03:42
Thaaank za evey za pomoc i poradę ^^
 Adel Bachene28 sie 2012, 02:01
@veer coś złego w moim kodzie?
 Bruce Martin28 sie 2012, 03:04
Przydałby się komunikat o błędzie, korzystasz również z tej samej wersji Java podczas uruchamiania z Eclipse i samodzielnego. Niektóre zestawy znaków znajdują się w pliku Charset.jar (a nie w runtime.jar). Jeśli wystąpi problem / brak pliku charset.jar w verson of java, aby uruchomić jar, otrzymasz ten typ problemu
 Adel Bachene28 sie 2012, 02:17
@Slaks ok dziękuję o tym, ale czy masz jakiś pomysł na mój problem, plz potrzebuję pomocy na ten temat
 Adel Bachene28 sie 2012, 03:24
@BruceMartin sir Nie dostaję żadnego błędu podczas uruchamiania go z eclipse i zapisuję dane w mojej bazie danych znalazłem dane w tabeli w ut8, ale kiedy zapisuję dane z pliku jar znajduję tylko w bazie danych? ????????
 Adel Bachene28 sie 2012, 02:32
@Sujay dziękuję za pomoc sir, będę pewien następnym razem
 Adel Bachene28 sie 2012, 02:08
@SLaks powiedziałem, gdy uruchamiam go z exlipe, wszystko działa. Nie ma problemu z MD5
 Cole Johnson28 sie 2012, 01:50
To pytanie jest okropne. Potrzebujemy kodu, błędów, czegokolwiek! Plus wymaga formowania.
 oldrinb28 sie 2012, 01:52
Jak można oczekiwać, że ktoś może ci pomóc bez co najmniej fragmentu kodu?
 Adel Bachene28 sie 2012, 01:50
@SLaks, gdy używam eksportowanego jar i cant zrobić logowanie, ale kiedy go uruchomić z eclipse mogę, więc usunąłem login i próbuję zapisać dane z wyeksportowanego słoika znaleźć w bazie danych ?????? ale kiedy uruchomię go z eclipse, mogę zapisać dane
 Adel Bachene28 sie 2012, 02:07
@SLaksy, gdy wstawiam dane, nie używam MD5, ale wydaje się, że to !!

questionAnswers(2)

java -Dfile.encoding="UTF-8" -jar JarFile.jar

 Abdeljalil_hMi12 sie 2016, 23:29
otwórz terminal i wklej tę linię {zmień [JarFile.jar] swoją ścieżką do .jar}
 alexander16 lis 2016, 17:05
A bez terminala oznacza to podwójne kliknięcie?
 Dieter Meemken20 maj 2016, 12:33
Czy możesz wyjaśnić trochę więcej?
QuestionSolution

nigdy nie należy konwertować ciągu znaków na bajty przy użyciu nieokreślonego zestawu znaków (tutaj używasz domyślnej platformy, która może się zmienić):

passwordlogin.getBytes()

Ponieważ dotyczy to bajtów, które zamierzasz hashować, których zestaw znaków nie ma znaczenia, o ile jest spójny. coś jakpasswordlogin.getBytes("UTF-8") wydawałoby się rozsądne.

Jest to z pewnością problematyczny fragment kodu:

                if(res.next()) {
                    user = new String( res.getBytes(1), "UTF-8");
                    pass =  new String( res.getBytes(2), "UTF-8");
                }

zdaje się sugerować, że gdzieś masz awarię zestawu znaków.

Na koniec, jak prowadzisz swój słoik? Czy określasz zestaw znaków w wierszu poleceń (np.java -Dfile.encoding="UTF-8" ...).

 jtahlborn28 sie 2012, 03:38
zaktualizowany powyżej. pokazuję również, jak określić zestaw znaków w moim przykładzie wiersza poleceń.
 Adel Bachene28 sie 2012, 03:41
dziękuję panie, to był problem
 Adel Bachene28 sie 2012, 03:32
no sir nie określam zestawu znaków w wierszu poleceń, jak to zrobić? i dziękuję za pomoc
 Hardik Mishra28 sie 2012, 07:10
@jtahlborn: Hi..Czy możesz narysować wskazówki dotyczące tego pytania. Przynajmniej dla części UTF.stackoverflow.com/questions/12059807/…
 Adel Bachene28 sie 2012, 03:31
jeśli nie przekonwertuję String na bajty używając nieokreślonego zestawu znaków, jak dałem konwertować je, ponieważ muszę to zrobić z powodu mysql

yourAnswerToTheQuestion