关于JDBC的初级项目实现商品库存管理功能

(一)库存管理涉及到对数据库的操作

1.首先进行mysql的安装与学习并连接到eclipse中

  • 输入mysql -u root -p
  • 再输入验证密码 获取数据库的相关信息(如图所示)。
    在这里插入图片描述

再将mysql 中的jar包导入eclipse中并且建立连接

在这里插入图片描述

首先导入和数据库一起下载的jar 包
导入步骤为首先在eclipse中所用的项目里创建一个lib的文件夹------再将jar包复制进去----再右键点击jar包添加至构建路径完成导包。
  • JDBC的使用可以按照以下几个步骤进行:

(1)通过DriverManager获取数据库连接。

(2)通过Connection对象获取Statement对象。

(3)使用Statement执行SQL语句。

(4)操作ResultSet结果集。

2.商品库存管理涉及到页面的制作,所以需要进行GUI的入门学习。

GUI全称是(Graphics User Interface图形用户界面),Java GUI就是java语言为我们桌面图形化程序提供的一整套包。
Java提供了三个主要包做GUI开发:

javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
java.awt 包 – 主要提供字体/布局管理器
java.awt.event 包 – 事件处理,后台功能的实现。

关于商品库存管理系统的制作

  • 1.首先建立inventory数据库,再建立有关商品的表设置表中数据类型如图所示:
  • 在这里插入图片描述
再添加一些数据

在这里插入图片描述

再通过eclipse 建立数据库的连接

		static Connection root;
		static {
			
			try {
				root=DriverManager.getConnection("jdbc:mysql://localhost/inventory","root","1234");
				
				
				
			}
			catch(SQLException e) {
				
				e.printStackTrace();
			}
			
			
			
		}
  • 此商品库存管理系统的功能包括添加商品,删除商品,查询商品,修改商品,以及实时更新商品的功能。
  • 1.1 添加商品通过数据库的 insert into product values (name,num,price)操作实现添加操作。
	public static void add(Product products) {
		// TODO Auto-generated method stub
			
			
		
			try {
				
			
				PreparedStatement  preparedStatement=(PreparedStatement) root.prepareStatement("insert into product(name,num,price) values(?,?,?)");
				//使用预处理语句对象
				preparedStatement.setString(1,products.getName());
				preparedStatement.setInt(2,products.getNum());
				preparedStatement.setDouble(3,products.getPrice());
				preparedStatement.execute();
				
			}
			catch(SQLException e){
				
				e.printStackTrace();
				
				
			}
		
		
	}
	
  • 1.2删除商品通过获取商品的唯一ID执行删除操作
public static void del(Product product)
	{
		
		try {
			

			PreparedStatement  preparedStatement=(PreparedStatement) root.prepareStatement("delete from product where id="+product.getId());
			//使用预处理语句对象
			preparedStatement.execute();
			
			
		}
		catch(SQLException e){
			
			e.printStackTrace();
			
			
		}
		
		}

1.3查询商品通过输入商品的ID进行查询并返回当前ID的所有数据

public static List select1(Product product)
	{		List list =new ArrayList();
	try {
		String select="select *from product where id ="+product.getId();			
		Statement statement = (Statement) root.createStatement();
		ResultSet resultSet=statement.executeQuery(select);
		while(resultSet.next())
		{
		Product product1=new Product();
		product1.setId(resultSet.getInt(1));
		product1.setName(resultSet.getString(2));
		product1.setNum(resultSet.getInt(3));
		product1.setPrice(resultSet.getDouble(4));
			list.add(product1);
		
		}
	
		
}
catch(SQLException e){

e.printStackTrace();


}
return list;


}

1.4修改商品通过点击想修改的商品获取当前商品的相应信息并把想要修改的内容输入进文本框然后进行修改,单击确定完成修改并更新于当前界面。(更新输入操作将在后面讲解)这里先进行工具的实现。

public static void update(Product product)
	{
		
						try {

					PreparedStatement preparedStatement=root.prepareStatement("update product set name=?,num=?,price=? where id=?");		
					preparedStatement.setString(1,product.getName());
					preparedStatement.setInt(2,product.getNum());
					preparedStatement.setDouble(3,product.getPrice());
					preparedStatement.setInt(4,product.getId());
					
					preparedStatement.execute();
							
		}
		catch(SQLException e){
			
			e.printStackTrace();
			
			
		}
		
		
		
	}

