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

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();//JPanel
	
	JButton 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。批量的情况下用PreparedStatement
	
	
	Container 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);//在类内定义监听器时候用this
		putinDuo.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语句陈述,用来excute
			ResultSet 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)
		{
		}//子查询插入
		
	}
	
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值