有人可以在这里提供帮助吗,我正在尝试将控制台输出保存到文本文件中,并且出现NullPointerException错误。请提出我在这里做错了什么。还有没有一种方法可以为每次运行创建一个新的文本文件?
提前感谢:
import java.io.*;
import java.sql.*;
public class RetrieveFile {
public static void main(String args[]) throws Exception {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@tkdp2gpsdbc03-vip.hk.hsbc:35120/GPSEAU_TAF", "gppeareadu", "F4nt4na");
PreparedStatement ps = con.prepareStatement("select * from MSG_FEES where MID='1961108001406E00'");
ResultSet rs = ps.executeQuery();
try {
printResultColumns(rs);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void printResultColumns(ResultSet resultSet) throws SQLException, IOException {
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
while (resultSet.next()) {
// you get a single result row in here, not the entire ResultSet
for (int i = 1; i <= columnCount; i++) {
switch (rsmd.getColumnType(i)) {
case Types.VARCHAR:
case Types.LONGVARCHAR:
case Types.CHAR:
System.out.println(resultSet.getString(i));
break;
case Types.DOUBLE:
System.out.println(resultSet.getDouble(i));
break;
case Types.INTEGER:
System.out.println(resultSet.getInt(i));
break;
case Types.DATE:
System.out.println(resultSet.getDate(i).toString());
break;
case Types.TIMESTAMP:
System.out.println(resultSet.getTimestamp(i).toString());
break;
case Types.BOOLEAN:
System.out.println(resultSet.getBoolean(i));
break;
case Types.DECIMAL:
case Types.NUMERIC:
System.out.println(resultSet.getBigDecimal(i));
break;
default:
//System.out.println(rsmd.getColumnClassName(i)
}
}
}
StringBuilder record = new StringBuilder();
while (resultSet.next()) {
if (record.length() > 0) record.append("\n");
for (int i=1; i < columnCount; ++i) {
if (i > 1) record.append(", ");
record.append(resultSet.getInt(i));
}
}
try {
String filename = "C:\\Users\\45060849\\Desktop\\test1.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
char[] str = null;
writer.write(str);
writer.close();
}
catch (IOException e) {
// handle exception
}
} }
请为以下代码找到以下日志文件:- 请为以下代码找到以下日志文件:-
java.lang.NullPointerException
at java.io.Writer.write(Writer.java:127)
at RetrieveFile.printResultColumns(RetrieveFile.java:76)
at RetrieveFile.main(RetrieveFile.java:14)
Picked up JAVA_TOOL_OPTIONS: -Duser.home=C:\Users\123
答案 0 :(得分:0)
您的错误在以下行:
char[] i = null;
String data = String.valueOf(i);
方法String.valueOf()
断言给定的任何char数组都不为null,否则抛出NullPointerException。您需要在调用char[]
之前设置此String.valueOf()
的值,否则错误将继续存在。
注意:您的代码还有其他错误,即使您修复此错误,其他事情也可能失败。考虑阅读此页面,其中详细介绍了如何在Java中完成文件IO: https://docs.oracle.com/javase/tutorial/essential/io/
答案 1 :(得分:0)
您当前正在尝试将null from collections import Counter
result = dict(Counter(words))
写入文本文件,因此存在null指针异常。假设您只想写出每条记录,可以尝试:
char[]
这里的技巧是仅使用StringBuilder record = new StringBuilder();
while (resultSet.next()) {
if (record.length() > 0) record.append("\n");
for (int i=1; i < columnCount; ++i) {
if (i > 1) record.append(", ");
record.append(resultSet.getObject(i));
}
}
try {
String filename = "C:\\Users\\2345\\Desktop\\test2.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(record);
writer.close();
}
catch (IOException e) {
// handle exception
}
来获取每一行中每一列的值。然后,只需依靠ResultSet#getObject()
方法来呈现实际值。