1.5数据的更新操作就是通过数据库中的select 操作查询出当前所有的物品的信息并显示于当前界面。(这里运用了list集合操作,并将商品各类库存信息返回到界面中)


	public static Object[][] listToArray(List<Product>list)	
	{	Object[][] objects=new Object[list.size()][4];
			int i=list.size();
			for(int j=0;j<i;j++)
			{
				
				Product product= list.get(j);

	               objects[j][0]=product.getId();
	               objects[j][1]=product.getName();
	               objects[j][2]=product.getNum();
	               objects[j][3]=product.getPrice();
				//将数据库信息同步到jTable的表格中
			}

	
	
		return objects;
	

}	
所有的工具类函数如下所示:
package gui0530;



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.mysql.jdbc.Statement;


public class Utils {
			
		static Connection root;
		static {
			
			try {
				root=DriverManager.getConnection("jdbc:mysql://localhost/inventory","root","1234");
				
				
				
			}
			catch(SQLException e) {
				
				e.printStackTrace();
			}
			
			
			
		}
	
	
	
			
	
	public static void add(Product products) {
		// TODO Auto-generated method stub
			
			
		
			try {
				
			
				PreparedStatement  preparedStatement=(PreparedStatement) root.prepareStatement("insert into product(name,num,price) values(?,?,?)");
				//使用预处理语句对象
				preparedStatement.setString(1,products.getName());
				preparedStatement.setInt(2,products.getNum());
				preparedStatement.setDouble(3,products.getPrice());
				preparedStatement.execute();
				
			}
			catch(SQLException e){
				
				e.printStackTrace();
				
				
			}
		
		
	}
	
	//删除指定数据
	public static void del(Product product)
	{
		
		try {
			

			PreparedStatement  preparedStatement=(PreparedStatement) root.prepareStatement("delete from product where id="+product.getId());
			//使用预处理语句对象
			preparedStatement.execute();
			
			
		}
		catch(SQLException e){
			
			e.printStackTrace();
			
			
		}
		
		}
	public static void update(Product product)
	{
		
						try {

					PreparedStatement preparedStatement=root.prepareStatement("update product set name=?,num=?,price=? where id=?");		
					preparedStatement.setString(1,product.getName());
					preparedStatement.setInt(2,product.getNum());
					preparedStatement.setDouble(3,product.getPrice());
					preparedStatement.setInt(4,product.getId());
					
					preparedStatement.execute();
							
		}
		catch(SQLException e){
			
			e.printStackTrace();
			
			
		}
		
		
		
	}
	
	//查询一部分
	public static List select1(Product product)
	{		List list =new ArrayList();
	try {
		String select="select *from product where id ="+product.getId();			
		Statement statement = (Statement) root.createStatement();
		ResultSet resultSet=statement.executeQuery(select);
		while(resultSet.next())
		{
		Product product1=new Product();
		product1.setId(resultSet.getInt(1));
		product1.setName(resultSet.getString(2));
		product1.setNum(resultSet.getInt(3));
		product1.setPrice(resultSet.getDouble(4));
			list.add(product1);
		
		}
	
		
}
catch(SQLException e){

e.printStackTrace();


}
return list;


}
		
		
	
	
	
	//查询所有数据
	public static List select()
	{
		List list =new ArrayList();//创建一个list接受对象数据

		try {


		String select="select *from product";			
		Statement statement = (Statement) root.createStatement();
		ResultSet resultSet=statement.executeQuery(select);

				while(resultSet.next())
				{
				Product product=new Product();
				product.setId(resultSet.getInt(1));
				product.setName(resultSet.getString(2));
				product.setNum(resultSet.getInt(3));
				product.setPrice(resultSet.getDouble(4));
					list.add(product);//将product的信息加入到list的集合里面
				
				}
			
				
		}
		catch(SQLException e){
		
		e.printStackTrace();


}
		return list;
		
		
	}
	
	
	public static Object[][] listToArray(List<Product>list)	
	{	Object[][] objects=new Object[list.size()][4];
			int i=list.size();
			for(int j=0;j<i;j++)
			{
				
				Product product= list.get(j);

	               objects[j][0]=product.getId();
	               objects[j][1]=product.getName();
	               objects[j][2]=product.getNum();
	               objects[j][3]=product.getPrice();
				//将数据库信息同步到jTable的表格中再显示在窗口界面中
			}

	
	
		return objects;
	

}		

}


