1.DB.java
2.BaseDao.java
3.两个窗体
1. DB.java
完整代码
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DB {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() throws SQLException{
return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shangpin?characterEncoding=utf-8",
"root", "1234");
}
public static void closeAll(Connection conn){
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws SQLException {
System.out.println(getConn());
}
}
2. BaseDao.java
完整代码
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
static Connection conn;
static PreparedStatement pst;
static ResultSet rs;
// 查询
public static ResultSet cx(String sql) {
try {
conn = DB.getConn();
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
// 增删改
public static boolean zsg(String sql) {
try {
conn = DB.getConn();
pst = conn.prepareStatement(sql);
return pst.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.closeAll(conn);
}
return false;
}
}
3. 两个窗体中的部分代码:
① 程序一开始执行时,需要加载显示数据:
主窗体中-修改构造器中的代码
/** 修改构造器,增加添加调用语句 */
public ZhuYe() {
initComponents();
//在构造器中增加调用初始表格的方法
initTable("select * from tb_goods");
}
② 定义初始化表格的方法:
主窗体中-完整代码
//初始化表格的方法
private void initTable(String sql) {
//1.准备好所有的数据,放入 data 中
Vector data = new Vector();
ResultSet rs = BaseDao.cx(sql); //查询数据库
try {
while (rs.next()) {
Vector line = new Vector(); // line 代表存放一行数据的集合
int id = rs.getInt("goodId");
String name = rs.getString("goodName");
int num = rs.getInt(3);
double pric = rs.getDouble(4);
line.add(id);
line.add(name);
line.add(num);
line.add(pric);
data.add(line); //将当前行存入大的data中
}
} catch (SQLException e) {
e.printStackTrace();
}
//2.准备好标题文字,放入 bt 中
Vector bt = new Vector(); //bt 用于存放标题
bt.add("商品编号");
bt.add("商品名字");
bt.add("商品数量");
bt.add("商品价格");
//3.最终任务就是用上面准备好的 数据 和 标题 填充 表格
jTable1.setModel(new DefaultTableModel(data, bt));
}
③ 点击查询按钮时的操作—模糊查询:
完整代码-在主窗体中编写
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// 点击查询按钮要完成的工作:
//1.获取文本框的内容
String text = wbk.getText();
//2.拼接出一个模糊查询的sql语句
//select * from tb_goods where goodName like '%鼠标%'
String sql = "select * from tb_goods where goodName like '%" + text + "%'";
//3.调用初始化表格的方法
initTable(sql);
}
④ 实现删除按钮的功能:
完整代码-在主窗体中编写
/* 点击删除按钮时:
* 1.判断是否选中了某一行,如果没选中,则给出提示:"您未选择任何数据"
* 2.如果选中了某一行,则给出确认提示以防止误删除,"您确定要删除吗?",点击确定返回0,点击取消返回1。
* 3.执行删除:找到对应的行号---获取id---根据id组装sql语句---执行删除
* */
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
int rowCount = jTable1.getSelectedRowCount(); //获取选中的行数,如果为0,则说明没有选中任何行
if (rowCount == 0) {
JOptionPane.showMessageDialog(null, "您未选择任何数据");
} else {
int isOk = JOptionPane.showConfirmDialog(null, "您确定要删除吗?", "删除确认",
JOptionPane.YES_NO_OPTION);
// System.out.println(isOk);
if (isOk == 0) { //如果值是 0 ,说明点击了确定要删除
int selectedRow = jTable1.getSelectedRow(); //获取选中行的索引
int id = (Integer) jTable1.getModel()
.getValueAt(selectedRow, 0); //找到要删除的行的第一列,其实就是要删除的商品的编号
String sql = "delete from tb_goods where goodid=" + id; //拿到商品编号后,组装出删除的sql语句
boolean zsg = BaseDao.zsg(sql); //执行删除操作,并返回是否成功
if (zsg) {
JOptionPane.showMessageDialog(null, "删除成功!");
//删除后,调用表格初始化的方法,重新加载数据,使表格加载显示最新数据:
initTable("select * from tb_goods");
} else {
JOptionPane.showMessageDialog(null, "删除失败!");
}
}
}
}
⑤ 新增商品(在新增商品窗体中的 新增按钮上编写)
新增商品中
注意:新增完成后,返回主界面,自动刷新主界面数据,需要修改前面的代码
完整代码-在新增商品窗体中编写
// 新增商品的处理过程:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// 1. 获取所有文本框的数据
String idtext = tx1.getText().trim(); //tx1是第一个文本框的名字(改名了)
String name = tx2.getText().trim();
String numtext = tx3.getText().trim();
String pricetext = tx4.getText().trim();
//2.如果有没填写的文本框,则给出提示
if ("".equals(idtext) || "".equals(name) || "".equals(numtext)
|| "".equals(pricetext)) {
JOptionPane.showMessageDialog(null, "请录入完整信息!");
}
//3.如果所有的文本框都填写了,则进行插入操作:
else {
//准备并拼装新增sql语句,首先将文本框获取到的字符串 转换为数据库表中相对应的数据类型
int id = Integer.parseInt(idtext);
int num = Integer.parseInt(numtext);
double pri = Double.parseDouble(pricetext);
//拼装sql新增语句:
String sql = String.format("insert into tb_goods values(%d,'%s',%d,%f)", id, name,num, pri);
if (BaseDao.zsg(sql)) { //真正的执行,并根据返回结果给出提示
JOptionPane.showMessageDialog(null, "新增商品成功!");
// this.setVisible(false); //隐藏当前窗体
this.dispose(); // 销毁挡墙窗体
// 下面这一行是,自动刷新主页面,重新加载数据(根据考试要求进行编写,还需要修改其他地方,详见后面的**备注**)
// 注意:在主窗体中的 initTable 方法定义,需要由 private 改为 public,否则无法访问!!
// mp.initTable("SELECT * FROM tb_goods"); //mp:为主页窗体对象,在前面进行了定义。**详细在下面描述**
}
else{
JOptionPane.showMessageDialog(null, "新增商品失败!");
}
}
}
以下内容自行选择查看阅读,跟添加商品后,刷新加载主页数据有关。(可先掌握以上内容,上面内容熟练后,再练习下面内容)
备注:要实现新增完成后,自动刷新主窗体的功能,需要修改的地方:
①新增商品窗体中:
在新增窗体的顶部编写代码。声明定义一个主窗体的变量,用于接受主窗体对象;创建一个带参的构造器,用于在主窗体创建新增窗体对象,并传参
核心代码-在新增窗体中编写:文章来源:https://www.toymoban.com/news/detail-497081.html
public class Add extends javax.swing.JFrame {
//声明一个主窗体类型的属性
MainPage mp;
/** Creates new form Add */
public Add() {
initComponents();
}
//写一个带参数的构造器,给上面声明的主窗类型的变量体赋值
public Add(MainPage mp) {
initComponents();
this.mp = mp; //给上面声明的主窗类型的变量体赋值
}
②主窗体中:
在主窗体中编写代码。当点击新增商品按钮,打开新增商品窗体时,将本窗体窗体给新增商品窗体
完整代码-在主窗体中编写文章来源地址https://www.toymoban.com/news/detail-497081.html
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//将本窗体(主窗体)this 作为参数,传递给 添加商品的窗体,以便添加完商品后操作主窗体更新数据
Add add = new Add(this);
add.setVisible(true);
}
到了这里,关于Java桌面程序:加载数据-模糊查询-删除-新增的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!