2012-03-31 4 views
1

У меня есть jtextpane. значение текстовой панели, хранящейся как БЛОБ в базе данных. когда я возвращаю значение из базы данных, я заметил, что все данные установлены в одной строке, но я сохраняю их в другой строке.Данные BLOB, отображаемые в одной строке в java swing

Вставить код: try { 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 Код:

   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")); 
     } 

Пожалуйста, дайте мне предложение.

+0

Нам понадобится дополнительная информация. Как сохранить данные в БД. Как вы его получите. Вы сравнили ценности, которые вы храните, и значения, которые вы извлекаете? У вас есть пример такой ценности? Почему бы просто не сохранить 'String' (исходящую из 'JTextPane') как VARCHAR или TEXT в вашей базе данных? – Robin

ответ

3

Мое лучшее предположение заключается в том, что кодирование вашей базы данных испортило символы новой строки в тексте, полученном из 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 component tutorial четко указывает

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

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

+0

+1 может быть правильным – mKorbel