2.1创建商品类,并实现商品的各个方法。(包含各种变量的初始化及get,set和tostring方法)

  • 代码如下:
package gui0530;

public class Product {
	
	public Product(String name, int num, double price) {
		super();
		this.name = name;
		this.num = num;
		this.price = price;
	}

		public Product()
		{
			
			
		}



	private int id;
	private  String name;
	private int num;
	private double price;
	
	
	
	
	public int getId() {
		return id;
	}




	public void setId(int id) {
		this.id = id;
	}




	public String getName() {
		return name;
	}




	public void setName(String name) {
		this.name = name;
	}




	public int getNum() {
		return num;
	}




	public void setNum(int num) {
		this.num = num;
	}




	public double getPrice() {
		return price;
	}




	public void setPrice(double price) {
		this.price = price;
	}




	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}




	@Override
	public String toString() {
		return "Prouduct [name=" + name + "]";
	}

	
	
	
}

3.1 下面进行GUI页面的制作(包含页面制作及按钮制作)以及通过按钮调用前面的工具函数来实现所需要实现的功能。

  • 首先制作主界面(jFrame)
    包含查询,修改,添加,删除,刷新等按钮,
    再将按钮加入到jFrame的界面中,
    在将jTable放入jscroll中显示表头数据,
    再设置界面中按钮及表格的颜色,

		JFrame jFrame=new JFrame("库存管理");
		jFrame.setLayout(null);
		jFrame.setResizable(false);
		String src = "/gui0530/捕获.PNG";//这里路径要根据实际情况
        Image image = ImageIO.read(jFrame.getClass().getResource(src));
        jFrame.setIconImage(image);
		
