2014-10-01 69 views
-3

这里我正在从文件中读取学生数据并将其存储在db.For正在使用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的变量是

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()"时,不调用该方法。请解释这个问题。如果它不可能,请给我另一种方法来实现。

回答

2

尝试以下操作:

Student s = stu.get(i); 
sql = "INSERT INTO STUDENT VALUES('"+s.getRollNo()+"','"+s.getName()+"','"+s.getDepartment()+"','"+s.getBranch()+"',"+Float.parseFloat(s.getCgpa())+")"; 

列表中包含的学生,因此,你应该从列表中的学生对象,并直接访问干将。

+0

易发生sql注入,因此不推荐。 – Manu 2014-10-01 11:07:52

+0

谢谢...我明白我的错误.. – 2014-10-01 11:12:37

+0

确实,它很容易出现sql注入。但代码中的错误与此部分有关。我同意PreparedStatement解决方案是将数据安全插入数据库的更好解决方案。 – 2014-10-01 11:45:13

0

你想使用

Student temp=stu.get(i) 
temp.getRollNo() , temp.getName() 

stu.get(i)返回类型学生的一个实例。然后,您可以使用此参考来访问学生中的字段。你以前在做的是从字面上将值“stu.get(i).getRollNo()”写入数据库。

0

在这里,当您调用stu.get(i)时,它返回一个Student对象而不是String。因此您必须将参考类型更改为学生。做以下变化,

学生temp = stu.get(i);

祝你好运!!!

4

糟糕的方法来做到这一点是从你的列表中的值嵌入到SQL字符串:

sql="INSERT INTO STUDENT VALUES('"+ stu.get(i).getRollNo()+"','"+stu.get(i).getName()+"','"+...+")"); 

做到这一点是使用PreparedStatement正确的(安全)的方式:

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(); 
+0

其实这不是我的问题。 stu.get(i)被多次使用,如何避免使用像我上面提到的临时变量.. – 2014-10-01 11:09:54

+0

@GaneshkumarSR这是你的问题,因为把“stu.get(i).getRollNo()”作为字符串在sql字符串中将不起作用,除非你使用了一些我不知道的数据库。 – Eran 2014-10-01 11:11:35

+0

@GaneshkumarSR如果你的担心是不得不多次键入'stu.get(i)',你需要一个类型为Student的临时变量,但是将它与PreparedStatement一起使用。 – Eran 2014-10-01 11:13:20