我正在尝试向显示来自MySQL数据库的数据的webapp添加“导出到CSV”功能。我有一个“queryExecuter”类来执行来自我的servlet的查询。我已经使用它来成功执行插入查询,所以我知道连接工作等,但是使用“into outfile”语句的查询根本就不执行。这是我的代码,
java类......
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class queryExecuter {
public void exportToCSV(String query) {
DBase db = new DBase();
Connection conn = db.connect(
mydatabaseurl ,"myusername","mypassword");
db.exportData(conn,query);
}
}
class DBase {
public DBase() {
}
public Connection connect(String db_connect_str,
String db_userid, String db_password) {
Connection conn;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(db_connect_str,
db_userid, db_password);
} catch(Exception e) {
e.printStackTrace();
conn = null;
}
return conn;
}
public void exportData(Connection conn,String query) {
Statement stmt;
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
stmt.execute(query);
} catch(Exception e) {
e.printStackTrace();
stmt = null;
}
}
};
servlet ......
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyExportServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String query = "select into outfile 'theoutfile.txt' * from mytable;";
request.setAttribute("query", query);
queryExecuter mydata = new queryExecuter();
mydata.exportToCSV(query);
RequestDispatcher view = request.getRequestDispatcher("ConfirmationPage.jsp");
view.forward(request, response);
}
}
非常感谢任何帮助。
谢谢
答案 0 :(得分:0)
通常你会执行查询,并获得一个ResultSet。您可以读取ResultSet并将内容写入文件(使用Java)。这是Good(tm),因为Java服务器通常在另一台机器上作为数据库,outfile总是在数据库机器上。
除了那种智慧:)你应该做
select * into outfile
而不是
select into outfile *
也可能是你必须要做的
select <entire_query> into outfile
答案 1 :(得分:0)
你怎么断定它没有执行?
让我猜一下,文件是不是写在那里你预期的?这可能是非常正确的,因为您的代码使用相对磁盘文件系统路径(如'theoutfile.txt'
)而不是绝对文件系统路径(如'c:/theoutfile.txt'
),类似地也可能new File('theoutfile.txt')
。
相对磁盘文件系统路径相对于依赖当前工作目录的启动方式(在命令行中,作为服务,在服务器中等)。你不应该在编程时依赖它。始终使用绝对磁盘文件系统路径。
在MySQL中,文件的实际根目录可能是 c:/mysql/bin
,而在webapp(servlet)中,文件的实际根目录可能是 {{1 }}。相对路径没有什么是肯定的。不要使用它们。