繁体   English   中英

如何将 ArrayList 数据插入数据库

[英]How to Insert ArrayList data to the DataBase

我尝试使用 ArrayList 将数据插入数据库。有错误消息。 那是我的 Custmer.class 方法。 这是我将 ArrayList 传递给另一个 class 时得到的结果。

incompatible types: ArrayList<String> cannot be converted to ArrayList<Inquiries>

我想知道如何使用正确的 Using OOP 概念来做到这一点

   public void passingMsg(ArrayList<Inquiries> arrlist){
        try {
            System.out.println("Method "+arrlist);
            String sq = "INSERT INTO Inquiries (name,mail,tp,msg)VALUES(?,?,?)";
            PreparedStatement pr = con.prepareStatement(sq);
            for(int i=0;i<arrlist.size();i++){
                pr.setString(1,arrlist.get(i).getName());
                pr.setString(2,arrlist.get(i).getMail());
                pr.setString(3,arrlist.get(i).getTp());
                pr.setString(4,arrlist.get(i).getMsg());


            }
            pr.executeQuery();//executeBatch();
        } catch (SQLException ex) {
        }

    }

这就是我从用户那里获得价值的方式

 String name = txtName.getText();
        String mail = txtEmail.getText();
        String tp = txtTp.getText();
        String msg = txtMsg.getText();

        ArrayList<String> arrInq = new ArrayList<String>();
        arrInq.add(name);
        arrInq.add(mail);
        arrInq.add(tp);
        arrInq.add(msg);


        Custmer c =new Custmer();
        if( c.passingMsg(arrInq)){
            try {
                JOptionPane.showMessageDialog(this, "Successs!!");
            } catch (Exception e) {
                 JOptionPane.showMessageDialog(this, "Unsuccesss!!");
                e.printStackTrace();
            }
        }

这是我的 Inquiries.class:

public class Inquiries {
    private String name;
    private String mail;
    private String tp;
    private String msg;


     public Inquiries(String name,String mail,String tp,String msg){
        this.name = name;
        this.mail = mail;
        this.tp = tp;
        this.msg = msg;
    }
//     
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMail() {
        return mail;
    }
    public void setMail(String mail) {
        this.mail = mail;
    }
    public String getTp() {
        return tp;
    }
    public void setTp(String tp) {
        this.tp = tp;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }

}

有人可以解释一下这有什么问题吗? 请?

错误原因

这只是告诉您您的类型与您尝试执行的操作不兼容。 在您的 passingMsg() 方法中,您将其 header 作为: public void passingMsg(ArrayList<Inquiries> arrlist) 但是,在您的“我如何从用户获取值”区域(我现在将其称为“第二个代码段”)内,您将方法调用声明为: if( c.passingMsg(arrInq)) 这意味着您暗示要传递的参数(在本例中为arrInq )是ArrayList<Inquiries>类型,但事实并非如此。 它在您的第二个代码段中被初始化为: ArrayList<String> arrInq = new ArrayList<String>();

简单修复

我对此代码不承担任何责任; 使用风险自负。 要解决此问题,您需要将整个第二个代码段更改为类似于以下内容的内容:

String name = txtName.getText();
String mail = txtEmail.getText();
String tp = txtTp.getText();
String msg = txtMsg.getText();
ArrayList<Inquiries> arrInq = new ArrayList<Inquiries>();
arrInq.add(new Inquiries(name, mail, tp, msg));
Custmer c = new Custmer();
try {
    c.passingMsg(arrInq);
    JOptionPane.showMessageDialog(this, "Successs!!");
} catch (Exception e) {
    JOptionPane.showMessageDialog(this, "Unsuccesss!!");
    e.printStackTrace();
}

您还可能希望将方法 header 更改为返回 boolean,或者稍微修复它以实际抛出异常。 如:

public void passingMsg(ArrayList<Inquiries> arrlist) {
    System.out.println("Method " + arrlist);
    String sq = "INSERT INTO Inquiries(name,mail,tp,msg) VALUES(?,?,?)";
    PreparedStatement pr = con.prepareStatement(sq);
    for (Inquiries inquiries : arrlist) {
        pr.setString(1, inquiries.getName());
        pr.setString(2, inquiries.getMail());
        pr.setString(3, inquiries.getTp());
        pr.setString(4, inquiries.getMsg());
    }
    pr.executeQuery();//executeBatch();
}

您为ArrayList使用了错误的类型参数。 代替ArrayList<String>您需要ArrayList<Inquiries> 要解决此问题,您应该删除此代码...

    ArrayList<String> arrInq = new ArrayList<String>();
    arrInq.add(name);
    arrInq.add(mail);
    arrInq.add(tp);
    arrInq.add(msg);

...并用以下代码替换:

    ArrayList<Inquiries> arrInq = new ArrayList<Inquiries>();
    arrInq.add(new Inquiries(name, mail, tp, msg));

让我们以OOP的方式进行讨论。 这里的“查询”是您的模型,模型不过是简单的类,它具有实例成员和公共方法来获取和设置模型实例变量的值。

通常,我们将所有与数据库相关的操作代码放在各自的模型中。 例如,我有一个模型“ Model”,它通常映射到数据库表,称它为“ TableModel”,我会做这样的事情:

public class Model{
    private int id;
    private String attr;
    //other properties of the model

    public int getId(){
      return id;
    }
    public void setId(int id){
      this.id=id;
    }
    //other getters and setters

    //here we write methods to performs database operations 
    public void save(){
        //use "this" to get properties of object
        //logic to save to this object in database table TableModel as record
    }
    public void delete(int id){
        //logic to delete this object i.e. from database table TableModel 
    }
    public Model get(int id){
       //retrieve record   from table TableModel with this id
    }
   //other methods to get data from database.
}

现在的问题是我如何在另一个班级中使用它。 假设我有一个Model对象列表,并且希望将它们插入数据库中,我将执行以下操作:

public class AnotherClass{
    public void someMethod(){
        //create list of models objects e.g. get them from user interface
       ArrayList<Model> models=new ArrayList<>();
       for(int i=0;i<3;i++){
            Model model=new Model();
            model.setId(i);
            model.setAttr("attr"+i);
            models.add(model);
       }
       SomeOtherClass obj=new SomeOtherClass();
       obj.insert(models);
    }
}

public class SomeOtherClass{
   //other code above.....

   //my method that inserts each Model object in database
   //Note: this is sample method , you should do it in optimized way
   // e.g. batch insert
    public void insert(ArrayList<Model> models){

      for(Model myModel:models){
          myModel.save();
      }

   }
   //other code below.....
}

暂无
暂无

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

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