Java UTF-8可以在Eclipse上工作,但无法使用导出的jar
我正在使用Java UTF-8可以在Eclipse上工作,但无法使用导出的jar,java,mysql,jdbc,utf-8,jar,Java,Mysql,Jdbc,Utf 8,Jar,我正在使用JavaSwing开发桌面应用程序,并使用UTF-8将数据以阿拉伯语保存在MySQL数据库中 当我从Eclipse运行应用程序时,一切都很好,但当我完成并使用Eclipse
Java
Swing
开发桌面应用程序,并使用UTF-8
将数据以阿拉伯语保存在MySQL
数据库中
当我从Eclipse
运行应用程序时,一切都很好,但当我完成并使用Eclipse
将我的工作导出到一个runnable jar
时,与数据库相关的一切都不起作用
- 登录不起作用
- 当我试图用阿拉伯语将日期保存到我的数据库时,我在数据库中得到了
?????
Eclipse
运行它时,一切都正常工作。有人能帮我吗?我必须完成我的工作
这是我工作的一个样本:
以下是我连接数据库的方式:
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";
这是执行的按钮登录操作的代码:
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();
}
}
}
}
使用此cmd生成的MySQL变量:显示类似“c%”的变量;
abd每件都是uts8
首先,您不应该使用未指定的字符集将字符串转换为字节(这里您使用的是平台默认值,它可能会更改):
因为这是针对要散列的字节的,所以使用哪个字符集并不重要,只要它是一致的。类似于passwordlogin.getBytes(“UTF-8”)
的东西似乎是合理的
此外,这肯定是一段有问题的代码:
if(res.next()) {
user = new String( res.getBytes(1), "UTF-8");
pass = new String( res.getBytes(2), "UTF-8");
}
这似乎意味着你在某个地方出现了角色集崩溃
最后,你是如何运行你的jar的?您是否在命令行中指定了字符集(例如,java-Dfile.encoding=“UTF-8”…
)。使用java-Dfile.encoding=“UTF-8”-jar JarFile.jar启动它。这个问题很可怕。我们需要代码,错误,任何东西!另外,它还需要格式化。@当我使用导出的jar时,我无法登录,但当我从eclipse运行它时,我可以登录,因此我删除了登录,并尝试保存数据库中找到的导出jar中的数据??????但是,当我从eclipse运行它时,我可以保存数据。您希望任何人在没有至少一段代码的情况下如何帮助您?@veer ok我将编辑并添加一个示例,说明我是如何做到的。我知道问题不在于MD5。然而,当您的数据库遭到黑客攻击时,问题将出在MD5上。不要使用MD5。如果我没有使用未指定的字符集将字符串转换为字节,那么由于mysqlno的原因,我没有在命令行中指定字符集,如何转换?谢谢你的帮助,上面更新了。此外,我还演示了如何在我的示例命令行中指定字符集。@jtahlborn:Hi..您能在这个问题上画一些指针吗。至少对于UTF部分。你能再解释一下吗?打开terminal并粘贴这一行{change[JarFile.jar]和你的.jar}路径,不带terminal,这意味着双击?
if(res.next()) {
user = new String( res.getBytes(1), "UTF-8");
pass = new String( res.getBytes(2), "UTF-8");
}