我正在编写一个Web应用程序,并使用Excel作为后端,因为我不应该使用任何其他。在我的代码中,我在2个表上执行jdbc。插入1,更新另一个。以下是我的代码。
public class PostDataDAO {
DBConnection dbConnection = new DBConnection();
public void save(UserBean postBean) throws SQLException {
String userName = new com.sun.security.auth.module.NTSystem().getName();
System.out.println(userName);
Connection conn, conn1 = dbConnection.conn;
PreparedStatement ps, ps1 = dbConnection.ps;
String excelPath = "D:\\Danny\\Result1.xls";
String mainPath = dbConnection.excelPath;
try {
dbConnection.createClassForName();
conn = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=" + excelPath + "; READONLY=FALSE;");
System.out.println("Connecting to database…");
System.out.println("Oracle JDBC Driver Registered!");
if (conn != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
String insert = "insert into [result$] VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
System.out.println(postBean.getStartDate() + " from Bean" + " end date is " + postBean.getEndDate());
ps = conn.prepareStatement(insert);
ps.setString(1, postBean.getCaseNumber());
ps.setString(2, postBean.getCaseOwner());
ps.setString(3, postBean.getStatus());
ps.setString(4, postBean.getIssue());
ps.setString(5, postBean.getReason());
ps.setString(6, postBean.getDateOpened());
ps.setInt(7, postBean.getAge());
ps.setString(8, postBean.getResolution());
ps.setString(9, postBean.getFinalStatus());
ps.setString(10, postBean.getStartDate());
ps.setString(11, postBean.getEndDate());
ps.setDouble(12, postBean.getTotalTimeTaken());
System.out.println("Date from post bean ----------------- Case Number is " + postBean.getCaseNumber());
System.out.println("Storing Object is Done!");
ps.execute();
conn1 = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=" + mainPath + "; READONLY=FALSE;");
System.out.println("Connecting to database…");
System.out.println("Oracle JDBC Driver Registered!");
if (conn1 != null) {
System.out.println("You made it, take control your database now! in the second block");
} else {
}
System.out.println("for m second block " + postBean.getCaseNumber());
String x = postBean.getCaseNumber();
String updateSheet = "UPDATE [report1448039568905$] SET STATE = 1 where [Case Number] = '" + x + "'";
ps1 = conn1.prepareStatement(updateSheet);
System.out.println(" and " + updateSheet);
ps1.execute();
ps1.close();
conn1.commit();
conn1.close();
ps.close();
conn.commit();
conn.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
我的问题是,当我点击提交时,插入部分正确发布。但更新部分有点棘手和令人困惑。 System.out.println()按预期打印所有内容,并将我要发送到我的代码的数据,删除行,撤消删除,保存。我在我的eclipse控制台中收到以下消息。
Dec 01, 2015 7:18:23 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/SFDCTracker] has started
Dec 01, 2015 7:18:24 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/SFDCTracker] is completed
一旦我收到上述消息,另一张表就会更新。
我感到困惑的是,为什么我要为第二张桌子而不是第一张桌子做这件事。第一个插入没有任何问题。
请让我知道如何解决这个问题。
在这里,当我对此做了一些研究时,我开始知道,我从excel表中获取数据,我需要更新相同的Cell。最初我认为它可能是因为它可能是只读的,但我没有得到任何例外。
我的第二个结论是我需要重建。数据将在新构建时保存。这是否意味着excel文件在更新时发布,当我点击运行时,它会再次被锁定?如果是这样我怎么能解决这个问题。
由于