Blob数据显示在java swing中的一行中

时间:2012-03-31 07:37:17

标签: java swing jdbc jtextpane

我有一个jtextpane。 textbne的值作为Blob存储在数据库中。当我从数据库中检索值时,我注意到所有数据都设置在一行但我保存在不同的行中。

插入代码:            尝试{             conn = db.Database();

        stat3 = conn
                .prepareStatement("Update Knowledgebase SET Plan=? where TabID=? AND Context=?");
        stat3.setString(1, jTextPane1.getText());
        stat3.setInt(2, 1);
        stat3.setObject(3, recv);

        stat3.executeUpdate();
    } catch (Exception e) {
        e.printStackTrace();
    }

Retrive Code:

              conn = db.Database();

        stat3 = conn
                .prepareStatement("Select Plan from Knowledgebase where TabID=? And Context=?");
        stat3.setInt(1, 1);
        stat3.setObject(2, recv);

        rs = stat3.executeQuery();
        while (rs.next()) {
            jTextPane1.setText(rs.getString("Plan"));
        }

请给我一些建议。

1 个答案:

答案 0 :(得分:3)

我最好的猜测是,数据库的编码会混淆从JTextArea检索到的文本中的换行符。有关在两个JTextArea实例之间复制文本,请参阅以下SSCCE。您可以在第一个区域输入多行文字,按下按钮,多行文字出现在第二个区域,包括换行符

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MultiLineTextDemo {

  private JFrame testFrame;
  private JTextArea firstTextArea, secondTextArea;
  private JButton copyTextButton;

  public MultiLineTextDemo() {
    testFrame = new JFrame( "Copy text between 2 text area's" );

    JPanel textPanel = new JPanel(  );
    textPanel.setLayout( new BoxLayout( textPanel, BoxLayout.PAGE_AXIS ) );

    firstTextArea = new JTextArea( 10, 50 );
    secondTextArea = new JTextArea( 10, 50 );
    secondTextArea.setEditable( false );
    textPanel.add( new JScrollPane( firstTextArea ) );
    textPanel.add( new JScrollPane( secondTextArea ) );

    testFrame.add( textPanel, BorderLayout.CENTER );

    copyTextButton = new JButton( "Copy text" );
    copyTextButton.addActionListener( new ActionListener() {
      @Override
      public void actionPerformed( ActionEvent e ) {
        copyText();
      }
    } );

    testFrame.add( copyTextButton, BorderLayout.SOUTH );
  }

  public JFrame getFrame() {
    return testFrame;
  }

  private void copyText(){
    secondTextArea.setText( firstTextArea.getText() );
  }

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        MultiLineTextDemo multiLineTextDemo = new MultiLineTextDemo();
        JFrame frame = multiLineTextDemo.getFrame();

        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible( true );
      }
    } );
  }
}

Swing text component tutorial明确指定

  

请注意,文本系统在内部使用'\ n'字符来表示换行符;有关详细信息,请参阅DefaultEditorKit的API文档

所以我建议你仔细查看(例如调试器)你从文本区域检索的String以及你在数据库中存储的内容,并将其与String你进行比较之后从数据库中检索。很可能那两个不相等