最近在写数据库的大作业,就是做一个数据库应用程序,顺便也学习一下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包最好自己学习一下,有各种方便的地方,这里都没写