在创建数据库的时候,我用的是中文的列名,其中插入数据的时候也有中文字符
要想在mysql下能够正常的显示中文,我们可以在建库的时候加入一条sql语句
mysql->set names gb2312
数据库是建立好了,但在用java连的时候又出现了问题,显示在jtable上的列名仍然是乱码,可是列的内容是正常的中文,为什么会这样呢?
查了很多资料,大部分都是说要用读字节的方法,即是 byte[] bytes=new byte("iso-8859-1")
String s=new String(bytes,"big5");
可是我这样做了仍然没有效果,所以我想问题并不是处在编码上面,因为编码都已经是gb2312.所以我用仔细的审了一遍程序,发现 前面取 数据库列名的时候用的是 getColumnName() 方法,api上getColumnName() 方法的意思是获取指定列的名称。
我觉得这个有点问题 于是把getColumnName()方法换成 getColumnLabel()方法,没有想到竟然在jtable上正常显示了中文列名,真的非常高兴,
以此志给那些仍然没解决问题的爷们一点 思路,下面是我附录的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Vector columnHead=new Vector();
Vector rows=new Vector();
String url = "jdbc:mysql://localhost:3306/perfect?useUnicode=true&character.Encoding=gb2312";
String username = "root";
String password = "root";
String drivername = "org.gjt.mm.mysql.Driver";
Connection conn;
Statement statement;
ResultSet resultset;
ResultSetMetaData rsmd;
try {
Class.forName(drivername).newInstance();
conn = DriverManager.getConnection(url, username, password);
statement=conn.createStatement();
//resultset=statement.executeQuery("set names gb2312");
resultset=statement.executeQuery("select * from baseinfo");
rsmd=resultset.getMetaData();
for(int i=1;i<=rsmd.getColumnCount();++i){
columnHead.addElement(rsmd.getColumnLabel(i));
//byte[] bytes=rsmd.getColumnName(i).getBytes("iso-8859-1");
//String s=new String(bytes,"big5");
//columnHead.addElement(s);
}
while(resultset.next()){
Vector current=new Vector();
for(int i=1;i<=rsmd.getColumnCount();++i){
current.addElement(resultset.getString(i));
}
rows.addElement(current);
}
JTable jtable=new JTable(rows,columnHead);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for(int i=0;i<rsmd.getColumnCount();++i){
TableColumn col=jtable.getColumnModel().getColumn(i);
col.setPreferredWidth(150);
}
JFrame frame=new JFrame();
JScrollPane jsp=new JScrollPane(jtable);
frame.add(jsp);
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds(0, 0, d.width, d.height);
frame.show();
} catch (Exception e) {
e.printStackTrace();
}
}
这是一个按钮响应的整个代码,哈哈……
要想在mysql下能够正常的显示中文,我们可以在建库的时候加入一条sql语句
mysql->set names gb2312
数据库是建立好了,但在用java连的时候又出现了问题,显示在jtable上的列名仍然是乱码,可是列的内容是正常的中文,为什么会这样呢?
查了很多资料,大部分都是说要用读字节的方法,即是 byte[] bytes=new byte("iso-8859-1")
String s=new String(bytes,"big5");
可是我这样做了仍然没有效果,所以我想问题并不是处在编码上面,因为编码都已经是gb2312.所以我用仔细的审了一遍程序,发现 前面取 数据库列名的时候用的是 getColumnName() 方法,api上getColumnName() 方法的意思是获取指定列的名称。
我觉得这个有点问题 于是把getColumnName()方法换成 getColumnLabel()方法,没有想到竟然在jtable上正常显示了中文列名,真的非常高兴,
以此志给那些仍然没解决问题的爷们一点 思路,下面是我附录的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Vector columnHead=new Vector();
Vector rows=new Vector();
String url = "jdbc:mysql://localhost:3306/perfect?useUnicode=true&character.Encoding=gb2312";
String username = "root";
String password = "root";
String drivername = "org.gjt.mm.mysql.Driver";
Connection conn;
Statement statement;
ResultSet resultset;
ResultSetMetaData rsmd;
try {
Class.forName(drivername).newInstance();
conn = DriverManager.getConnection(url, username, password);
statement=conn.createStatement();
//resultset=statement.executeQuery("set names gb2312");
resultset=statement.executeQuery("select * from baseinfo");
rsmd=resultset.getMetaData();
for(int i=1;i<=rsmd.getColumnCount();++i){
columnHead.addElement(rsmd.getColumnLabel(i));
//byte[] bytes=rsmd.getColumnName(i).getBytes("iso-8859-1");
//String s=new String(bytes,"big5");
//columnHead.addElement(s);
}
while(resultset.next()){
Vector current=new Vector();
for(int i=1;i<=rsmd.getColumnCount();++i){
current.addElement(resultset.getString(i));
}
rows.addElement(current);
}
JTable jtable=new JTable(rows,columnHead);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for(int i=0;i<rsmd.getColumnCount();++i){
TableColumn col=jtable.getColumnModel().getColumn(i);
col.setPreferredWidth(150);
}
JFrame frame=new JFrame();
JScrollPane jsp=new JScrollPane(jtable);
frame.add(jsp);
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds(0, 0, d.width, d.height);
frame.show();
} catch (Exception e) {
e.printStackTrace();
}
}
这是一个按钮响应的整个代码,哈哈……