[英]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.