我已将CSV文件导入到Java中,然后将CSV文件的每一列读取到单独的数组中。然后,我想将所有这些数组放入一个arraylist中。以下是我的代码。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.sql.*;
import oracle.jdbc.driver.*;
public class verbindung {
public static void main(String[] args) {
String filename = "betreuen_4.csv";
File file = new File(filename);
ArrayList<caring> betreuen = new ArrayList<caring>();
try {
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()) {
String data = inputStream.next();
String[] values = data.split(",");
int PInummer = Integer.parseInt(values[1]);
String MNummer = values[0];
String KundenID = values[2];
System.out.println(MNummer);
}
inputStream.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}
betreuen[0] = MNummer;
}
}
最后一条代码行显示错误
betreuen[0] = MNummer;
错误状态:
线程“主”中的异常java.lang.Error:未解决的编译问题: 表达式的类型必须是数组类型,但已解析为ArrayList MNummer无法解析为变量
关怀是由以下代码创建的类</ p>
public class caring {
String MNr;
int PINr;
String KID;
public caring(String MNummer,int PInummer, String KundenID ) {
this.MNr = MNummer;
this.PINr = PInummer;
this.KID = KundenID;
}
}
我已经在Google中输入了此错误,我相信我可能会明白为什么会收到此错误。问题是尽管我在网上进行了大量研究,但我不知道如何获得理想的结果。
简而言之,我希望我的Arraylist包含数组(MNummer,PInummer,KundenID)。我需要将其作为要编写的代码的数组列表,以便通过Java将批处理插入数据库中。
答案 0 :(得分:0)
您正在尝试将ArrayList<caring> betreuen
作为标准数组访问。
ArrayList<Type>
是类的单个实例(对象),但是,此类存储数据数组。
要存储和检索数据,必须使用类添加,删除,设置等的适当方法。
要添加到ArrayList<caring>
真,您需要使用要添加的参数(在这种情况下为add()
betruen.add(MNummer);
)
但是,由于MNummer是String对象而不是 careing 对象,因此该方法不起作用,因此必须首先创建类型为 careing 的对象才能添加到betruen。 / p>
我们可以通过调用caring _caring = new caring(MNummer, PInummer, KundenID);
请注意,对象类通常 以大写字母开头,变量通常以小写字母开头,因此您可以例如编写如下代码: {1}}而不是Caring caring = new Caring()
或caring _caring = new caring()
,后者不会运行,因为JVM会因为变量名与类名相同而感到困惑。
现在我们有了caring caring = new caring()
对象,现在可以通过将caring
替换为ArrayList
来将其添加到betreuen[0] = MNummer;
中
如果您尝试运行此变量,则很可能会给您另一个编译错误,因为您试图访问超出其范围的变量。
以下面的代码为例,我们在if语句的大括号“ {”之前定义obj1,因此if语句中的任何内容都可以访问obj1。
betreuen.add(caring);
但是下面的代码不起作用,我们在if语句的大括号“ {”内定义obj2,因此if语句之外的任何内容都无法访问obj1。
public void test()
{
String obj1 = "hello";
if(obj1.equals("hello"))
{
obj1 = "bye";
}
}
要将以上内容结合在一起,您的代码应如下所示: 顺便说一句:如果任何CSV字段中都包含逗号,则代码可能无法正确运行,建议使用预先存在的CSV库,但是,如果您仍然希望自己解析CSV,则可能希望阅读RFC 4178 Common Format and MIME Type for Comma-Separated Values (CSV) Files,以获取有关CSV文件格式的指导
public void test()
{
String obj1 = "hello";
if(obj1.equals("hello"))
{
String obj2 = "bye";
}
obj2 = "hello";
}
答案 1 :(得分:0)
您阅读了csv行并为变量赋值,但是您既未创建caring
实例,也未将其添加到数组列表betreuen
int PInummer = Integer.parseInt(values[1]);
String MNummer = values[0];
String KundenID = values[2];
System.out.println(MNummer);
caring aCaring = new caring(MNummer, PInummer, KundenID); /// create an instance of caring from line values
betreuen.add(aCaring); /// add instance to the arraylist
答案 2 :(得分:0)
简而言之,我希望我的Arraylist包含数组 (MNummer,PInummer和KundenID)。我需要它成为代码的数组列表 我将要写的用于通过以下方式将批处理插入数据库中 Java。
据我了解,您需要一个包含所有列的ArrayList / Bean,其中每一列都是一个数组。
// List of all elements in a column
List<Integer> PInummer = new ArrayList<Integer>();
List<String> MNummer = new ArrayList<String>();
List<String> KundenID = new ArrayList<String>();
while(inputStream.hasNext())
{
String[] values = inputStream.next().split(",");
PInummer.add(Integer.parseInt(values[1]));
MNummer.add(values[0]);
KundenID.add(values[2])
}
Integer[] PInummerArray = PInummer.toArray(new Integer[PInummer.size()]);
String[] MNummerArray = MNummer.toArray(new String[MNummer.size()]);
String[] KundenIDArray = KundenID.toArray(new String[KundenID.size()]);
// List of all columns (the complete cSV)
List<Object> caring = new ArrayList<Object>();
// Adding to caring list
caring.add(PInummerArray);
caring.add(MNummerArray);
caring.add(KundenIDArray);
// Or if you prefer to save the arrays into Caring bean
Caring _caring = new Caring(PInummerArray, MNummerArray, KundenIDArray);