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