JButton jButton1= new JButton("查询");
		JButton jButton2= new JButton("添加");
		JButton jButton3= new JButton("修改");
		JButton jButton4= new JButton("删除");
			jButton1.setBounds(50,20,80,20);//xy  w 宽h 高
		jButton2.setBounds(150,20,80,20);
		jButton3.setBounds(260,20,80,20);
		jButton4.setBounds(360,20,80,20);
		jButton1.setBackground(Color.ORANGE);
		jButton2.setBackground(Color.ORANGE);
		jButton3.setBackground(Color.ORANGE);
		jButton4.setBackground(Color.ORANGE);
		//设置按钮大小及按钮颜色
		//准备JTable表格组件
		String[] strings= {"序号","商品名称","库存","单价"};
		List list =Utils.select();
		Object[][] objects=Utils.listToArray(list);
		JTable jTable= new JTable(objects,strings);//二维在前列在后
		jTable.setForeground(Color.orange);
		jTable.setBackground(Color.darkGray);
		
		JScrollPane jScrollPane =new JScrollPane();
		jScrollPane.setViewportView(jTable);//将jtable放入jscroll里面显示表头数据
		jScrollPane.setBounds(50,40,390,200);
			//添加组件
		jFrame.add(jButton1);
		jFrame.add(jButton2);
		jFrame.add(jButton3);
		jFrame.add(jButton4);
		
	
		jFrame.add(jScrollPane);
		jFrame.setSize(500,500);
		jFrame.setLocation(430,300);
		jFrame.setVisible(true);
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

  • 得到如下主界面:
    在这里插入图片描述
    3.2 实现添加操作,这里要再建立一个关于添加键的界面,添加的内容应包含商品名称,库存,单价等标签,然后再在他们的每一个后面设置一个文本框方便输入数据,再设置一个确定按钮表示操作完成返回首界面。
  • 关于添加键的操作就要设置一个监听事件,点击添加按钮则弹出添加的界面,再对文本框进行操作。
  • 关于确定键也是设置一个监听事件,将文本框中的数据调用工具类读入到数据库中。
  • 完成操作即对首界面进行更新
  • 代码如下:
	JFrame addjFrame=new JFrame("添加");
		addjFrame.setLayout(null);
		addjFrame.setSize(300,300);
		addjFrame.setLocation(460,350);
		 addjFrame.setIconImage(image);
		 addjFrame.setResizable(false);
			//准备输入数据的文本框,和提示标签
		JTextField jTextField =new JTextField();
		JTextField jTextField1 =new JTextField();
		JTextField jTextField2=new JTextField();
			//标签组件
		JLabel jLabel=new JLabel("商品名称:");
		JLabel jLabel2=new JLabel("库存:");
		JLabel jLabel3=new JLabel("单价:");
		JButton jButton5= new JButton("确定");
		jButton5.setBackground(Color.CYAN);
			jButton5.setBounds(80,100,70,20);
		//第一组
		jLabel.setBounds(30,20,90,20);
		jTextField.setBounds(100,20,100,20);
		//第二组
		jLabel2.setBounds(30,50,90,20);
		jTextField1.setBounds(100,50,100,20);
		//第三组
		jLabel3.setBounds(30,80,90,20);
		jTextField2.setBounds(100,80,100,20);
		addjFrame.add(jButton5);//将确定键加入到添加界面中
		addjFrame.add(jTextField);
		addjFrame.add(jLabel);
		addjFrame.add(jTextField1);
		addjFrame.add(jLabel2);
		addjFrame.add(jTextField2);
		addjFrame.add(jLabel3);	
		//将文本框及标签加入到添加界面中
		jButton2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				
				addjFrame.setVisible(true);
				
		        
			}
		});
		//点击首界面的添加键则弹出添加页面
		jButton5.addActionListener(new ActionListener() {
	
	
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
				  p=jTable.getSelectedRow();//获取行标签
				 
				  if(p==-1)
				  {
					  String text1=jTextField.getText();
					  String text2=jTextField1.getText();
					  String text3=jTextField2.getText();
					  int num=Integer.parseInt(text2);
					  double price=Double.parseDouble(text3);
						Utils.add(new Product(text1,num,price));
						//匿名对象
						//new Products(text1,num,price)
						//Product products =new Product();
						//清空文本数据
						jTextField.setText("");
						 jTextField1.setText("");
						 jTextField2.setText("");
						 List list =Utils.select();
						 Object[][] objects=Utils.listToArray(list);
						  jTable.setModel(new DefaultTableModel(objects,strings));
							addjFrame.setVisible(false);  
				  }
}

  • 添加如图所示:
  • 在这里插入图片描述
    在这里插入图片描述

如图完成添加

3.3关于修改操作:修改操作所要修改的数据可为商品名称,库存和单价,这里其实可以运用之前的添加界面,只需把添加界面的标题改为修改,再把确定操作的监听事件改为修改操作的监听事件,即可完成修改。再返回首界面进行更新。
- 代码如下:
- 其中index用来接收所要选的行,通过二维数组objects再获取选中行的数据对其进行修改,再同步到数据库中更新显示在首界面。

//这是修改数据
jButton3.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		addjFrame.setTitle("修改");
		addjFrame.setVisible(true);
		
		//定义index来接收被选中的行
			int index=jTable.getSelectedRow();
			System.out.println(index);
			if(index!=-1)
			{
					
				jTextField.setText(String.valueOf(objects[index][1]));    
				jTextField1.setText(String.valueOf(objects[index][2]));
				jTextField2.setText(String.valueOf(objects[index][3]));
			}
		else {
			System.out.println("请选择一行修改");
			
		}
			
		
	}
});
 						//先确定修改哪一条数据
					  //第一步将object类型转化为String类型
					  //第二步将String类型转化为int类型
					  String strId=String.valueOf(objects[p][0]);
					  int intId=Integer.parseInt(strId);
					  String name=jTextField.getText();
					  String strNum=jTextField1.getText();
					  int intNum=Integer.parseInt(strNum);
					  String strPrice=jTextField2.getText();  
					  double intPrice=Double.parseDouble(strPrice);
					  //将获取的数据封装到product中
					  
					  Product product =new Product();
					  product.setId(intId);
					  product.setName(name);
					  product.setNum(intNum);
					  product.setPrice(intPrice);
					  System.out.println(p);
					//调用工具类,将数据修改存进数据库  
					  Utils.update(product);
					  List list =Utils.select();
						Object[][] objects=Utils.listToArray(list);
					  //将更新显示于首页中
					  jTable.setModel(new DefaultTableModel(objects,strings));
					  
					  addjFrame.setVisible(false);//结束自动关闭当前窗口  


  • 修改如图所示(先选中一行再做修改)

在这里插入图片描述
在这里插入图片描述

