2012-03-31 13 views
1

私はjtextpaneを持っています。データベースにBlobとして格納されているtextpaneの値。データベースから値を取得すると、すべてのデータが1行に表示されていましたが、別の行に保存されています。Javaスイングで1行に表示されるBLOBデータ

挿入コード: 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

詳細が必要です。どのようにデータをDBに保存しますか?どのようにそれを取得します。保存した値と取得した値を比較しましたか?そのような価値の例はありますか?単に 'String's(' JTextPane'から来る)をVARCHARまたはTEXTとしてデータベースに格納するのはなぜですか? – Robin

答えて

3

あなたのデータベースのエンコーディングは、JTextAreaから取得したテキストの改行文字を混乱させます。 2つのJTextAreaインスタンス間でテキストをコピーするには、SSCCEを参照してください。あなたは明確にテキストシステムという

注意を指定する行を含む複数行の最初のエリア内のテキスト、ボタンを押すと、複数行のテキストが第2の領域に表示されますが、

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'文字を内部的に使用して改行を表します。詳細については、だから私はあなたがStringテキストエリアから取得しているあなたがDBに格納し、この比較では(例えばデバッガを含む)をよく見てください示唆DefaultEditorKit

のためのAPIドキュメントを参照してくださいその後StringをDBから取得します。おそらくそれらの2つは等しくないでしょう

+0

+1が正しい可能性があります – mKorbel

関連する問題