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)
{
}//子查询插入
}
}
DB2 亲身实例(GUI界面) 加 笔记和注意事项
最新推荐文章于 2020-06-27 21:53:58 发布