繁体   English   中英

如何从扩展 class 插入

[英]How to insert from an extended class

我的信息是通过CSV读入“银行信息”,一个人CSV是

5                       
1,Tony,Stark,C,tonys,naslvj34-t934,stark@hmmm.org;tony@gmail.com;tostark55@yaho.com
2,Patrick,Hart,C,phart2,sdlwgl5034i52,hart@hmmm.org;hart1@who.org
3,Tom,Baker,E,bake95,kweojtnefq567,
4,Kevin,Black,C,keb765,prjhohier99,black@mail.org
5,Alex,Codd,E,alcodd,andlqjr78,codd@DBMS.org;alex@gmail.com

我的帐户 CSV 是,

5
1,313001,S,35881.12
2,313002,G,772400.34
3,313003,C,250002.15
4,313004,P,96310.66
5,313005,P,15624.15
1,313006,C,39950.99

在帐户 CSV 中,第二个标记是我的“帐户类型”,因此 S =“储蓄”G =“黄金储蓄”C =“支票”等等。 当在我的 CSV 解析器 class 中读取这些时,一个 object 由这些类型组成,因此进行了检查 class 并且当令牌 [2] 等于“C”时 CSV 被标记化。

我的人 class 是这样设置的,不包括我的 getters 和 setters

private int personId;
private String firstName;
private String lastName;
private String type;
private String usrname;
private String password;    
private ArrayList<String> emails;

public Person(int personId, String firstName, String lastName, String type, String usrname, String password,
        ArrayList<String> emails) {
    super();

我的账户 class 就是这样设置的。

private Person accountHolder;
private int accountNumber;
private double currentBalance;
 
public Account() {}

public Account(Person accountHolder, int accountNumber, double currentBalance) {
    this.accountHolder = accountHolder;
    this.accountNumber = accountNumber;
    this.currentBalance = currentBalance;
}

这是我的示例帐户类型之一(有多个)

public class CheckingAccount extends Account {

    public CheckingAccount(Person p, int i, double d) {
        super(p,i, d);
    }

这是我的数据库加法器

public static void DbAddAccount(Person personId, Account accountHolder){
    Connection conn = null;
    try {
       conn = DriverManager.getConnection(DatabaseInfo.URL,  DatabaseInfo.USERNAME, DatabaseInfo.PASSWORD);
    } catch (SQLException e) {
        System.out.println("Connection Failed");
        throw new RuntimeException(e);
    }
    
    String accountQuery = "insert into Account (accountId,accountNumber,currentBalance,type,personId) values (?,?,?,?,?);";
        
    PreparedStatement accountPs = null;

    ResultSet accountKeys = null;
    
    int accountId = 0;

    try {
        //These are my prepare Statements for my queries
        accountPs = conn.prepareStatement(accountQuery);
        accountPs.setInt(1, accountId+ 1 );
        accountPs.setInt(2, accountHolder.getAccountNumber());
        accountPs.setDouble(3, accountHolder.getCurrentBalance());
        accountPs.setString(4, ??????????????????????????????????);

        accountPs.setInt(5, personId.getPersonId());
                            
        accountPs.executeUpdate();
        accountPs.close(); 
        conn.close();
    } 
    catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}   

JDBC 运行时未添加任何内容。

我认为您的代码存在以下问题:

  1. 帐户 Object: Object 缺少用于存储“帐户类型”的字段
  2. DbAddAccount方法中设置不正确的帐户类型在行 accountPs.setString(4, ????????????????????????????????????????) ; 你是问号的数量(没有用引号括起来来制作字符串)作为看起来不正确的帐户类型。
  • 系列??? 如果不包含在引号中,则不会转换为字符串。
  • 即使你用引号括起来,我认为它也不是预期的帐号;

问题 1 的解决方案 在账户 Object 中声明 account_type。

对于第 2 期 而不是使用 accountPs.setString(4, ????????????????????????????????????????); 使用:accountPs.setString(4, account.getAccountType());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM