java将数据存入mysql后,我用另外一个java class查看不了,请问怎么解决?

我在“请输入存款金额”的那个java class中,输入了存款1000的数额,弹窗显示存入成功
但是在后面这个java class点开余额查询,还是显示您的余额为0,怎么让我在存款后,在余额查询那里显示出来
数据表bank中的amount的列是显示有存入存款的金额,但是我跑这个java class,点击余额查询没有显示出应该有的余额,怎么解决?
第一个存入存款的java class

package bank.management.system;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Deposit extends JFrame implements ActionListener{

    JTextField t1,t2;
    JButton b1,b2,b3;
    JLabel l1,l2,l3;
    String pin;
    Deposit(String pin){
        this.pin = pin;
        ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("icons/atm.jpg"));
        Image i2 = i1.getImage().getScaledInstance(840, 1000, Image.SCALE_DEFAULT);
        ImageIcon i3 = new ImageIcon(i2);
        JLabel l3 = new JLabel(i3);
        l3.setBounds(0, 0, 800, 900);
        add(l3);

        l1 = new JLabel("请输入存款金额");
        l1.setForeground(Color.WHITE);
        l1.setFont(new Font("System", Font.BOLD, 16));

        t1 = new JTextField();
        t1.setFont(new Font("Raleway", Font.BOLD, 22));

        b1 = new JButton("存款");
        b2 = new JButton("返回");

        setLayout(null);

        l1.setBounds(130,280,400,18);
        l3.add(l1);

        t1.setBounds(130,330,320,25);
        l3.add(t1);

        b1.setBounds(300,470,150,35);
        l3.add(b1);

        b2.setBounds(300,510,150,35);
        l3.add(b2);

        b1.addActionListener(this);
        b2.addActionListener(this);

        setSize(800, 660);
        setUndecorated(true);
        setVisible(true);
        setLocation(250,10);
    }

    public void actionPerformed(ActionEvent ae){
        try{
            String amount = t1.getText();
            Date date = new Date();
            if(ae.getSource()==b1){
                if(t1.getText().equals("")){
                    JOptionPane.showMessageDialog(null, "请输入存款金额");
                }else{

                    Conn c1 = new Conn();
                    c1.s.executeUpdate("insert into bank values('"+pin+"', '"+date+"', 'Deposit', '"+amount+"')");
                    JOptionPane.showMessageDialog(null, "存款成功,存入金额: ¥. "+amount);
                    setVisible(false);
                    new Transactions(pin).setVisible(true);
                }
            }else if(ae.getSource()==b2){
                setVisible(false);
                new Transactions(pin).setVisible(true);
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }

    public static void main(String[] args){
        new Deposit("").setVisible(true);
    }
}


第二个查询存款的java class


package bank.management.system;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class MiniStatement extends JFrame implements ActionListener{
 
    JButton b1, b2;
    JLabel l1;
    MiniStatement(String pin){
        super("交易明细查询");
        getContentPane().setBackground(Color.WHITE);
        setSize(400,600);
        setLocation(20,20);
        
        l1 = new JLabel();
        add(l1);
        
        JLabel l2 = new JLabel("中国邮政银行");
        l2.setBounds(150, 20, 100, 20);
        add(l2);
        
        JLabel l3 = new JLabel();
        l3.setBounds(20, 80, 300, 20);
        add(l3);
        
        JLabel l4 = new JLabel();
        l4.setBounds(110, 430, 300, 20);
        add(l4);
        
        try{
            Conn c = new Conn();
            ResultSet rs = c.s.executeQuery("select * from login where pin = '"+pin+"'");
            while(rs.next()){
                l3.setText("Card Number:    " + rs.getString("cardnum").substring(0, 4) + "XXXXXXXX" + rs.getString("cardno").substring(12));
            }
        }catch(Exception e){}
             
        try{
            double balance = 0;
            Conn c1  = new Conn();
            ResultSet rs = c1.s.executeQuery("SELECT * FROM bank where pin = '"+pin+"'");
            while(rs.next()){
                l1.setText(l1.getText() + "<html>"+rs.getString("date")+ "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + rs.getString("type") + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + rs.getString("amount") + "<br><br><html>");
                if(rs.getString("type").equals("Deposit")){
                    balance += Double.parseDouble(rs.getString("amount"));
                }else{
                    balance -= Double.parseDouble(rs.getString("amount"));
                }
            }
            l4.setText("余额查询 "+balance);
        }catch(Exception e){
            e.printStackTrace();
        }
        
        setLayout(null);
        b1 = new JButton("退出");
        add(b1);
        
        b1.addActionListener(this);
        
        l1.setBounds(20, 140, 400, 200);
        b1.setBounds(20, 500, 100, 25);
    }
    public void actionPerformed(ActionEvent ae){
        this.setVisible(false);
    }
    
    public static void main(String[] args){
        new MiniStatement("").setVisible(true);
    }
    
}

img

img

img

数据库看下有没有相关的数据

你先确定下是不是真的存进数据库了?mysql打开表里看下。
第二,我都没看到你数据库有加载驱动,确定成功存入了?

  • 以下回答由chatgpt基于相关博客总结生成:

    由于缺乏具体代码和数据结构的信息,无法得知具体原因。但是在一般情况下,当存款成功后余额查询却显示为0的原因可能是没有正确更新余额信息。解决方法可能如下:

    1. 确认amount列是正确保存了存款金额,可以在mysql控制台中输入以下命令查看:

    select amount from bank where id=[账户id];

    1. 确认查询余额的java class中使用的是正确的sql语句,应该是类似如下的查询语句:

    select balance from bank where id=[账户id];

    1. 在存款时,应该通过sql更新余额信息,而不是重新计算余额。示例如下:

    ```java //假设已经连接到数据库,并且传入了账户id和存款金额 //首先查询当前余额 String sql1 = "select balance from bank where id = ?"; PreparedStatement ps1 = conn.prepareStatement(sql1); ps1.setInt(1, accountId); ResultSet rs1 = ps1.executeQuery(); rs1.next(); int currentBalance = rs1.getInt(1);

    //更新余额 String sql2 = "update bank set balance = ? where id = ?"; PreparedStatement ps2 = conn.prepareStatement(sql2); ps2.setInt(1, currentBalance + depositAmount); ps2.setInt(2, accountId); ps2.executeUpdate(); ```

    1. 如果以上步骤都正确,但仍然无法正确查询余额,则可能是使用了缓存,导致查询不到最新的余额信息。可以在查询余额之前,调用以下语句强制刷新缓存:

    java conn.createStatement().execute("SELECT @@cache_block_size"); //执行任意sql语句即可清空缓存

    以下是两个Java class的示例代码,其中Bank类保存了账户信息,包括账户id、余额和存款方法。另外一个类TestBank用于测试,包括存款和查询余额两个方法:

    Bank类代码:

    public class Bank {
        private int id;
        private int balance;
    
        public Bank(int id, int balance) {
            this.id = id;
            this.balance = balance;
        }
    
        public int getBalance() {
            return balance;
        }
    
        public void deposit(int amount) {
            balance += amount;
        }
    
        public int getId() {
            return id;
        }
    }
    

    TestBank类代码:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class TestBank {
        private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
        private static final String DB_URL = "jdbc:mysql://localhost:3306/test";
        private static final String DB_USERNAME = "root";
        private static final String DB_PASSWORD = "root";
    
        public static void main(String[] args) {
            //连接数据库
            Connection conn = null;
            try {
                Class.forName(DB_DRIVER);
                conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            //测试存款
            Bank bank = new Bank(1, 100);
            bank.deposit(50);
            updateAccount(conn, bank);
    
            //测试查询余额
            int balance = getBalance(conn, 1);
            System.out.println("余额为:" + balance);
    
            //关闭数据库连接
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        private static int getBalance(Connection conn, int accountId) {
            String sql = "select balance from bank where id = ?";
            PreparedStatement ps = null;
            ResultSet rs = null;
            int balance = 0;
            try {
                ps = conn.prepareStatement(sql);
                ps.setInt(1, accountId);
                rs = ps.executeQuery();
                if (rs.next()) {
                    balance = rs.getInt("balance");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                //关闭结果集、预编译语句和连接
                try {
                    rs.close();
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return balance;
        }
    
        private static void updateAccount(Connection conn, Bank bank) {
            String sql = "update bank set balance = ? where id = ?";
            PreparedStatement ps = null;
            try {
                ps = conn.prepareStatement(sql);
                ps.setInt(1, bank.getBalance());
                ps.setInt(2, bank.getId());
                ps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                //关闭预编译语句
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }