#java #sql
#java #sql
Вопрос:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","jashan","noor1032");
PreparedStatement stmt=con.prepareStatement("select STUDENT_ID,STU_NAME,GENDER from STUDENT");
ResultSet rs=stmt.executeQuery();
FileWriter fw=new FileWriter("E:\winter 2019\COMP 230\table.txt");
while(rs.next())
{
System.out.println(rs.getString(1) " " rs.getString(2) " " rs.getString(3));
fw.write(newline rs.getString(1) " " rs.getString(2) " " rs.getString(3));
}
fw.close();
FileReader f1=new FileReader("E:\\winter 2019\\COMP 230\\table.txt");
BufferedReader br=new BufferedReader(f1);
int j;
String s;
while((j=br.read())!=-1)
{
char ch=(char)j;
s=new String (String.valueOf(ch));
System.out.print(s);
ta.setText(s);
}
f1.close();
Это мой код для извлечения данных из таблицы и записи их в файл, а затем снова извлечения данных из файла и отображения их в текстовой области (ta). Печать данных в файле выполняется нормально, но при этом отображается только последний символ внутри текстовой области, а не все данные целиком. В чем может быть причина?
Комментарии:
1. В вашем цикле while вы обновляете значение s на новое значение, а предыдущее заменяется, вот почему вы видите только последний символ.
Ответ №1:
Возможно, вы захотите рассмотреть класс Apache commons Utilities FileUtils
. В нем есть метод
public static String readFileToString(File file,
Charset encoding)
throws IOException
Это действительно должно решить все ваши проблемы. Посмотрите здесь на javadoc этого метода.
Все, что вам нужно будет сделать, это
ta.setText(FileUtils.readFileToString(new File("E:\\winter 2019\\COMP 230\\table.txt"), StandardCharsets.UTF_8));
Ответ №2:
Попробуйте этот код… вы каждый раз переписывали значение в текстовом поле вместо того, чтобы объединять строку и затем записывать ее в текстовое поле.
String s;
StringBuilder text = new StringBuilder();
while((j=br.read())!=-1)
{
char ch=(char)j;
s=new String (String.valueOf(ch));
System.out.print(s);
text.append(s);
}
ta.setText(text.toString());
f1.close();
Ответ №3:
System.out.print не сбрасывается, и ошибка уже упоминалась: ta.setText(s)
будет повторно перезаписываться ta
текущим символом, в конечном итоге оставляя последний символ. Также одна обратная косая черта удваивается один раз в обычной строке «…».
Но я хотел упомянуть о новых классах Path, Paths, and Files
. И try-with-resources, который закрывает файлы, соединение, инструкцию и результирующий набор. Также чтение может выполняться построчно. Где readLine
выводится прочитанная строка без перевода строки или null в конце файла.
Я использовал формат Unicode UTF-8 для хранения файла, чтобы иметь возможность комбинировать любые скрипты / специальные акценты.
Path path = Paths.get("E:\winter 2019\COMP 230\table.txt");
Class.forName("oracle.jdbc.driver.OracleDriver");
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"...", "...");
PreparedStatement stmt = con.prepareStatement(
"select STUDENT_ID,STU_NAME,GENDER from STUDENT");
ResultSet rs = stmt.executeQuery();
PrintWriter pw = new PrintWriter(Files.newBufferedWriter(path))) {
pw.print('uFEFF'); // Maybe write Unicode BOM for Windows Notepad
while (rs.next()) {
System.out.println(rs.getString(1) " " rs.getString(2) " " rs.getString(3));
pw.println(rs.getString(1) " " rs.getString(2) " " rs.getString(3));
}
}
try (BufferedReader br = Files.newBufferedReader(path)) {
String s;
while((s = br.readLine())!= null) {}
System.out.println(s);
ta.setText(ta.getText() s "rn");
}
}