Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Đọc hình từ MS SQL server rồi hiển thị lên JTable

Trong bài này tôi sẽ hướng dẫn bạn đọc hình từ MS SQL server rồi hiển thị lên JTable.
Để đọc 1 hình đưa thành một luồng, ta sử dụng ByteArrayOutputStream để lưu trữ hình tạm thời trước khi xử lý nó.

byte[] buffer = new byte[1024];
ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
InputStream is = rs.getBinaryStream(2);
while (is.read(buffer) > 0) {
        bos.write(buffer);
}

Trong cáh đưa hình này lên JTable, ta phải chuẩn bị vài bước.
Thứ nhất là tại cột sẽ hiển thị hình, ta phải chỉ định ColumnClass cho nó phải là lớp ImageIcon.

dtm=new DefaultTableModel(header, 0){
	public java.lang.Class<?> getColumnClass(int columnIndex) {
		if(columnIndex==1)
			return ImageIcon.class;
		return Object.class;
	};			
};

Thứ hai là tạo 1 dòng dữ liệu để đưa nó lên bảng:

ImageIcon icon=new ImageIcon(bos.toByteArray());
Object []row={name,icon};
dtm.addRow(row);

Kết quả như sau:

Code hoàn chỉnh như sau:

package vovanhai.wordpress.com;

import java.awt.BorderLayout;
import java.awt.Font;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
 * Đọc dữ liệu trong DBMS rồi hiển thị trên JTable
 * @author VoVanHai
 * https://vovanhai.wordpress.com
 */
public class JTableImageFromDatabase extends JFrame{
	private DefaultTableModel dtm;
	private JTable table;
	
	public JTableImageFromDatabase() throws Exception{
		setTitle("https://vovanhai.wordpress.com");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(600,400);
		JLabel lbl=new JLabel("Get Image From Database & display on JTable",JLabel.CENTER);
		lbl.setFont(new Font("Arial",Font.BOLD,20));
		
		this.add(lbl,BorderLayout.NORTH);
		//Tạo Bảng
		String[]header={"Image path","Image preview"};
		dtm=new DefaultTableModel(header, 0){
			public java.lang.Class<?> getColumnClass(int columnIndex) {
				if(columnIndex==1)
					return ImageIcon.class;
				return Object.class;
			};			
		};
		this.add(new JScrollPane(table=new JTable(dtm)));
		table.setRowHeight(200);
		table.getTableHeader().setFont(new Font("Arial",Font.BOLD,16));
		//chèn dữ liệu vào
		LoadDBData2JTable();
	}
	/**
	 * Đọc dữ liệu từ cơ sở dữ liệu rồi dưa lên JTable
	 * @throws Exception
	 */
	public void LoadDBData2JTable() throws Exception{
		
		Connection conn=getConnection();
		String sql="select * from tblImages";
		ResultSet rs=conn.createStatement().executeQuery(sql);
		while(rs.next()){
			String name = rs.getString(1);
			byte[] buffer = new byte[1024];
			ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
			InputStream is = rs.getBinaryStream(2);
			while (is.read(buffer) > 0) {
				bos.write(buffer);
			}
			ImageIcon icon=new ImageIcon(bos.toByteArray());
			Object []row={name,icon};
			dtm.addRow(row);
		}
		conn.close();
	}
	/**
	 * Tạo kết nối đền cơ sở dữ liệu 
	 * @return Connection
	 * @throws Exception
	 */
	private Connection getConnection()throws Exception{
		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		String url="jdbc:sqlserver://localhost:1433;databaseName=TestImageDB";
		Connection conn=DriverManager.getConnection(url,"sa","");
		return conn;
	}
	
	/**
	 * Hàm main
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args)throws Exception {
		new JTableImageFromDatabase().setVisible(true);
	}
}

Chúc các bạn thành công!

3 Responses to “Đọc hình từ MS SQL server rồi hiển thị lên JTable”

  1. Thưa thầy em muốn load hình ảnh từ cở sở dữ liệu là access lên table như thầy có được không ạ. Em có chạy demo bài thầy viết với cơ sở dữ liệu là access mà không được, thầy giúp em được không ạ.

  2. Lê Văn Thương said

    Bác Hải thân mếm. Hôm nay em có ghé qua blog của bác. Em thấy bác hướng dẫn những bài cơ bản về java hay quá. Em đang học lập trình java với cơ sở dữ liệu. Bác có cuốn ebook nào nói về lập trình cơ sở dữ liệu với java không. Nếu có thì bác có thể send cho em được không.

  3. Võ Văn Hải said

    Bạn cuốn này xem: Core Java – Advanced features

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: