JavaGui实训项目,连接数据库做一个简单的算命程序

本文介绍了如何使用Java和JDBC进行数据库连接,包括登录界面的可视化构建,以及如何实现用户验证和从数据库查询随机数的功能。展示了如何在Eclipse环境中使用插件创建界面,并使用JDBC层操作MySQL数据库。
摘要由CSDN通过智能技术生成

 思路

硬币有正反面,我们可以简单的用0和1,去替代,然后结果我们可以直接去查询数据库的内容

1.先看项目结构

2.登入界面

做一个简单的项目登入界面,我是用插件可视化,直接拖动的,下面是一个插件安装的教程,创建教程Eclipse开发环境下Java可视化界面编程_eclipse可视化界面代码-CSDN博客

选中这个,可以直接拖动你想要拖动的内容

选中你要拖动的内容,放进去就行了,我就不做演示,毕竟是一年的东西有点忘记了0.0

我们再去写连接数据库的JDBC层,死东西我就不讲了

package com.test.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConnection {
    // 加载jdbc连接mysql驱动
    public final static String driver = "com.mysql.cj.jdbc.Driver";
    // 连接mysql数据库的地址
    public final static String url = "jdbc:mysql://localhost:3306/life";
    // 连接mysql的用户名
    public final static String user = "root";
    // 连接mysql的密码
    public final static String pwd = "123";

    // 静态代码块加载jdbc的驱动
    static {
    	// driver点击用Surround with打印出异常
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 获取连接对象
    public static Connection getConn() {
        try {
            return DriverManager.getConnection(url, user, pwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 关闭连接,保证mysql的资源释放,能够充分运用
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 验证jdbc类的使用
    public static void main(String[] args) {
    	System.out.println(getConn());
    }
}

3.验证登入

先给登入按钮添加一个监听事件,去执行验证登入的逻辑

写一个LoginDao去验证登入

package com.test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.test.jdbc.DBConnection;

public class LoginDAO {
    public boolean validateUser(String username, String password) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            // 1.连接mysql
            conn = DBConnection.getConn();
            
            // 2.预编译sql执行
            String sql = "SELECT * FROM login WHERE Username = ? AND Password = ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, username);
            ps.setString(2, password);

            rs = ps.executeQuery();

            if (rs.next()) {
                return true; // 如果验证通过,返回 true
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 3.关闭数据库连接和相关资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
             } catch (SQLException e) {
                e.printStackTrace();
             }
        }
        return false;
    }
}

查询到了数据就会返回一个true,注册功能也是一样的

4.随机生成一个数组

我是直接用一个数组去随机生成了1,2组成了一个数组串,用判断写一个正反面

5.写一个Dao层查询随机生成的数组

点击查找我的好运就可以出现一个面板,把查询到的结果去显示在面板中,数据库的内容我没有写,可以直接去写一下

这是数组生成和图片正反面显示的页面

package com.test.ui;

import javax.swing.*;
import com.test.dao.ShowDao;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class Main {
	public static void main(String[] args) {
		Random ra = new Random();
		int one = ra.nextInt(2) + 1;
		int two = ra.nextInt(2) + 1;
		int three = ra.nextInt(2) + 1;
		int four = ra.nextInt(2) + 1;
		int five = ra.nextInt(2) + 1;
		// 随机组合的五个数字再变成int类型
		String numberStr = String.valueOf(one) + String.valueOf(two) + String.valueOf(three) + String.valueOf(four)
				+ String.valueOf(five);
		int number = Integer.parseInt(numberStr);
		StringBuilder meesage = ShowDao.getLuckiness(number);
		// 创建主窗口
		JFrame frame = new JFrame("随机数字面板");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 创建数字面板
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1, 5));

		// 创建正面和反面的图像对象
		ImageIcon positiveImage = new ImageIcon("C:/Users/eclipse-workspace/life/src/com/my/picture/正面.png");
		ImageIcon negativeImage = new ImageIcon("C:/Users/eclipse-workspace/life/src/com/my/picture/反面.png");

		int imageSize = 100; // 图片大小

		// 创建数字标签
		JLabel label1 = createLabel(one, positiveImage, negativeImage, imageSize);
		JLabel label2 = createLabel(two, positiveImage, negativeImage, imageSize);
		JLabel label3 = createLabel(three, positiveImage, negativeImage, imageSize);
		JLabel label4 = createLabel(four, positiveImage, negativeImage, imageSize);
		JLabel label5 = createLabel(five, positiveImage, negativeImage, imageSize);

		// 将数字标签添加到数字面板
		panel.add(label1);
		panel.add(label2);
		panel.add(label3);
		panel.add(label4);
		panel.add(label5);

		// 创建查询运气值的按钮
		JButton luckButton = new JButton("查找我的运气值");
		JButton replayButton = new JButton("再来一次");
		luckButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 计算运气值
				StringBuilder message = ShowDao.getLuckiness(number);
				Show s = new Show(message.toString()); 
				// 将StringBuilder转换为字符串,并传递给Show的构造方法
				s.setVisible(true);
			}
		});
		replayButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 重新再来一次
				// 关闭当前窗口
				frame.dispose();
				// 重新启动应用程序
				Main.main(null);
			}
		});
		// 创建按钮面板并添加按钮
		JPanel buttonPanel = new JPanel();
		buttonPanel.add(luckButton);
		buttonPanel.add(replayButton);

		// 将数字面板和按钮面板添加到主窗口中
		frame.getContentPane().add(panel, BorderLayout.CENTER);
		frame.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
		
		// 计算屏幕的中心位置
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int centerX = (screenSize.width - frame.getWidth()) / 2;
		int centerY = (screenSize.height - frame.getHeight()) / 2;

		// 移动主窗口到中心位置
		frame.setLocation(centerX, centerY);

		// 显示窗口
		frame.pack();
		frame.setVisible(true);
	}

	// 创建图像标签
	private static JLabel createLabel(int number, ImageIcon positiveImage, ImageIcon negativeImage, int size) {
		Image image;
		if (number == 1) {
			image = positiveImage.getImage();
		} else if (number == 2) {
			image = negativeImage.getImage();
		} else {
			// 处理无效数字情况
			return new JLabel("无效数字");
		}
		// 缩放图像
		Image resizedImage = image.getScaledInstance(size, size, Image.SCALE_SMOOTH);

		ImageIcon scaledImageIcon = new ImageIcon(resizedImage);
		// 出现数字
//        JLabel label = new JLabel(String.valueOf(number), scaledImageIcon, SwingConstants.CENTER);
		// 隐藏数字
		JLabel label = new JLabel(scaledImageIcon, SwingConstants.CENTER);
		label.setHorizontalTextPosition(SwingConstants.CENTER);
		label.setVerticalTextPosition(SwingConstants.BOTTOM);
		return label;
	}

	public void setVisible(boolean b) {
		// TODO Auto-generated method stub
	}
}
package com.test.dao;

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

import com.test.jdbc.DBConnection;

public class ShowDao {
	public static StringBuilder getLuckiness(int number) {
		String sql = "SELECT Luckiness FROM LuckyNumbers WHERE Number = ?";
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;

		// 定义一个StringBuilder用于接收数据库查询到的内容
		StringBuilder sb=new StringBuilder();

		try {
			conn = DBConnection.getConn();
			pst = conn.prepareStatement(sql);
			pst.setInt(1, number);
			rs = pst.executeQuery();

			while (rs.next()) {
				// 将查询出的内容添加到list中
				sb.append(rs.getString("Luckiness"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			try {
				if (rs != null)
					rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				if (pst != null)
					pst.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return  sb;
	}
}

项目源码,里面有jar包,链接: https://pan.baidu.com/s/1gl3t8Fp1s_-OJg65EPy3Yw 提取码: 3fyy 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值