我在“请输入存款金额”的那个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")+ " " + rs.getString("type") + " " + 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);
}
}
数据库看下有没有相关的数据
你先确定下是不是真的存进数据库了?mysql打开表里看下。
第二,我都没看到你数据库有加载驱动,确定成功存入了?
由于缺乏具体代码和数据结构的信息,无法得知具体原因。但是在一般情况下,当存款成功后余额查询却显示为0的原因可能是没有正确更新余额信息。解决方法可能如下:
select amount from bank where id=[账户id];
select balance from bank where id=[账户id];
```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(); ```
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();
}
}
}
}