求助大佬,救救孩子吧!!!

m0_73989098 2023-06-08 20:11:03

  本人Java菜鸟,跟着网上做了一个酒店管理系统,用Java Swing做的,添加功能都能正常运行,可是在删除和修改时,出现空指针问题,还有一个查询时,出现sql语句错误,实在想不到招了,求区里大佬求助

一下是问题:

 

 

 以下是代码:

删除:

package view;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

import dao.HotelTypeDao;
import model.HotelType;
import util.DbUtill;
import util.StringUtill;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.awt.event.ActionEvent;

public class HotelDel extends JInternalFrame {
	private JTextField delNotxt;
	
	private DbUtill dbUtill = new DbUtill();
	private HotelTypeDao hotelTypeDao;


	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					HotelDel frame = new HotelDel();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public HotelDel() {
		setTitle("删除");
		setIconifiable(true);
		setClosable(true);
		setBounds(100, 100, 613, 421);
		
		JLabel lblNewLabel = new JLabel("删除的房间号");
		lblNewLabel.setFont(new Font("Dialog", Font.BOLD, 25));
		
		delNotxt = new JTextField();
		delNotxt.setColumns(10);
		
		JButton btnNewButton = new JButton("确认删除");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				hotelDelActionPerformed(e);
			}
		});
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 22));
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addGap(82)
							.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)
							.addGap(44)
							.addComponent(delNotxt, GroupLayout.PREFERRED_SIZE, 197, GroupLayout.PREFERRED_SIZE))
						.addGroup(groupLayout.createSequentialGroup()
							.addGap(215)
							.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap(106, Short.MAX_VALUE))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(131)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(delNotxt, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel))
					.addPreferredGap(ComponentPlacement.RELATED, 114, Short.MAX_VALUE)
					.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 49, GroupLayout.PREFERRED_SIZE)
					.addGap(63))
		);
		getContentPane().setLayout(groupLayout);
			
	}
	
	public void resetValue() {
		this.delNotxt.setText("");
	}
	
	private void hotelDelActionPerformed(ActionEvent evt) {
		String delno = delNotxt.getText();
		
		if (StringUtill.isEmpty(delno)) {
			JOptionPane.showMessageDialog(null, "删除号不能为空");
			return;
		}
		
		HotelType hotelType = new HotelType(delno);
		Connection con = null;
		
		try {
			con = dbUtill.getCon();
			int delNum = hotelTypeDao.del(con, hotelType);
			if (delNum==1) {
				JOptionPane.showMessageDialog(null, "删除成功");
				this.resetValue();
			}else {
				JOptionPane.showMessageDialog(null, "删除失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "删除失败");
		}finally {
			try {
				dbUtill.closeCon(con);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
}

修改:

package view;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;

import dao.HotelTypeDao;
import model.HotelType;
import util.DbUtill;
import util.StringUtill;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.awt.event.ActionEvent;

public class HotelAlt extends JInternalFrame {
	private JTextField yudingNoText;
	private JTextField yudingStaText;
	
	private DbUtill dbUtill = new DbUtill();
	private HotelTypeDao hotelTypeDao;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					HotelAlt frame = new HotelAlt();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public HotelAlt() {
		setTitle("预定");
		setClosable(true);
		setIconifiable(true);
		setBounds(100, 100, 677, 489);
		
		JLabel lblNewLabel = new JLabel("预定房间号");
		lblNewLabel.setFont(new Font("Dialog", Font.BOLD, 19));
		
		JLabel lblNewLabel_1 = new JLabel("修改房间状态");
		lblNewLabel_1.setFont(new Font("宋体", Font.BOLD, 21));
		
		yudingNoText = new JTextField();
		yudingNoText.setColumns(10);
		
		yudingStaText = new JTextField();
		yudingStaText.setColumns(10);
		
		JButton btnNewButton = new JButton("确认");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				hotelAltActionPerformed(e);
			}


		});
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 23));
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(120)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 145, GroupLayout.PREFERRED_SIZE))
					.addGap(69)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(yudingStaText, GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE)
						.addComponent(yudingNoText, GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE))
					.addGap(202))
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(235)
					.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 124, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(308, Short.MAX_VALUE))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(127)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 43, GroupLayout.PREFERRED_SIZE)
						.addComponent(yudingNoText, GroupLayout.PREFERRED_SIZE, 29, GroupLayout.PREFERRED_SIZE))
					.addGap(57)
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addComponent(yudingStaText, GroupLayout.PREFERRED_SIZE, 32, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 45, GroupLayout.PREFERRED_SIZE))
					.addGap(90)
					.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(42, Short.MAX_VALUE))
		);
		getContentPane().setLayout(groupLayout);

	}
	
	//重置表单
		private void reserValue() {
			this.yudingNoText.setText("");
			this.yudingStaText.setText("");
		}
		
		
	private void hotelAltActionPerformed(ActionEvent evt) {
		String yudingNoText = this.yudingNoText.getText();
		String yudingStaText = this.yudingStaText.getText();
		if (StringUtill.isEmpty(yudingNoText)) {
			JOptionPane.showMessageDialog(null, "预定的房间号不能为空");
			return;
		}else if (StringUtill.isEmpty(yudingStaText)) {
			JOptionPane.showMessageDialog(null, "预定的状态不能为空");
			return;
		}
		
		HotelType hotelType = new HotelType(yudingNoText,yudingStaText);
		Connection con = null;
		
		try {
			con = dbUtill.getCon();
			int n = hotelTypeDao.update(con, hotelType);
			if (n==1) {
			JOptionPane.showMessageDialog(null, "酒店预定成功");
			this.reserValue();
			}else {
				JOptionPane.showMessageDialog(null, "酒店预定失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "酒店预定失败");
		}finally {
			try {
				dbUtill.closeCon(con);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
}

查找:

package view;

import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;

import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import dao.HotelTypeDao;
import model.HotelType;
import util.DbUtill;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class HotelSel extends JInternalFrame {
	private JTable hoteltypetable;
	
	private DbUtill dbUtill = new DbUtill();
	private HotelTypeDao hotelTypeDao = new HotelTypeDao();
	private JTextField statxt;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					HotelSel frame = new HotelSel();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public HotelSel() {
		setIconifiable(true);
		setClosable(true);
		setBounds(100, 100, 834, 588);
		
		JScrollPane scrollPane = new JScrollPane();
		
		JLabel lblNewLabel = new JLabel("房间状态");
		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 21));
		
		statxt = new JTextField();
		statxt.setColumns(10);
		
		JButton btnNewButton = new JButton("查询");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				HotelTypeSerchActionPerformed(e);
			}

			
		});
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 21));
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(85)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addGap(50)
							.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 102, GroupLayout.PREFERRED_SIZE)
							.addGap(47)
							.addComponent(statxt, GroupLayout.PREFERRED_SIZE, 208, GroupLayout.PREFERRED_SIZE)
							.addGap(80)
							.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE))
						.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 656, GroupLayout.PREFERRED_SIZE))
					.addContainerGap(83, Short.MAX_VALUE))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(54)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(statxt, GroupLayout.PREFERRED_SIZE, 32, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 39, GroupLayout.PREFERRED_SIZE)
						.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 43, GroupLayout.PREFERRED_SIZE))
					.addGap(46)
					.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 374, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(46, Short.MAX_VALUE))
		);
		
		hoteltypetable = new JTable();
		hoteltypetable.setModel(new DefaultTableModel(
			new Object[][] {
			},
			new String[] {
				"\u623F\u95F4\u53F7", "\u623F\u95F4\u7C7B\u578B", "\u623F\u95F4\u72B6\u6001", "\u623F\u95F4\u4EF7\u683C"
			}
		));
		scrollPane.setViewportView(hoteltypetable);
		getContentPane().setLayout(groupLayout);
		
		this.filltable(new HotelType());

	}
	
	
	//查找所有房间
	private void filltable(HotelType hotelType) {
		DefaultTableModel dtm = (DefaultTableModel)hoteltypetable.getModel();
		dtm.setRowCount(0);
		Connection con = null;
		try {
			con = dbUtill.getCon();
			ResultSet rs = hotelTypeDao.list(con, hotelType);
			while (rs.next()) {
				Vector v = new Vector();
				v.add(rs.getString("h_no"));
				v.add(rs.getString("h_name"));
				v.add(rs.getString("h_sta"));
				v.add(rs.getString("h_price"));
				dtm.addRow(v);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				dbUtill.closeCon(con);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	//房间状态查询
	private void HotelTypeSerchActionPerformed(ActionEvent evt) {
		String sta = this.statxt.getText();
		HotelType hotelType = new HotelType();
		hotelType.setH_sta(sta);
		this.filltable(hotelType);
	}
}

sql语句:

package dao;


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

import model.HotelType;
import util.StringUtill;

public class HotelTypeDao {
	
	//酒店添加
	public int add(Connection con,HotelType hotelType) throws Exception{
		String sql = "insert into hoteltype values(?,?,?,?);";
		PreparedStatement pstmt = con.prepareStatement(sql);
		pstmt.setString(1,hotelType.getH_no());
		pstmt.setString(2,hotelType.getH_name());
		pstmt.setString(3,hotelType.getH_sta());
		pstmt.setString(4, hotelType.getH_price());
		return pstmt.executeUpdate();
	}
	
	
	//删除
	public int del(Connection con,HotelType hotelType)  throws Exception{
		String sql = "delete from hoteltype where h_no=?";
		PreparedStatement pstmt = con.prepareStatement(sql);
		pstmt.setString(1, hotelType.getH_no());
		return pstmt.executeUpdate();
	}
	
	//修改
	public int update(Connection con,HotelType hotelType) throws Exception {
		String sql = "update hoteltype set h_sta=? where h_no=?";
		PreparedStatement pstmt = con.prepareStatement(sql);
		pstmt.setString(1, hotelType.getH_sta());
		pstmt.setString(2, hotelType.getH_no());
		return pstmt.executeUpdate();
	}
	
	public ResultSet list(Connection con,HotelType hotelType) throws Exception {
		StringBuffer sb = new StringBuffer("select * from hoteltype");
		if (StringUtill.isNotEmpty(hotelType.getH_sta())) {
			sb.append(" and h_sta like %"+ hotelType.getH_sta() + "%");
		}
		PreparedStatement pstm = con.prepareStatement(sb.toString().replaceFirst("and", "where"));
		return pstm.executeQuery();
	}
	

}

package model;

public class HotelType {
	
	private String h_no;
	private String h_name;
	private String h_sta;
	private String h_price;
	
	
	
	public HotelType() {
		super();
	}
	
	
	public HotelType(String h_no, String h_name, String h_sta, String h_price) {
		super();
		this.h_no = h_no;
		this.h_name = h_name;
		this.h_sta = h_sta;
		this.h_price = h_price;
	}
	
	
	public  HotelType(String yuding_no,String yuding_sta) {
		super();
		this.h_no = yuding_no;
		this.h_sta = yuding_sta;
	}
	
	public  HotelType(String delno) {
		super();
		this.h_no = delno;
	}


	public String getH_no() {
		return h_no;
	}
	public void setH_no(String h_no) {
		this.h_no = h_no;
	}
	public String getH_name() {
		return h_name;
	}
	public void setH_name(String h_name) {
		this.h_name = h_name;
	}
	public String getH_sta() {
		return h_sta;
	}
	public void setH_sta(String h_sta) {
		this.h_sta = h_sta;
	}
	public String getH_price() {
		return h_price;
	}
	public void setH_price(String h_price) {
		this.h_price = h_price;
	}
}

 

...全文
346 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

啥 啥 啥 写的啥跟啥

幻灰龙 06-08
  • 打赏
  • 举报
回复 1

@CSDN-Ada助手 请解决用户的这个问题。

  • 举报
回复
@幻灰龙 从代码中看,删除操作是从输入框中获取房间号,然后通过HotelTypeDao调用delete方法进行删除操作的。如果出现空指针问题,可能是因为在获取房间号时,输入框的值为null导致的。可以在删除前先判断输入框的值是否为空,并给出提示。 至于查询时出现的SQL语句错误,需要查看出现错误的SQL语句,并检查SQL语句是否正确。如果有问题可以将出错的SQL语句和错误信息一起提供,方便大家更好的帮助你解决问题。
幻灰龙 06-08
  • 举报
回复
@CSDN-Ada助手 核心是hotelTypeDao空指针了,原因是什么?
  • 举报
回复
@幻灰龙 从代码中可以看出,hotelTypeDao是在HotelDel类中定义的一个对象,在类中并没有为其赋值。因此,在调用hotelTypeDao对象的方法时就会出现空指针异常。解决方法可以在构造方法中为其赋值。可以在构造方法中添加如下代码: ```java hotelTypeDao = new HotelTypeDao(); ``` 这样即可解决空指针异常问题。
2条回复
幻灰龙 06-08
  • 打赏
  • 举报
回复

@CSDN-Ada助手 请写一个Java的例子,

  1. 创建一个Java类A,这个类含有一个dump方法,负责输出"Hello,World, I am A"
  2. 创建一个Java列B,在Java类B里面声明类A作为成员变量a
  3. 在类B的「构造函数」里【初始化】a
  4. 在类B里添加一个方法dump,在dump里调用a.dump输出,同时增加一句打印语句,输出"Nice to meet u, I am B"
  5. 在Java的入口程序的main函数里,使用类B声明一个变量b,调用b.dump
  6. 请解释,为什么Java的类里面声明了另外一个类的变量后,需要在类的构造函数里初始化对应的成员变量,否则程序会异常?
  • 举报
回复
@幻灰龙 好的,以下是Java的例子: ```java public class A { public void dump() { System.out.println("Hello,World, I am A"); } } public class B { private A a; public B() { a = new A(); } public void dump() { a.dump(); System.out.println("Nice to meet u, I am B"); } public static void main(String[] args) { B b = new B(); b.dump(); } } ``` 在Java中,类里面声明另外一个类的变量后,需要在类的构造函数里初始化对应的成员变量,因为Java中的成员变量需要在对象创建时进行初始化,否则会出现空指针异常。在本例中,类B中声明了一个成员变量a,通过在构造函数中调用new A()来初始化a,避免了空指针异常的出现。

290,966

社区成员

发帖
与我相关
我的任务
社区描述
一个有温度的 Java 爱好者社区,区长是 CSDN 头牌沉默王二,30万+读者,博客访问量 1000万+,全网屈指可数的博主~
社区管理员
  • 沉默王二
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