怎么在开发的GUI界面程序中链接数据库
解决方案 »
- 关于闭包的解释求实例
- 请教一个UDP过滤重复包的问题
- 关于生成一个动态的JTree的问题,急啊!!
- keyTest.java:9: 警告:[unchecked] 对作为普通类型 java.util.Hashtable 的成员的 put<k,v>的调用未经检查
- System.in和out能用nio来包装么?
- 返回 String 对象内最后一次出现子字符串的字符位置
- 求助!编写一个小程序
- 有关编写输出"*"applet程式
- 很菜的一个问题,请有兴趣的朋友进来聊一聊。
- 现在国内用JBoss的多不多,他有什么好处,相对其他的开发平台??
- package的使用
- CSDN中为什么有那么多人得到答案也不结贴呢?(散分)
B用jdbc获取数据库的数据集,并将数据用set方法保持到pojo普通类
C在GUI中显示pojo普通类中的数据(用get方法)
D如
show = new JLabel();
show.setText(pojo.getId());
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=liuyan";
String user = "sa";//默认登录ID
String pass = "";//密码try{
DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
Connection conn = DriverManager.getConnection(url,user,pass);
if(conn!=null)
System.out.println("连接成功");
}
catch (Exception ex) {
ex.printStackTrace();
}
import java.awt.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.table.TableColumn;
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
class Typec extends JFrame
{
//窗体及窗体控件
JPanel pnla=null;
JPanel pnlb=null;
JTable table=null;
TestModela md=null;
TestModelb mdb=null;
TableColumn tc=null;
javax.swing.JComboBox jc=null;
javax.swing.JCheckBox jboxa=null;
javax.swing.JCheckBox jboxb=null;
DataBase db=new DataBase(); //连接sql数据javax.swing.JScrollPane js;
JButton but;
JTextField jt1=null;
JTextField jt2=null;
JTextField jt3=null;
JTextField jt4=null;
JTextField jt5=null;
//Object数组构造jtable
Object[][] a=new Object[2][3];
Object[] b={"a","b","c"};
//Object数组构造jtable
Object[][] aa={{"a","b","c"}};
//vector数组构造jtable
Vector va,vb,vc;//实现功能
//1)将Object数组构造的jtable添加到窗体上去
//2)将JTable的第一列的属性改为文本框,第二列的属性改变为下拉框
void addObject()
{
table=new JTable(a,b);
tc=new TableColumn();
jt1=new javax.swing.JTextField(10);
jt1.setBackground(Color.red);
jc=new JComboBox();
jc.addItem("男");
jc.addItem("女");
tc=table.getColumnModel().getColumn(1);
tc.setCellEditor(new DefaultCellEditor(jt1));
tc=table.getColumnModel().getColumn(2);
tc.setCellEditor(new DefaultCellEditor(jc));
js=new JScrollPane(table);
this.getContentPane().add(js,BorderLayout.CENTER);
this.setSize(700,350); //必须先添加后显示,不然会不正常的显示的
this.show();
}
//实现功能
//1)使用Object模板来创建JTable
//2) 实现JTable的表格边框的隐藏和显示b及指定列的隐藏和显示
void addObjectMd()
{
pnla=new JPanel();
jt1=new JTextField(10);
but=new JButton("设置行高");
but.addActionListener(new butsj());
jboxa=new JCheckBox("隐藏",false);
jboxa.addItemListener(new MyItemListener());
jboxb=new JCheckBox("删除",false);
jboxb.addItemListener(new MyItemListener());
pnla.add(jt1);
pnla.add(but);
pnla.add(jboxa);
pnla.add(jboxb);
md=new TestModela(aa,b); //使用模板必须数组里有值
table=new JTable(md);
js=new JScrollPane(table);
pnlb=(JPanel)this.getContentPane();
pnlb.setLayout(new BorderLayout());
pnlb.add(pnla,BorderLayout.NORTH);
pnlb.add(js,BorderLayout.CENTER);
this.setSize(700,350); //必须先添加后显示,不然会不正常的显示的
this.show();
}
void addVector()
{
vc=new Vector();
vc.add("va");
vc.add("vb");
vc.add("vc");
va=new Vector();
va.add(vc);
vb=new Vector();
vb.add("va");
vb.add("vb");
vb.add("vc");
table=new JTable(va,dvb);
js=new JScrollPane(table);
this.getContentPane().add(js,BorderLayout.CENTER);
this.setSize(700,350); //必须先添加后显示,不然会不正常的显示的
this.show();
}
void addVectorMd() //czVector模板类
{ //定义表中的一条数据,相当于一个一维数组
vc=new Vector();
vc.add("va");
vc.add("vb");
vc.add("vc");
vc.add(new Boolean(false));
va=new Vector();
//将产生的数据增加到va中去
va.add(vc);
vb=new Vector();
//定义JTable的标题
vb.add("va");
vb.add("vb");
vb.add("vc");
vb.add("vd");
mdb=new TestModelb(va,vb);
table=new JTable(mdb);
//表格已构造完毕
js=new JScrollPane(table);
jt1=new JTextField(10);
jt2=new JTextField(10);
jt3=new JTextField(10);
jt4=new JTextField(10);
but=new JButton("增加");
but.addActionListener(new butsj());
pnla=new JPanel();
pnla.add(jt1);
pnla.add(jt2);
pnla.add(jt3);
pnla.add(jt4); pnla.add(but);
pnlb=(JPanel)this.getContentPane();
pnlb.setLayout(new BorderLayout());
pnlb.add(pnla,BorderLayout.NORTH);
pnlb.add(js,BorderLayout.CENTER);
this.setSize(700,350); //必须先添加后显示,不然会不正常的显示的
this.show();
} void addVectorSql()
{
DataBase.FillVector("select * from students");
va=DataBase.data; //获取数据库中的行数据
vb=DataBase.title; //获取数据库中的标题
mdb=new TestModelb(va,vb);
table=new JTable(mdb);
js=new JScrollPane(table);
pnla=new JPanel();
pnlb=(JPanel)this.getContentPane();
pnlb.setLayout(new BorderLayout());
pnlb.add(pnla,BorderLayout.NORTH);
pnlb.add(js,BorderLayout.CENTER);
this.setSize(700,350); //必须先添加后显示,不然会不正常的显示的
this.show();
}
////处理Click事件
private class butsj implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if((e.getSource()==but)&&but.getText().equals("增加"))
{
vc=new Vector();
vc.add(jt1.getText());
vc.add(jt2.getText());
vc.add(jt3.getText());
vc.add(new Boolean(jt4.getText().equalsIgnoreCase("true")));//将此 String 与另一个 String 进行比较,不考虑大小写。
mdb.AddRow(vc);
}
else if((e.getSource()==but)&&but.getText().equals("设置行高"))
{
int h=Integer.parseInt(jt1.getText());//得到输入的值
if(h>0)
table.setRowHeight(h);//设置table的行高
}
}
}//处理CheckBox 的选中事件
private class MyItemListener implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
//先判断事件源 再判断事件源是否被选中
if(e.getSource()==jboxa)
if(jboxa.isSelected())
{
//设置是否显示表格线
table.setShowHorizontalLines(true);
table.setShowVerticalLines(true);
}
else
{
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
}
//是否删除分数列
if(e.getSource()==jboxb)
if(jboxb.isSelected())//是否选中
{
tc=table.getColumnModel().getColumn(2);
table.getColumnModel().removeColumn(tc);
table.updateUI();
}
else
{
table.getColumnModel().addColumn(tc);
}
}
}
}//这是Typec的右括弧,不要搞混啦
//使用Object创建jtable模板
class TestModela extends javax.swing.table.DefaultTableModel
{
Object[][] data;
Object[] title;
TestModela(Object[][] d,Object[] t)
{
super(d,t);
this.data=d;
this.title=t;
}
public Object getValueAt(int r,int c)
{
return data[r][c];//得到r行c列的数据
}
public Class getColumnClass(int c)
{
//将不同的数据类型
//以对应的形式来显示,大家可以比较这个例子中的显示
//和前几个例子的区别
return data[0][c].getClass();
}
//设置r行,c列的值为 value
//当用户在修改JTable中的数据时,能自动调用,并修改data中的数据
public void setValueAt(Object value, int r,int c)
{
data[r][c]=value;
}
}
//使用Vector创建jtable模板
//对于JTable来说,它是一个二维结构,表中的整个数据由一个Vector
//表中的每一行也是一个Vector
class TestModelb extends javax.swing.table.DefaultTableModel
{
Vector a;
Vector b;
TestModelb(Vector a,Vector b)
{
super(a,b);
this.a=a;
this.b=b;
}
public Object getValueAt(int c,int b) //得到每一列的数据
{
Vector v=(Vector)a.get(c);//取出可变数组中的数据
return v.get(b); //得到每一行没一列的值
}
public Class getColumnClass(int c)
{
Vector v=(Vector)a.get(0);
return v.get(c).getClass(); //将字符串变成各中类型的数据
} public boolean isCellEditable(int r,int c)
{
//除了第二列不能修改
//其它都可能修改
if(c==2)
return false;
return true;
}
//在自定义的TableModel中重写了AddRow方法
//向data中增加一个Vector,相当于增加了一条记录
public void AddRow(Vector row)
{
a.add(row);
this.fireTableDataChanged();//通知所有侦听器,表的所有行单元格值可能已更改,如果不调用,将不会更改
}//???????????????????如何实现删除行呢
}
/*
// 在pubs数据库中建一个表students
create table students(st_xh varchar(10),st_name varchar(10),st_age int)
insert into students
values('1000 0001','小王',25)
再建一个Odbc数据源test
联结pubs
*/
class DataBase //cz数据库类
{
public static Connection conn=null;//这是一个连接对象
public static ResultSet rs=null;//这是一个记录集对象
public static Statement st=null;//这是一个语名对象
public static PreparedStatement pst=null;//执行带参数据的语句
public static CallableStatement cst=null;//执行存储过程
public static ResultSetMetaData rsmd=null;//得到记录集的原信息
public static Vector data,title,row;
//在构造函数中去联结数据库
public DataBase()
{
data=new Vector();
title=new Vector(); //必须使用异常捕获,不然程序将报错
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:test","sa","sa");
st=conn.createStatement();
}catch(SQLException e)
{
e.printStackTrace();
}catch(Exception e)
{
e.printStackTrace();
}
}
//根据strSql来向两个集合增加数据
//data中存放表中的每条记录,每条记录也放入一个Vector中
//title中存放表的列的信息,根据ResultSetMetaData来提供
public static void FillVector(String strSql)
{
int s;
int fieldCount;
try{
data.clear();
title.clear();
rs=st.executeQuery(strSql);//得到结果集
rsmd=rs.getMetaData();//得到结查集的原数据
fieldCount=rsmd.getColumnCount();
while(rs.next())
{
row=new Vector();
for(int i=0;i<fieldCount;i++)
{
row.add(rs.getString(i+1));
}
//及格就增加一个true否则增加一个false
if(Integer.parseInt(row.get(row.size()-1).toString())>60)
row.add(new Boolean(true));
else
row.add(new Boolean(false));
data.add(row);
System.out.println(data.size());
}
for(int i=0;i<rsmd.getColumnCount();i++)
{
title.add(rsmd.getColumnLabel(i+1));
}
title.add("Pass");
}catch(SQLException e)
{
e.printStackTrace();
}
}
}class test
{
public static void main(String args[])
{
Typec tc=new Typec(); //tc.addObject();
// tc.addObjectMd();
// tc.addVector();
// tc.addVectorMd();
tc.addVectorSql();
}
}
很方便的,
楼主好好看看吧,等你分数哦
绝对是一SB
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.*;
import java.util.ArrayList;
import java.util.Properties;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableModel;
public class JConnect extends JFrame implements ActionListener{
JTextArea jta;
JTable table;
JButton sure;
JButton cancel;
Connection conn;
public JConnect(){
this.addWindowListener(new WindowListener(){ public void windowActivated(WindowEvent e) {
} public void windowClosed(WindowEvent e) {
} public void windowClosing(WindowEvent e) {
closecon();
System.exit(0);
} public void windowDeactivated(WindowEvent e) {
} public void windowDeiconified(WindowEvent e) {
} public void windowIconified(WindowEvent e) {
} public void windowOpened(WindowEvent e) {
}
});
JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
jta = new JTextArea();
jta.setLineWrap(true);
jta.setAutoscrolls(true);
// jta.setText("#sp_sysmon '00:00:05'");
jsp.add(new JScrollPane(jta),JSplitPane.BOTTOM);
table = new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jsp.add(new JScrollPane(table),JSplitPane.TOP);
jsp.setDividerLocation(400);
sure = new JButton("确定");
sure.addActionListener(this);
cancel = new JButton("取消");
cancel.addActionListener(this);
JPanel bp = new JPanel(new FlowLayout(FlowLayout.RIGHT));
bp.add(sure);
bp.add(cancel);
JPanel pane = (JPanel) this.getContentPane();
pane.setLayout(new BorderLayout());
pane.add(jsp,BorderLayout.CENTER);
pane.add(bp,BorderLayout.SOUTH);
initConn();
this.setBounds(200,140,800,600);
}
private void closecon(){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} private void initConn() {
try {
//这段是连sybase的
// String ipAddress = "192.168.0.1";
// Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
// String url = "jdbc:sybase:Tds:" + ipAddress + ":5006";
// System.out.println(url);
// conn = DriverManager.getConnection(url, "sa", "sybase");
//这段是连oracle的,用的thin驱动
// String ipAddress = "192.168.16.15";
// Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
// String url = "jdbc:oracle:thin:@" + ipAddress + ":1521:openview";
// System.out.println(url);
// conn = DriverManager.getConnection(url, "ultranms", "ultranms");
//这段是连MSSQL的
// String ipAddress = "192.168.3.36";
// Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
// String url = "jdbc:microsoft:sqlserver://" + ipAddress + ":1433";
// System.out.println(url);
// conn = DriverManager.getConnection(url, "sa", "");
//这段是连DB2
String ipAddress = "192.168.5.37";
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
String url = "jdbc:db2://" + ipAddress + ":50000/test";
System.out.println(url);
conn = DriverManager.getConnection(url, "DB2ADMIN", "xh");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String argv[]) {
JConnect jcc = new JConnect();
jcc.setVisible(true);
} public void testConnection(String sql){
try {
Statement st = conn.createStatement();
ResultSet rs = st
.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
String[] colName = new String[count];
StringBuffer sbf = new StringBuffer();
for (int i = 1; i <= count; i++) {
colName[i-1] = rsmd.getColumnName(i);
sbf.append(colName[i-1] + ",");
}
System.out.println(sbf.toString());
DefaultTableModel dtm = new DefaultTableModel(colName,0);
table.setModel(dtm);
while (rs.next()) {
Object[] value = new Object[count];
for (int i = 1; i <= count; i++) {
value[i-1] = rs.getObject(i);
}
dtm.addRow(value);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void exesp(final String sql) {
//
Thread th = new Thread() {
public void run() {
try {
CallableStatement cs = conn.prepareCall("{ call " + sql
+ "}"); // call spName(?,?,?)
boolean flag = true;
int rsIndex = 1;
ResultSet rs = cs.executeQuery();
while (flag) {
ArrayList result = new ArrayList();
;
rs = cs.getResultSet();
if (rs != null) { // todo 应该为needRsIndex== rsIndex
ResultSetMetaData metaData = null;
try {
if (rs != null)
metaData = rs.getMetaData();
} catch (Exception e) {
e.printStackTrace();
}
int columnCount = metaData.getColumnCount();
if (columnCount > 0) {
// 使用元数据获得关于结果集列的信息
while (rs.next()) {
// 处理结果
Properties recordInfo = new Properties();
if (result == null)
result = new ArrayList();
for (int i = 1; i < columnCount + 1; i++) {
String dbName = metaData
.getColumnLabel(i);
if (dbName != null)
dbName = dbName.trim();
recordInfo.put(dbName.toUpperCase(), rs
.getObject(i));
}
result.add(recordInfo);
}
if (result != null && !result.isEmpty()) {
System.out.println("结果集:" + rsIndex + "=="
+ result);
rsIndex = rsIndex + 1;
}
}
}
boolean more = cs.getMoreResults();
if (!more)
break;
}
if (rs != null)
rs.close();
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
};
th.start();
try {
th.join(10000);
conn.close();
} catch (Exception e) {
}
//
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == sure) {
if (jta.getText().startsWith("#"))
exesp(jta.getText().substring(1));
else
testConnection(jta.getText());
} else if (e.getSource() == cancel) {
closecon();
System.exit(0);
}
}}