如图完成修改并更新于主界面

3.4删除操作,首先是做一个删除界面,这里是通过获取商品ID而进行删除的,所以我们的删除界面应该包括商品标签,商品文本框,以及确定按钮。
首先是对首界面的删除做一个监听事件点击弹出删除界面,然后再输入想删除的ID,再对确定做一个监听事件,读取文本框的内容并删除文本框所对应数据库的商品内容,并实现更新。

  • 代码如下:
	JFrame deljFrame=new JFrame("删除");
		deljFrame.setLayout(null);
		deljFrame.setSize(300,300);
		deljFrame.setLocation(460,350);
		JLabel jLabel4=new JLabel("商品ID ");
		JButton jButton7= new JButton("确定");
		JTextField jTextField3=new JTextField();
			jButton7.setBackground(Color.CYAN);
			//第四组删除界面
		jLabel4.setBounds(30,20,90,20);
		jTextField3.setBounds(100,20,100,20);
		jButton7.setBounds(80,100,70,20);
		deljFrame.add(jButton7);
		deljFrame.add(jTextField3);
		deljFrame.add(jLabel4);	
		jButton4.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
		
		
		deljFrame.setVisible(true);
		
	}
});
//这是删除确定键
jButton7.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
		
		String strid=jTextField3.getText();
		 int intId=Integer.parseInt(strid);
		 //通过获取文本id再传入product中的setid
		 Product product= new Product();
		 product.setId(intId);
		
		 //再调用del方法对其进行删除操作
		Utils.del(product);
		List list =Utils.select();
		Object[][] objects=Utils.listToArray(list);
		jTable.setModel(new DefaultTableModel(objects,strings));
		//更新删除页面
		  deljFrame.setVisible(false);//结束自动关闭当前窗口
	}
});

  • 删除如下图所示
    在这里插入图片描述
    在这里插入图片描述

如图删除完成并更新于主界面

3.5 查询操作,这里的查询操作是通过获取商品ID来实现的,通过查询获得商品名,商品库存以及商品的价格。查询界面其实和上述的删除界面是差不多的,只是关于按钮所监听的事件是不同的。所以只需通过更改按钮操作即可完成查询的一系列操作。
并更新于主界面。

  • 这里列出按钮后的代码:
//这是查询
		jButton1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				
				
				seljFrame.setVisible(true);
				
			}
		});
		
		//这是单个查询键
	jButton9.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
				
			String strid=jTextField4.getText();
			 int intId=Integer.parseInt(strid);
			 Product product= new Product();
			 product.setId(intId);
				Utils.select1(product);
				List list =Utils.select1(product);
				Object[][] objects=Utils.listToArray(list);
				jTable.setModel(new DefaultTableModel(objects,strings));
				  seljFrame.setVisible(false);//结束自动关闭当前窗口
			
		}
	});


  • 结果如图所示:

在这里插入图片描述

在这里插入图片描述

如图查询成功

3.6 刷新操作,即实时显示当前页面的各个数据,这个操作不用设置对页面的操作,可以直接对刷新按钮添加监听事件。(刷新顾名思义就是对表格中的所有数据进行查询操作并且将查询数据显示在主界面中)

  • Parts:前面的实时刷新也是进行了此刷新操作,就省去了按步骤刷新的操作。
  • 代码如下所示:
jButton8.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
			List list =Utils.select();
			Object[][] objects1=Utils.listToArray(list);
			//通过objects1将list中的表格数据显示到主界面jtable的表格中
			jTable.setModel(new DefaultTableModel(objects1,strings));
			
		}
	});	
		

  • 刷新操作如下图所示:
    在这里插入图片描述
    在这里插入图片描述

如图刷新完成

主函数的所有代码如下所示:

package gui0530;

