new String((rs.getString()).getBytes(), GB_2312)
试试,GB_2312的地方你可以多试几种编码方式,如:ISO_8859_1, GBK等,试试有什么区别;然后可以找一些相关的资料看一看这个问题的本质!

解决方案 »

  1.   

    在取表单提交过来的数据时, request.getParameter()前加上
    request.setCharacterEncoding("GBK");
      

  2.   

    java 编码方式是 unicode西文方式,也就是说,编译以后的java类是按西文方式编码的,中文编码方式是GBK(子集GB2312),当中文存入数据库时,是按中文编码方式存入的,rs.getString 读出来的中文编码方式的字符,系统当然不认识了,所以???  解决方法,在java系统中,用中文编码方式输出:  readStr=rs.getString("");
      byte[] b=readStr.getBytes("GBK");
     String strOut=new String(b,"iso88591_1");你的中文就显示出来了!:〉
      

  3.   

    to jacke2003xc(风云一号):
    String fieldsValue =rs.getString(i);
    byte[] b=fieldsValue.getBytes("GBK");
    String strOut=new String(b,"ISO_8859_1");
    我用了你的方法试过后,还是不行哦,而且还提示有NullPointerException错误。
    能给我一个完整的这方面程序吗?
      

  4.   

    不可能  你把你的调用程序贴出来看看  怎么会有NullPointerException呢,肯定你程序写的有问题?!!!
      

  5.   

    to jacke2003xc(风云一号):/**
     * @version 1.20 1999-07-26
     * @author Cay Horstmann
     */import java.net.*;
    import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;public class ViewDB
    {  public static void main(String[] args)
       {  
          JFrame frame = new ViewDBFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setLocation(300,300);
          frame.show();
       }
    }class ViewDBFrame extends JFrame

        public ViewDBFrame()
        {  
          setTitle("ViewDB");
          setSize(300, 200);
          Container contentPane = getContentPane();      tableNames = new JComboBox();
          tableNames.addActionListener(
          new ActionListener()
          {
              public void actionPerformed(ActionEvent evt)
              {
                  showTable((String) tableNames.getSelectedItem());
              }
          });
          contentPane.add(tableNames,BorderLayout.NORTH);      try
          {  con = getConnection();
             meta=con.getMetaData();
             createStatement();
             getTableNames();
          }
          catch(Exception e)
          {  
              JOptionPane.showMessageDialog(this, e);
          }
          JPanel buttonpanel = new JPanel();
          contentPane.add(buttonpanel,BorderLayout.SOUTH);
          if (scrolling)
          {
              previousButton = new JButton("prev");
              previousButton.addActionListener(
              new ActionListener()
              {
                  public void actionPerformed(ActionEvent evt)
                  {
                     showPreviousRow();
                  }
              });    
          }
          buttonpanel.add(previousButton);
          nextButton = new JButton("next");
          nextButton.addActionListener(
          new ActionListener()
          {
              public void actionPerformed(ActionEvent evt)
              {
                  showNextRow();
              }
          });
          buttonpanel.add(nextButton);
          addWindowListener(
          new WindowAdapter()
          {
              public void windowClosing(WindowEvent evt)
              {
                  try
                  {
                    stat.close();
                    con.close();
                  }
                  catch(SQLException e)
                  {
                      while (e!=null)
                      {
                         JOptionPane.showMessageDialog(null,e);
                         e=e.getNextException();
                      }
                  }
              }
          });
       }   public static Connection getConnection()
          throws SQLException,ClassNotFoundException
       { 
          Class.forName("oracle.jdbc.driver.OracleDriver");
          String url="jdbc:oracle:oci8:@gisdata";
          String username="dbo";
          String password="pass";
          return
             DriverManager.getConnection(url, username, password);
       }   private void showTable(String tableName)
       {
           try
           {
               if(rs!= null)
                   rs.close();
               rs=stat.executeQuery("select * from " + tableName);
               if(scrollPane!=null)
                   getContentPane().remove(scrollPane);
               dataPanel = new DataPanel(rs);
               scrollPane = new  JScrollPane(dataPanel);
               getContentPane().add(scrollPane,BorderLayout.CENTER);
               validate();
               showNextRow();
           }
           catch(Exception e)
           {
               JOptionPane.showMessageDialog(this,e);
           }
       }
       private void showPreviousRow()
       {
           try
           {
               if(rs==null || rs.isFirst())
                   return;
               rs.previous();
               dataPanel.showRow (rs);
           }
           catch(Exception ex)
           {
               System.out.print("Error: " + ex);
           }
           
       }
       private void showNextRow()
       {
           try
           {
               if(rs==null || rs.isLast())
                   return;
               if(!rs.next())
               {
                   rs.close();
                   rs = null;
                   return;
               }
               dataPanel.showRow(rs);
           }
           catch(Exception ex)
           {
               System.out.print("Error: " + ex);
           }
       }
       private void createStatement() throws SQLException
       {
           if (meta.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE))
           {
               stat=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
               scrolling=true;
           }
           else
           {
               stat=con.createStatement();
               scrolling=false;
           }
       }
       private void getTableNames() throws SQLException
       {
           ResultSet mrs = meta.getTables(null,null,null, new String[]{ "TABLE"});
           while (mrs.next())
           {
               tableNames.addItem(mrs.getString(3));
           }
           mrs.close();
       }
       private JButton nextButton;
       private JButton previousButton;
       private JComboBox tableNames;
       private ArrayList fields;
       private boolean scrolling;
       private Connection con;
       private Statement stat;
       private DatabaseMetaData meta;
       private ResultSet rs;
       private JScrollPane scrollPane;
       private DataPanel dataPanel;
    }class DataPanel extends JPanel
    {
        public DataPanel(ResultSet rs) throws SQLException
        {
            fields = new ArrayList();
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.weighty=100;
            ResultSetMetaData rsmd=rs.getMetaData();
            for(int i=1;i<=rsmd.getColumnCount();i++)
            {
                String columnName = rsmd.getColumnLabel(i);
                int columnWidth = rsmd.getColumnDisplaySize(i);
                JTextField tb = new JTextField(columnWidth);
                fields.add(tb);
                gbc.weightx = 0;
                gbc.anchor = GridBagConstraints.EAST;
                gbc.fill = GridBagConstraints.NONE;
                add(new JLabel(columnName),gbc,0,i-1, 1,1);
                gbc.weightx=100;
                gbc.anchor = GridBagConstraints.WEST;
                add(tb,gbc,1,i-1,1,1);
            }
        }
        public void showRow(ResultSet rs) throws  SQLException,UnsupportedEncodingException  //从数据库里面取数据    {
            for(int i=1;i<=fields.size();i++)
            {
               String fieldsValue =rs.getString(i);
               byte[] b=fieldsValue.getBytes("GBK");
               String strOut=new String(b,"ISO_8859_1");
                JTextField tb =(JTextField)fields.get(i - 1);
                tb.setText(strOut);
            }
        }
        private void add(Component c,GridBagConstraints gbc,int x,int y,int w,int h)
        {
            gbc.gridx=x;
            gbc.gridy=y;
            gbc.gridwidth=w;
            gbc.gridheight=h;
            add(c,gbc);
        }
        
        private ArrayList fields;
    }
      

  6.   

    public String getStr(String str)
    {
            try
            {
                    String temp_p=str;
                    byte[] temp_t=temp_p.getBytes("ISO8859-1");//ISO8859-1
                    String temp=new String(temp_t);
                    return temp;
            }
            catch(Exception e)
            {        }
            return "";
    }
      

  7.   

    String temp=getStr(rs.getString("你的字段"));
      

  8.   

    建议你先不要用UI ,先设计个带有main的class 调试一下  class.forName();
    Connection con=......
    .... stmt=....String a=rs.getString("子段名")
    byte[] b=a.getBytes("GBK")
    ................这样,更容易调试,然后把错误信息告诉我!
      

  9.   

    jacke2003xc(风云一号) ( ) :
    真的很奇怪,如果我不用ui的话,直接用rs.getString("子段名"),都能够把中文显示出来,
    真奇怪,为什么加ui后就不行呢?但我的程序没错啊!