Данные блоба, отображаемые в одной строке в java swing - PullRequest
1 голос
/ 31 марта 2012

У меня есть jtextpane. значение текстового поля хранится как 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();
    }

Получить код:

              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 Ответ

3 голосов
/ 31 марта 2012

Мое лучшее предположение состоит в том, что кодировка вашей базы данных портит символы новой строки в тексте, полученном из JTextArea. См. Следующие SSCCE для копирования текста между двумя JTextArea экземплярами. Вы можете ввести многострочный текст в первой области, нажать кнопку, и во второй области появится многострочный текст, включая разрывы строк

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 четко указано

Обратите внимание, что текстовая система использует символ '\ n' для представления новых строк; подробности см. в документации API для DefaultEditorKit

Поэтому я предлагаю вам внимательно посмотреть (например, с помощью отладчика) на String, который вы извлекаете из текстовой области и который храните в БД, и сравнить его с String, который вы впоследствии извлекаете из DB. Скорее всего, эти двое не равны

...