import java.awt.Color;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class Main {
			static int p;
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//准备JFrame位置
		
		
		JFrame jFrame=new JFrame("库存管理");
		jFrame.setLayout(null);
		jFrame.setResizable(false);
		String src = "/gui0530/捕获.PNG";//这里路径要根据实际情况
        Image image = ImageIO.read(jFrame.getClass().getResource(src));
        jFrame.setIconImage(image);
        
        
        JFrame  seljFrame=new JFrame("查询管理");
        seljFrame.setLayout(null);
		seljFrame.setResizable(false);
		seljFrame.setSize(300,300);
		seljFrame.setLocation(460,350);
		 seljFrame.setIconImage(image);
        
		JFrame addjFrame=new JFrame("添加");
		addjFrame.setLayout(null);
		addjFrame.setSize(300,300);
		addjFrame.setLocation(460,350);
		 addjFrame.setIconImage(image);
		 addjFrame.setResizable(false);
		 
		 
		JFrame deljFrame=new JFrame("删除");
		deljFrame.setLayout(null);
		deljFrame.setSize(300,300);
		deljFrame.setLocation(460,350);
		
		
        deljFrame.setIconImage(image);
		deljFrame.setResizable(false);
		//addjFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);把整个都关了
		
		//关于刷新
		JButton jButton8=new JButton("刷新");
		jButton8.setBounds(200,260,80,20);
		jFrame.add(jButton8);
		jButton8.setBackground(Color.ORANGE);
		
		//准备输入数据的文本框,和提示标签
		JTextField jTextField =new JTextField();
		JTextField jTextField1 =new JTextField();
		JTextField jTextField2=new JTextField();
		JTextField jTextField3=new JTextField();
		JTextField	jTextField4=new JTextField();
		
		//标签组件
		JLabel jLabel=new JLabel("商品名称:");
		JLabel jLabel2=new JLabel("库存:");
		JLabel jLabel3=new JLabel("单价:");
		JLabel jLabel4=new JLabel("商品ID ");
		JLabel jLabel5=new JLabel("商品ID ");
		JButton jButton5= new JButton("确定");
		
		JButton jButton7= new JButton("确定");
		JButton jButton9= new JButton("确定");
		
		jButton5.setBackground(Color.CYAN);
		jButton7.setBackground(Color.CYAN);
		jButton9.setBackground(Color.CYAN);
		//第一组
		jLabel.setBounds(30,20,90,20);
		jTextField.setBounds(100,20,100,20);
		//第二组
		jLabel2.setBounds(30,50,90,20);
		jTextField1.setBounds(100,50,100,20);
		//第三组
		jLabel3.setBounds(30,80,90,20);
		jTextField2.setBounds(100,80,100,20);
		//第四组删除界面
		jLabel4.setBounds(30,20,90,20);
		jTextField3.setBounds(100,20,100,20);
		//第五组查询界面
		jLabel5.setBounds(30,20,90,20);
		jTextField4.setBounds(100,20,100,20);
		
		
		
		jButton5.setBounds(80,100,70,20);
		jButton7.setBounds(80,100,70,20);
		jButton9.setBounds(80,100,70,20);
		addjFrame.add(jButton5);
		deljFrame.add(jButton7);
		addjFrame.add(jTextField);
		addjFrame.add(jLabel);
		addjFrame.add(jTextField1);
		addjFrame.add(jLabel2);
		addjFrame.add(jTextField2);
		addjFrame.add(jLabel3);
		deljFrame.add(jTextField3);
		deljFrame.add(jLabel4);
		seljFrame.add(jTextField4);
		seljFrame.add(jLabel5);
		seljFrame.add(jButton9);
		
		//准备按钮对象
		JButton jButton1= new JButton("查询");
		JButton jButton2= new JButton("添加");
		JButton jButton3= new JButton("修改");
		JButton jButton4= new JButton("删除");
		
		jButton1.setBounds(50,20,80,20);//xy  w 宽h 高
		jButton2.setBounds(150,20,80,20);
		jButton3.setBounds(260,20,80,20);
		jButton4.setBounds(360,20,80,20);
		jButton1.setBackground(Color.ORANGE);
		jButton2.setBackground(Color.ORANGE);
		jButton3.setBackground(Color.ORANGE);
		jButton4.setBackground(Color.ORANGE);
		//准备JTable表格组件
		String[] strings= {"序号","商品名称","库存","单价"};
		List list =Utils.select();
		Object[][] objects=Utils.listToArray(list);//存储的是关于商品的二维数组
		JTable jTable= new JTable(objects,strings);//二维在前列在后
		jTable.setForeground(Color.orange);
		jTable.setBackground(Color.darkGray);
		
		JScrollPane jScrollPane =new JScrollPane();
		jScrollPane.setViewportView(jTable);//将jtable放入jscroll里面显示表头数据
		jScrollPane.setBounds(50,40,390,200);
		
		
		
		//这是查询
		jButton1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				
				
				seljFrame.setVisible(true);
				
			}
		});

		
		//添加事件
