我的目标是获取文件并从文件中拆分值并将值输入数据库表。
我创建了一个包含两列empp
的示例表empname, empid
。我连接到数据库并尝试从'eclipse'插入查询。
现在我有了文件fr.txt
。当我读取文件,拆分值并将其存储在数组中时,我无法在插入查询中使用数组索引。
这是我的代码:
try{
FileReader fr=new FileReader("C:\\Users\\Priyanka Sethi\\Desktop\\fr.txt");
BufferedReader br=new BufferedReader(fr);
String str;
str=br.readLine();
while((str=br.readLine())!=null){
System.out.println(str+"\n");
String [] array = str.split("\\,");
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
String a=array[0];
Integer b=Integer.parseInt(a);
String c=array[1];
Connection con=getConnection();
PreparedStatement posted=con.prepareStatement("INSERT INTO empp(empid,empname)VALUES(b,'c')");
posted.executeUpdate();
}
} catch(Exception e){
System.out.println(e);
} finally {
System.out.println("insertion completed");
}
答案 0 :(得分:2)
问题在于您如何尝试将值放入PreparedStatement
。
你有:
PreparedStatement posted=con.prepareStatement("INSERT INTO empp(empid,empname)VALUES(b,'c')");
...实际上并没有使用您在上面的行中创建的变量b
和c
。相反,请尝试使用PreparedStatement.setString(int, String)和PreparedStatement.setInt(int, int)方法。
如需完整示例,请查看以下内容: http://www.tutorialspoint.com/javaexamples/jdbc_prepared_statement.htm
在您的情况下 - 没有实际运行您的代码进行测试 - 我会将该行更改为如下所示:
PreparedStatement posted=con.prepareStatement("INSERT INTO empp(empid,empname)VALUES(?,?)");
posted.setInt(1, b.intValue());
posted.setString(2, c);
始终,始终始终验证,清理等等来自用户的输入。切勿直接使用从程序外部提供的任何查询中的值,并且不要对用户将输入的内容做出任何假设。这样做可以让您了解各种漏洞。从一开始就使用好的做法很重要!