在java中从SQL获取希伯来语值的问号

时间:2014-08-28 23:14:22

标签: java mysql sql jdbc encoding

我知道stackOverflow中有很多这个问题的变化,但是没有一个能帮我解决这个问题...我想用java构建网站(JSP,servlet等),我是使用mysql 5.6,Java 7和apache tomcat 7.当我尝试使用java从mysql获取数据时,它只显示问号。起初,我认为它只是显示的问题,但是当我在java中检查字符串时,In是一个实际的问号,ascii值为63 ...我正在使用我为处理sql编写的连接器类,这里是代码:

package classes;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class Connector {

private Connection con;


public Connector(String userName, String password) {
    MysqlDataSource ds = new MysqlDataSource();
    ds.setServerName("localhost");
    ds.setPort(3306);
    try {
        con = ds.getConnection("root","16180339887");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

public void executeUpdate(String sql) {
    try {
        Statement st = con.createStatement();
        st.executeUpdate(sql);
        st.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

public String[][] executeQuery(String sql) {
    String[][] query = null;
    try {
        Statement stmt = con.createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE);

        ResultSet result = stmt.executeQuery(sql);
        int column = result.getMetaData().getColumnCount();
        result.last();
        query = new String[result.getRow()][column];

        result.beforeFirst();
        int i = 0;
        while (result.next()) {
            for (int j = 0; j < column; j++)
                query[i][j] = result.getString(j + 1);
            i++;
        }

        result.close();
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return query;
}

}

这是数据库创建代码:

private static void createDB() {
    Connector c = new Connector("root", "16190339887");
    c.executeUpdate("CREATE DATABASE grade4troop1");
    c.executeUpdate("USE grade4troop1");
    c.executeUpdate("CREATE TABLE group1m(firstName VARCHAR(10),"
            + "lastName VARCHAR(10), id VARCHAR(9), father VARCHAR(10),"
            + "mother VARCHAR(10), address VARCHAR(30), motherPhone VARCHAR(10),"
            + "fatherPhone VARCHAR(10), homePhone VARCHAR(10), birthday DATE)");
    c.executeUpdate("INSERT INTO group1m VALUES('דורון', 'בצלאלי', '773916104', 'מיכה', 'ורד', 'הברוש', '0529251293', '0503085079', '046289476','2003-05-17')");
}

我不知道当我将数据插入数据库时​​,或者当我想要使用数据时,数据是否会损坏。无论如何,如果我的英语有错误,我很抱歉,如果缺少任何信息,请问。

更新: 我确保我的jsp页面为<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>,并且元标记为:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

我还将db语句更改为:CREATE DATABASE grade4troop1 CHARACTER SET utf8 COLLATE utf8_bin,但它不起作用。我试图添加SET NAMES utf8,但也无效。

当我尝试从控制台进行SELECT时,我会像在java中一样得到问号,所以我认为数据在插入数据库时​​会被破坏。

我真的很绝望,请帮助我们

1 个答案:

答案 0 :(得分:0)

尝试以下步骤

1.像这样更改你的创建数据库查询;

CREATE DATABASE grade4troop1 CHARACTER SET utf8 COLLATE utf8_bin

2.检查您的JSP页面是否包含此行;

<%@ page contentType="text/html;charset=UTF-8" %>

3.如果你正在使用eclipse,你应该these step