Мне нужно написать программу, которая автоматически считывает мой .csv и помещает данные в мой SQLite. Этот код заполняет первую строку в моей таблице, которую я создал ранее. Как пропустить / перейти к следующей строке, чтобы заполнить ее?
Я предполагаю, что это что-то в петле, но я не уверен, что изменить ...
(Я пропустил первую строку, потому что она содержит столбцы.)
Код:
public static void read()
{
String csv = "C:\\Users\\schneider\\Desktop\\Schneider\\Excel\\DienstbarkeitenTabelle.csv";
BufferedReader br = null;
String line = "";
String csvSplitBy = ",";
int currentLine = 0;
Connection conn = null;
try
{
conn = DriverManager.getConnection("jdbc:sqlite:C:/sqlite/db/tollerName");
PreparedStatement prep = conn.prepareStatement("insert into tollerName(Bauprojekt, Bauprojektnummer, Auftragsnummer,Trassierung, JahrSAP, ProjektnummerSPA, Anlagenzahl, AktuelleLeitungslaenge, VorgaengeZumProjekt, VertraegeZumProjekt, Firma, Flurst, Blatt, Verf, Anl, RE, LL, BreiteSS, FlaecheRA, Entsch, Haupteigentuemer, Gemarkung, Grundbuchamt, Strase, Hausnummer, Hausnummerzusatz, Ort, plz, VkWert, prozentBPD, Anlage, GFR, GBA, Empfaenger, Bank, IBAN, BIC, von, an, JahrDerVergabe, Zahlungsgrund, Netto, Aufwand, Umsatzsteuer) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
br = new BufferedReader(new FileReader(csv));
while((line = br.readLine()) != null)
{
if (currentLine > 0)
{
String[] table = line.split(csvSplitBy);
prep.setString(1, (table[0]));
prep.setString(2, (table[1]));
prep.setString(3, (table[2]));
prep.setString(4, (table[3]));
prep.setString(5, (table[4]));
prep.setString(6, (table[5]));
prep.setInt(7, Integer.parseInt(table[6]));
prep.setDouble(8, Double.parseDouble(table[7]));
prep.setInt(9, Integer.parseInt(table[8]));
prep.setInt(10, Integer.parseInt(table[9]));
prep.setString(11, (table[10]));
prep.setString(12, (table[11]));
prep.setString(13, (table[12]));
prep.setString(14, (table[13]));
prep.setString(15, (table[14]));
prep.setString(16, (table[15]));
prep.setDouble(17, Double.parseDouble(table[16]));
prep.setDouble(18, Double.parseDouble(table[17]));
prep.setDouble(19, Double.parseDouble(table[18]));
prep.setDouble(20, Double.parseDouble(table[19]));
prep.setString(21, (table[20]));
prep.setString(22, (table[21]));
prep.setString(23, (table[22]));
prep.setString(24, (table[23]));
prep.setString(25, (table[24]));
prep.setString(26, (table[25]));
prep.setString(27, (table[26]));
prep.setString(28, (table[27]));
prep.setDouble(29, Double.parseDouble(table[28]));
prep.setDouble(30, Double.parseDouble(table[29]));
prep.setString(31, (table[30]));
prep.setString(32, (table[31]));
prep.setString(33, (table[32]));
prep.setString(34, (table[33]));
prep.setString(35, (table[34]));
prep.setString(36, (table[35]));
prep.setString(37, (table[36]));
prep.setString(38, (table[37]));
prep.setString(39, (table[38]));
prep.setString(40, (table[39]));
prep.setString(41, (table[40]));
prep.setDouble(42, Double.parseDouble(table[41]));
prep.setDouble(43, Double.parseDouble(table[42]));
prep.setDouble(44, Double.parseDouble(table[43]));
prep.execute();
conn.commit();
}
currentLine++;
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (br == null)
try
{
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
System.out.println("müsste feddich sein");
}
Конечно, я мог бы это сделать, но я должен сделать это для ряда файлов .csv, и моя задача - написать код для этого.
Вы вставляете только одно значение в подготовленный оператор. Для столбца «Bauprojekt» первое значение из файла csv. Вам нужно добавить значение для каждого столбца. Без дополнительной информации трудно помочь.
Вы только вставляете, если currentLine > 0. Первый раз в вашем цикле currentLine равен 0, поэтому первая строка никогда не будет вставлена.
@Flah Это вещь .. Как мне вставить вторую строку в SQLite?
@vanje да, я знаю. Мои столбцы в первой строке
Ты хоть прочитал весь пост?
я правильно отредактировал свой вопрос




Вы инициализируете currentLine равным 0, при первом прохождении в вашем цикле условие if (currentLine > 0) ложно, поэтому первая строка не вставляется.
если вы не удалили какую-то важную часть своего кода, тест бесполезен. currenltLine увеличивается только начиная с 0, он никогда не может быть отрицательным или нулевым.
Моя первая строка содержит столбцы ... Моя проблема состоит в том, чтобы поместить туда другие строки. извините за то, что не объяснил это должным образом
Почему бы вам не использовать SQLite напрямую? stackoverflow.com/a/24582022/9455968