Я пытаюсь разбить / разобрать строку на несколько частей, а затем правильно загрузить ее в базу данных.
У меня есть такая строка:
String CARDS =
"e \"Water\"\n" +
"n \"John\"\n" +
"p \"Big\"\n" +
"e \"Fire\"\n";
Я хочу разделить каждую строку и иметь что-то вроде
e
"Water"
n
"John"
Мне удалось это сделать примерно так:
String delim = " \n\r\t,.;"; //insert here all delimitators
StringTokenizer card = new StringTokenizer(CARDS,delim);
while (card.hasMoreTokens()) {
System.out.println(card.nextToken());
}
Я создал небольшую таблицу под названием card, которая содержит card_type и card_desc. Где card_type будет первой буквой, например e, n и т. д., А затем card_desc будет Water, John и т. д.
Еще у меня есть метод вставки:
public void insert() throws SQLException {
Connection con = ListPlayers.myCon.get();
String query = "INSERT INTO deck (card_type,card_desc) VALUES (?,?);";
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, card_type);
ps.setString(2, card_desc);
ps.executeUpdate();
ps.close();
}
Я просто не уверен, как успешно разделить разделенную строку на тип карты и описание, а затем загрузить ее в базу данных.




Вы уже сделали самое сложное. Просто замените кавычки (") в своем описании и вызовите свой метод для вставки данных. Обновите цикл while.
while (card.hasMoreTokens()) {
String card_type = card.nextToken();
String card_desc = card.nextToken().replace("\"","");
//you can call your insert method to insert the data
// example insert(card_type,card_desc)
System.out.println(card_type+"::"+card_desc);
}
Я добавил отпечаток просто для проверки.
Обновите свой метод вставки, чтобы передать параметры.
Вам следует избегать вызова close вручную. Вместо этого поместите PreparedStatement в оператор try-with, который гарантирует закрытие в исключительных ситуациях. Вам также может потребоваться закрыть соединение, если вы используете современный пул соединений. docs.oracle.com/javase/tutorial/essential/exceptions/…