jButton2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				
				addjFrame.setVisible(true);
				
		        
			}
		});


//这是修改数据
jButton3.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		addjFrame.setTitle("修改");
		addjFrame.setVisible(true);
		
		//定义index来接收被选中的行
			int index=jTable.getSelectedRow();
			System.out.println(index);
			if(index!=-1)
			{
					
				jTextField.setText(String.valueOf(objects[index][1]));    
				jTextField1.setText(String.valueOf(objects[index][2]));
				jTextField2.setText(String.valueOf(objects[index][3]));
			}
		else {
			System.out.println("请选择一行修改");
			
		}
			
		
	}
});
		



//这是删除数据
jButton4.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
		
		
		deljFrame.setVisible(true);
		
	}
});
//这是添加或修改数据	
jButton5.addActionListener(new ActionListener() {
	
	
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
				  p=jTable.getSelectedRow();//获取行标签
				 
				  if(p==-1)
				  {
					  String text1=jTextField.getText();
					  String text2=jTextField1.getText();
					  String text3=jTextField2.getText();
					  int num=Integer.parseInt(text2);
					  double price=Double.parseDouble(text3);
						Utils.add(new Product(text1,num,price));
						//匿名对象
						//new Products(text1,num,price)
						//Product products =new Product();
						//清空文本数据
						jTextField.setText("");
						 jTextField1.setText("");
						 jTextField2.setText("");
						 List list =Utils.select();
						 Object[][] objects=Utils.listToArray(list);
						  jTable.setModel(new DefaultTableModel(objects,strings));
							addjFrame.setVisible(false);  
				  }
				  else {
					  //先确定修改哪一条数据
					  //第一步将object类型转化为String类型
					  //第二步将String类型转化为int类型
					  String strId=String.valueOf(objects[p][0]);
					  int intId=Integer.parseInt(strId);
					  String name=jTextField.getText();
					  String strNum=jTextField1.getText();
					  int intNum=Integer.parseInt(strNum);
					  String strPrice=jTextField2.getText();  
					  double intPrice=Double.parseDouble(strPrice);
					  //将获取的数据封装到product中
					  
					  Product product =new Product();
					  product.setId(intId);
					  product.setName(name);
					  product.setNum(intNum);
					  product.setPrice(intPrice);
					  System.out.println(p);
					//调用工具类,将数据修改存进数据库  
					  Utils.update(product);
					  List list =Utils.select();
						Object[][] objects=Utils.listToArray(list);
						jTable.setModel(new DefaultTableModel(objects,strings));
						//显示所更新的内容
						addjFrame.setVisible(false);//结束自动关闭当前窗口  
		  }				  	
		
	}
	
});






 //这是删除确定键
jButton7.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
		
		String strid=jTextField3.getText();
		 int intId=Integer.parseInt(strid);
		 Product product= new Product();
		 product.setId(intId);
		
		 
		Utils.del(product);
		List list =Utils.select();
		Object[][] objects=Utils.listToArray(list);
		jTable.setModel(new DefaultTableModel(objects,strings));
		  deljFrame.setVisible(false);//结束自动关闭当前窗口
	}
});
 
 

//这是刷新键
	jButton8.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
			List list =Utils.select();
			Object[][] objects1=Utils.listToArray(list);
			jTable.setModel(new DefaultTableModel(objects1,strings));
			
		}
	});	
		
	
		//这是单个查询键
	jButton9.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
				
			String strid=jTextField4.getText();
			 int intId=Integer.parseInt(strid);
			 Product product= new Product();
			 product.setId(intId);
				Utils.select1(product);
				List list =Utils.select1(product);
				Object[][] objects=Utils.listToArray(list);
				jTable.setModel(new DefaultTableModel(objects,strings));
				  seljFrame.setVisible(false);//结束自动关闭当前窗口
			
		}
	});
		
		
		
		//添加组件
		jFrame.add(jButton1);
		jFrame.add(jButton2);
		jFrame.add(jButton3);
		jFrame.add(jButton4);
		
	
		jFrame.add(jScrollPane);
		jFrame.setSize(500,500);
		jFrame.setLocation(430,300);
		jFrame.setVisible(true);
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

				
				
				
	}

}


  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值