JAVA连接SQL数据库,并以表格形式输出所有列


最近在写数据库的大作业,就是做一个数据库应用程序,顺便也学习一下JAVA,所以就直接捡起来JAVA用来写界面还有连接数据库

写界面其实好坑,下回不会这么傻了

万事开头难,相信很多小伙伴在连接数据库的时候碰到了难题,还有就是获得了 ResultSet 的时候只能获取某一列的值


一.连接数据库

package frame;
import java.awt.FlowLayout;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.Statement;
import java.io.*;
import javax.swing.*;
import java.util.Vector;  

public class connect {  
  
    static void show(String SQL , Vector other) {  
    String connectionUrl = "jdbc:sqlserver://localhost:1433;"  
            + "databaseName=Big_Homework;integratedSecurity=true;";  
    String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=Big_Homework;user=sa;password=123456";//sa身份连接,注意这里是你的SQL SA身份连接的密码,每个人都不一样,需要在SQL上设置 
    Connection con = null;  
    Statement stmt = null;  
    ResultSet rs = null;
    try {  
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
        con = DriverManager.getConnection(url);          
        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  
        rs = stmt.executeQuery(SQL);
        if(!rs.next() || rs.getString(1).equals("0")){ 
        	JOptionPane.showMessageDialog(null,"没找到");
        }else{
        	new ShowWin(rs , other); //自己定义的一个类,传入ResultSet作为列值和一个Vector作为表头,使结果以表格的形式输出
        }
    }  
    catch (Exception e) {
    	String info = getErrorInfoFromException(e);
        JOptionPane.showMessageDialog(null,info);  
    }   
    finally {  
        if (rs != null)  
            try {  
                rs.close();  
            } catch (Exception e) {  
            }  
        if (stmt != null)  
            try {  
                stmt.close();  
            } catch (Exception e) {  
            }  
       if (con != null)  
            try {  
                con.close();  
            } catch (Exception e) {  
            }  
       } 
    }
    public static String getErrorInfoFromException(Exception e){
        try {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            return "\r\n" + sw.toString() + "\r\n";
        } catch (Exception e2) {
            return "bad getErrorInfoFromException";
        }
    }  
}

二.ShowWin类

package frame;
import util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;//用了JAVA的table包,用来画表格

class ShowWin extends JFrame{
	JTable table = null;
	DefaultTableModel defaultModel = null;	
	ShowWin(ResultSet rs , Vector other) throws Exception{
		JFrame f = new JFrame();
		int row = 1;
		Vector v = new Vector();
		Vector title = new Vector();
		ResultSetMetaData rsmd = rs.getMetaData();
		while(true){
				title.add(row);
				if(row == rsmd.getColumnCount()){
					break;
				}
				row = row + 1;
		}
		if(other == null){//判断是否传入了Vector,有的话作为表头,没有就算了
			defaultModel = new DefaultTableModel(v,title);
		}else{
			defaultModel = new DefaultTableModel(v,other);
		}
    	table=new JTable(defaultModel);
    	table.setPreferredScrollableViewportSize(new Dimension(600, 800));
    	JScrollPane s = new JScrollPane(table);
    	JPanel panel = new JPanel();
    	
		for (int i = 1 ; rs.next() ; i++){ //这个循环给Vector存入所有列的值作为一行
			if(i == 1){
				rs.first();
			}
			row = 1;
			v = new Vector();
			while(true){
				v.add(rs.getString(row));
				if(row == rsmd.getColumnCount()){
					break;
				}
				row = row + 1;
			}
			defaultModel.addRow(v);
		}
		
		Container contentPane = f.getContentPane();
    	contentPane.add(panel, BorderLayout.NORTH);
    	contentPane.add(s, BorderLayout.CENTER);
		GUIUtil.toCenter(this);
  		f.setTitle("查询结果");
   	 	f.pack();
    	f.setVisible(true);
		table.revalidate();
	}
}

三.注意事项

ResultSet从SQL获得值的时候是第一行的前一行,记得要读其值时得往下移一行

table包还有sql包最好自己学习一下,有各种方便的地方,这里都没写







  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值