这里我从文件中读取学生数据并存储在数据库中。为此,我使用了ArrayList。例如,
Student(){
private int rollNo;
private String name,department,branch;
private String cgpa;
.
.
.
public int getRollNo(){
return rollNo;
}
public String getName(){
return name;
}
public String getDepartment(){
return department;
}
public String getBranch(){
return branch;
}
public String getCgpa(){
return cgpa;
}
}
我的数组变量是
ArrayList<Student> stu;
为了访问arraylist中的任何字段,我必须使用stu.get(i).getRollNo()
,stu.get(i).getName()
、stu.get(i).getDepartment()
等等。这里我已经使用了stu.get(i)
多次。为了避免这种情况,我将stu.get(i)
存储在临时变量中。例如
String temp="stu.get(i)."
sql="INSERT INTO STUDENT VALUES('"+temp+"getRollNo()"+"','"+temp+"getName()"+"','"+temp+"getDepartment()"+"','"+temp+"getBranch()"+"',"+Float.parseFloat(temp+"getCgpa()")+")";
但是当我使用temp+"getRollNO()"
时,不会调用该方法。请解释这个问题。如果不可能,请给我另一种方法来实现同样的目的。
糟糕的方法是将列表中的值嵌入到SQL字符串中:
sql="INSERT INTO STUDENT VALUES('"+ stu.get(i).getRollNo()+"','"+stu.get(i).getName()+"','"+...+")");
正确(也是安全)的方法是使用PreparedState:
sql="INSERT INTO STUDENT VALUES(?,?,?,?,...,?)";
然后创建一个PreparedStatement
,并通过以下调用添加参数:
PreparedStatement ps = conn.prepareStatement (sql);
ps.setString(1,stu.get(i).getRollNo());
ps.setString(2,stu.get(i).getName());
...
ps.executeUpdate ();
如果您的问题是必须多次从列表中提取学生,您可以将其更改为:
PreparedStatement ps = conn.prepareStatement (sql);
Student s = stu.get(i);
ps.setString(1,s.getRollNo());
ps.setString(2,s.getName());
...
ps.executeUpdate ();
尝试以下操作:
Student s = stu.get(i);
sql = "INSERT INTO STUDENT VALUES('"+s.getRollNo()+"','"+s.getName()+"','"+s.getDepartment()+"','"+s.getBranch()+"',"+Float.parseFloat(s.getCgpa())+")";
该列表包含学生,因此您应该从列表中获取一个学生对象并直接访问getter。
您想要使用
Student temp=stu.get(i)
temp.getRollNo() , temp.getName()
get(i)返回一个Student类型的实例。然后,您可以使用此引用访问student中的字段。您之前所做的是将值"stu.get(i).getRollNo()"写入数据库。
在这里,当您调用stu.get(i)时,返回的是Student对象,而不是String。因此,您必须将引用类型更改为"学生"。进行以下更改,
学生临时工=stu.get(i);
祝你好运!!!