java - Java swing 中一行显示的 Blob 数据

标签 java swing jdbc jtextpane

我有一个 jtextpane。 textpane 的值在数据库中存储为 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"));
        }

请给我一些建议。

最佳答案

我最好的猜测是您的数据库的编码弄乱了从 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明确规定

Note that the text system uses the '\n' character internally to represent newlines; for details, see the API documentation for DefaultEditorKit

因此,我建议您仔细查看(例如使用调试器)从文本区域检索并存储在数据库中的 String,并将其与 进行比较之后从数据库中检索的字符串。这两个很可能不相等

关于java - Java swing 中一行显示的 Blob 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9954004/

相关文章:

java - 类 : what's the best practice? 中的条件恒定属性

java - 如何在 JFrame 中停止和恢复绘画?

java - Javascript 警报消息的国际化 (i18n)

java - 内联复制粘贴 JEditorPane HTML

java - ResultSet.getString(1) 抛出 java.sql.SQLException : Invalid operation at current cursor position

java - HTTP 状态 500 - 空

java - 当 JVM 花费时间在 GC 中时,thread dump 是什么样子的

java - 通过按下按钮将图像添加到框架

java - JDBC 驱动程序应该包含在 WAR 中吗?

java - JFreeChart:使工具提示持续时间更长