有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在JavaSwing中一行显示Blob数据

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

插入代码: 试一试{ conn=分贝。数据库()

        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) 个答案

  1. # 1 楼答案

    我的最佳猜测是,数据库的编码将从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 );
          }
        } );
      }
    }
    

    {a2}清楚地指定

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

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