java - 使用jdbc odbc连接java到ms access数据库,java用户登录系统

标签 java ms-access

我在将 java 连接到 mc Access 以检查用户身份验证时遇到问题,当我运行此程序时,它不会给我任何错误消息(我认为连接没有问题),但它也不检查是否帐号和密码是否有效。其他方法,如提款、存款和 getBalance 都工作正常。
任何帮助或提示将不胜感激。

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

class Logic
{
  private enum  State { ACCOUNT_NO, PASSWORD, PROCESSING };
  private State state = State.ACCOUNT_NO;
  private long  number;
  private long  acNumber = 0;
  private long  acPIN = 0;
  private char  op = ' ';
  private Bank  bank = new Bank();

  private JTextArea display1, display2;


  public Logic( JTextArea area1, JTextArea area2 )
  {
    display1 = area1; display2 = area2;
    display2.setText( "Welcome: Enter your account number" );
  }

  public void process( String button )
  {
    String info = null;

    if ( button.length() == 1 )
    {
      char c = button.charAt(0);
      if ( c >= '0' && c <= '9' )               // Digit
      {
        number = number * 10 + c-'0';           // Build number
        display1.setText( "" + number );
      }
      return;
    }

    if ( button.equals( "CLR" ) )
    {
      number = 0;
      display1.setText( "" + number );
    }

    if ( button.equals( "Ent" ) )
    {
      switch ( state )
      {
        case ACCOUNT_NO:
          bank.setAcNumber( number );
          number = 0;
          state = State.PASSWORD;
          display1.setText( "" );
          display2.setText( "Now enter your password" );
          break;
        case PASSWORD:
          bank.setAcPasswd( number );
          number = 0;
          display1.setText( "" );
          if ( bank.checkValid() )
          {
            state = State.PROCESSING;
            display2.setText( "Now enter transaction" );
          } else {
            state = State.ACCOUNT_NO;
            display2.setText( "Invalid: Start again" );
          }
          break;
        default :
      }
      return;
    }

    if ( state != State.PROCESSING ) 
    {
      state = State.ACCOUNT_NO;
      display2.setText( "But you are not loged in\n"  );
      display2.append( "Welcome: Enter your account number" );
      return;
    }

    if ( button.equals( "W/D" ) )               // Clear Result
    {
      display1.setText( "" );
      if ( bank.withdraw( number ) )
      {
        display2.setText( "Withdrawn: " + number );
      } else {
        display2.setText( "You do not have surficient funds" );
      }
      number = 0;
      return;
    }

    if ( button.equals( "Bal" ) )               // Clear Result
    {
      number = 0;
      display2.setText( "Your balance is: " + bank.getBalance() );
      return;
    }

    if ( button.equals( "Dep" ) )               // Clear Result
    {
      bank.deposit( number );
      display1.setText( "" );
      display2.setText( "Deposited: " + number );
      number = 0;
      return;
    }

    if ( button.equals( "Fin" ) )               // Clear Result
    {
      state = State.ACCOUNT_NO;
      number = 0;
      display2.setText( "Welcome: Enter your account number" );
      return;
    }

    return;
  }

  public long getResult()
  {
    return number;
  }

  public long getNumber()
  {
    return number;
  }
}

银行类。

import java.sql.*;

class Bank
{
  long AcNumber = 0;
  long AcPasswd = 0;
  long balance = 0;
  long deposit = 0;
  long withdraw = 0;
  long amount = 0;
  Connection con;
  Statement st;
  ResultSet rs;


  public void connect()
  {
     try
     {
     String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
     Class.forName(driver);
     String db = "jdbc:odbc:db3";
     con = DriverManager.getConnection(db);
     st = con.createStatement();
     }

     catch (Exception ex)
     {
         System.err.println("Can not load JDBC/ODBC driver.");
         System.exit( -1 ); 
     }

  }

  public void setAcNumber( long accNumber ) 
    {
         AcNumber = accNumber;
    }

  public void setAcPasswd( long accNumber ) 
    { 
         AcPasswd = accNumber;
    }

  public boolean checkValid() 
    {    
       try {
           String sql = "select user,pass from Table1 where user='"+AcNumber+"'and pass='"+AcPasswd+"'";
           rs = st.executeQuery(sql);

           int count = 0;
           while(rs.next())
            {
                count = count + 1;
            }
           if(count == 1)
           {
               System.out.println("User Found, Now enter transaction");

           }
           else
           {
               System.out.println("user not found");

           } 

        }

          catch (Exception ex)
           {

           }

       return true;

    }

  public boolean withdraw( long amount ) 
     {        
      balance =  balance - amount;    
      System.out.println( "Bank: Withdrawm " + amount ); 
      return true;   
     }

  public void deposit( long amount ) 
     {    
      balance =  balance + amount;            
      System.out.println( "Bank: deposit " + amount ); 
      return; 
     }

  public long getBalance() { 

      System.out.println( "Bank: Balance: "+ balance );
      return balance;
  }




}

最佳答案

您可能没有错误消息,因为当您在 checkValid 中捕获异常时,您没有执行任何操作。在 catch block 中添加 ex.printStackTrace() 以获得有关正在发生的情况的更多信息。

关于java - 使用jdbc odbc连接java到ms access数据库,java用户登录系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440599/

相关文章:

ms-access - MS Access INSERT INTO 语句

ms-access - 强制所有用户与 2010 Access 后端数据库断开连接

database - 无法更改 MS Access 2007 上的数据类型

java - 当我不能使用 "this"作为上下文时如何使用 Toast

java - 设置图形对象的工具提示文本

java - 多表 td 元素的 Xpath

java - 如何改变 while(true)

c# - 与 Access 数据库的连接池

java - 我正在为 ListView 使用简单适配器,但在 ListView 中滚动时开关会更改其状态?

ms-access - MS Access ADP 断开连接的记录集恢复