gpt4 book ai didi

java - 将文件读入 Derby 数据库

转载 作者:行者123 更新时间:2023-12-01 12:07:52 24 4
gpt4 key购买 nike

这是我将文本文件读入 Netbeans Derby 数据库的最新尝试。该文件包含 5 行,每行包含 7 个以逗号分隔的项目。程序运行没有任何错误,但数据库根本没有更新。如果您能帮助修复此代码,我将不胜感激。

<% Connection connection = null;
PreparedStatement ps = null;

String urlanddatabasename = "jdbc:derby://localhost:1527/ProgramName

String userName = "root";
String password = "root";

Class.forName("org.apache.derby.jdbc.ClientDriver");
connection = DriverManager.getConnection(urlanddatabasename,userName,password);

try{
String fileName = saveFile;
File file = new File(fileName);
Scanner inputStream = new Scanner(file);
String[] array = new String[7];

Statement statement = connection.createStatement();
while(inputStream.hasNext()){//reads from the file until there are no items left
String data = inputStream.next();
array = data.split(",");
String reportidString = array[0];

String coursenameString = array[1];

String tardiesString = array[2];

String absencesString = array[3];

String totalgradeString = array[4];

String teachernameString = array[5];

String schoolnameString = array[6];

statement.executeUpdate("INSERT INTO report(reportid, coursename, tardies, absences, totalgrade, teachername, schoolname) values(reportidString, coursenameString,tardiesString, absencesString, totalgradeString, teachernameString, teachernameString, schoolnameString)");

}
inputStream.close();
}catch(FileNotFoundException e){e.printStackTrace();}

%>

最佳答案

您似乎正在 JSP scriptlet 中使用此代码。这是非常糟糕的风格。特别是对于与 View 表示没有任何关系的代码。

因此,您应该做的第一件事是创建一个普通的 Java 类并将该代码放入其中。然后你会注意到Class.forName()抛出一个已检查的异常(ClassNotFoundException)和其他一些部分,例如 DriverManager.getConnection() , connection.createStatement()statement.executeUpdate()SQLException 。您不应该让 servlet 容器捕获这些异常。

然后写一个简单的main()方法来检查您的代码是否正常工作,甚至更好的 JUnit 测试。

您声明了 PreparedStatement变量但从未使用过它。相反,后来您使用了一个简单的 Statement 。第一个这里更适合。所以使用类似的东西:

ps = connection.prepareStatement("INSERT INTO "
+ "report(reportid, coursename, tardies, absences, totalgrade, teachername, schoolname) "
+ "values(?, ?, ?, ?, ?, ?, ?)");

使用?作为实际值的占位符。

然后您可以设置这些值。请注意,准备好的语句索引从 1 开始。执行完所有 SQL 插入后,您应该提交事务。如果出现异常,请使用 abort() .

while(inputStream.hasNext()){//reads from the file until there are no items left
// ...
ps.setString(1, reportidString);
ps.setString(2, coursenameString);
// ...
ps.executeUpdate();
}
connection.commit();

之后您应该清理并释放资源。最好的地方是finallytry block :

} finally {
try {
ps.close();
} catch(SQLException e) {
e.printStackTrace();
}
try {
connection.close();
} catch(SQLException e) {
e.printStackTrace();
}
}

一些进一步的考虑:

如果您确实想使用普通 JSP,请使用 Front Controller pattern 。因此每个请求都会发送到前端 Controller servlet。您可以在此处决定执行哪种操作并收集 View 的数据。最后转发到 JSP 来创建 View 。在 JSP 内部,您不应使用任何 scriptlet。

考虑使用 MVC 框架,如 StrutsSpring MVC 。但目前的标准是Java Server Faces这更多是基于组件的。

使用 connection pool用于数据库连接。

使用logging而不是System.out.println()e.printStackTrace()

要有效地将较大的文件插入数据库,请使用 batch inserts .

关于java - 将文件读入 Derby 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com