我知道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中一样得到问号,所以我认为数据在插入数据库时会被破坏。
我真的很绝望,请帮助我们
答案 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。