DB2 亲身实例(GUI界面) 加 笔记和注意事项

来源:互联网 发布:python web编程 编辑:程序博客网 时间:2024/06/08 10:08
import java.lang.*;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import java.sql.*;import java.util.*;import javax.swing.table.DefaultTableModel;//一开始总是点击按钮不动,后来发现是忘记给控件添加监听器了public class tbGui extends JFrame implements ActionListener {/** *  */private static final long serialVersionUID = 1L;JTable a;//先定义一个JTable类型JPanel b=new JPanel();//JPanelJButton putinS=new JButton("单行插入");JButton putinDuo=new JButton("多行插入");JButton putinDan=new JButton("子查询插入");JTextField sole=new JTextField();//单行插入JTextArea duo=new JTextArea();//多行插入JTextField dan=new JTextField();//子查询插入public DefaultTableModel tableModel;//建立表格模型对象JScrollPane duoInsert;//用于多行插入的上下滑动JScrollPane scrollPane;Connection sample;//用于连接数据库//SQL语句//Statement对象是用于SQL语句操作的,一般一次性存储操作用Statement。批量的情况下用PreparedStatementContainer nn;public tbGui(){super("JTempl数据表\n");Object[][] playerInfo={//创建表格中的数据,Templ中是num和name{new Integer(1000),"王鹏"},{new Integer(1001),"朱雀"},{new Integer(1002),"大鲨鱼"}};String[] Names = { "学号" , "姓名" };tableModel=new DefaultTableModel(playerInfo,Names);//建立JTableModel模板a=new JTable(tableModel);//构建JTable控件,利用DefaultTableModel模板,方便以后增加删除行//a.setPreferredScrollableViewportSize(new Dimension(550,100));scrollPane = new JScrollPane(a);//为JTable a建立一个区域    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//显示水平滑动栏    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//显示竖直滑动栏    nn=getContentPane();nn.setLayout(null);//自由布局duoInsert=new JScrollPane(duo);duoInsert.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//显示水平滑动栏duoInsert.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//显示竖直滑动栏nn.add(scrollPane);nn.add(putinS);nn.add(putinDuo);nn.add(sole);nn.add(duoInsert);nn.add(putinDan);//nn.add(dan);putinS.addActionListener(this);//在类内定义监听器时候用thisputinDuo.addActionListener(this);putinDan.addActionListener(this);sole.setBounds(10, 350, 400, 50);duoInsert.setBounds(10, 500, 400, 100);putinDuo.setBounds(430,500,100,100);putinS.setBounds(430, 350, 100, 50);scrollPane.setBounds(10,30,500,300);dan.setBounds(10, 650, 400, 50);putinDan.setBounds(430,650,100,50);nn.add(b);setSize(900,900);setVisible(true);try {//错误根源sample = DriverManager.getConnection("jdbc:db2:sample","db2admin","db2admin");//连接数据库sample.setAutoCommit(false);} catch (SQLException e) {// TODO 自动生成的 catch 块JOptionPane.showMessageDialog(null, "数据库错误", "找不到该数据库",JOptionPane.ERROR_MESSAGE);e.printStackTrace();}  nn.add(b);Show();setSize(900,900);setVisible(true);} static    {   try        {                          Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");//Class.forName用来加载字符串所对应的类,              //这样子DriverManager就可以使用了        }        catch (Exception e)        {   System.out.println ("\n  Error loading DB2 Driver...\n");            System.out.println (e);            System.exit(1);        }    }public void Show()//显示数据库中的数据到JTable上{try{String sql="select * from admin.TEMPL";//创建Sql语句,表前面要根据用户的不同添加不同的用户,比如admin用户,建立了templ表System.out.println("");PreparedStatement stmt=sample.prepareStatement(sql);//创建Sql语句陈述,用来excuteResultSet rs=stmt.executeQuery();if(rs==null){System.out.println("结果集无数据");return;}//如果表没有数据应该返回ResultSetMetaData rest=rs.getMetaData();//得到列数,变量类型等需要这个列int row=rs.getRow();int colum=rest.getColumnCount();//得到列数for(int i=0;i<=row-1;i++){String[] ggget=new String[colum];for(int j=0;j<=colum-1;j++){ggget[j]=rs.getString(j);}tableModel.addRow(ggget);if(!rs.next()){break;}}//得到了TEMPL表中的所有数据并且进行显示}catch(Exception e){System.out.println(e.getMessage());}}public static void main(String[] args){tbGui nn=new tbGui();nn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根if(e.getSource()==putinS){try{String sql="insert into admin.TEMPL (NUM,NAME) values(?,?)";PreparedStatement sss=sample.prepareStatement(sql);//String ppp=sole.getText();//获取输入的数据int blank=0;String num="";String name="";//String[] sub=ppp.split(" ");//这种正则表达式拆分空格的方法是错误的String[] sub=ppp.split("\\s+");//正确方法,\s表示任何空白字符,由于有\所以是 "\\s"if(sub.length>2) {System.out.println("输入不符合格式 重新输入");return;}name=name+sub[1];num=num+sub[0];int inNum=Integer.parseInt(num);//将数字字符串转化为整型sss.setInt(1, inNum);sss.setString(2, name);sss.executeUpdate();//更新操作在设置完变量的值之后,它是相当于//preparedstatement对象sss已经编译好了,并且设置好了变量的值,然后这个时候才能用它去执行,否则会报sqlcode:07001错误String[] valu= {num,name};tableModel.addRow(valu);sample.commit();//必须要有提交操作!!!!!否则就算executeUpdate()了也没有用}catch(Exception x){          System.out.println(x.getMessage());}}//单行插入if(e.getSource()==putinDuo){}//多行插入if(e.getSource()==putinDan){}//子查询插入}}


原创粉丝点击