Java sql语句;“输入输出文件”;不使用jdbc
我正在尝试将“导出到CSV”功能添加到显示MySQL数据库数据的webapp中。我编写了一个“queryExecuter”类来执行来自servlet的查询。我已经使用它成功地执行了insert查询,因此我知道连接可以工作,等等,但是带有“into outfile”语句的查询根本不执行。这是我的密码 java类…Java sql语句;“输入输出文件”;不使用jdbc,java,mysql,sql,jdbc,into-outfile,Java,Mysql,Sql,Jdbc,Into Outfile,我正在尝试将“导出到CSV”功能添加到显示MySQL数据库数据的webapp中。我编写了一个“queryExecuter”类来执行来自servlet的查询。我已经使用它成功地执行了insert查询,因此我知道连接可以工作,等等,但是带有“into outfile”语句的查询根本不执行。这是我的密码 java类… import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import
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;
}
}
};
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);
}
}
servlet…
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;
}
}
};
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);
}
}
任何帮助都将不胜感激
谢谢通常您会执行查询并获得结果集。您可以读取结果集并将内容写入文件(使用Java)。这很好(tm),因为Java服务器通常在另一台机器上作为数据库,而outfile总是在数据库机器上 除此之外:)你应该这样做
select * into outfile
而不是
select into outfile *
这也可能是你甚至不得不做的
select <entire_query> into outfile
选择到输出文件中
请参阅和。通常,您会执行查询并获得结果集。您可以读取结果集并将内容写入文件(使用Java)。这很好(tm),因为Java服务器通常在另一台机器上作为数据库,而outfile总是在数据库机器上 除此之外:)你应该这样做
select * into outfile
而不是
select into outfile *
这也可能是你甚至不得不做的
select <entire_query> into outfile
选择到输出文件中
请参阅和。您是如何得出它没有执行的结论的 让我猜猜,文件没有写在你期望的地方?这可能是非常正确的,因为您的代码使用相对磁盘文件系统路径,如
'theoutfile.txt'
,而不是绝对文件系统路径,如'c:/theoutfile.txt'
,类似地,也可能使用新文件('theoutfile.txt')
相对磁盘文件系统路径与当前工作目录相对,而当前工作目录取决于启动应用程序的方式(在命令行、作为服务、服务器等中)。编程时千万不要依赖它。始终使用绝对磁盘文件系统路径
在MySQL中,文件的实际根可能是
c:/MySQL/bin
,而在webapp(servlet)中,文件的实际根可能是c:/webserverinstallationfolder/webapps
。对于相对路径,没有什么是确定的。不要使用它们。您是如何得出它不执行的结论的
让我猜猜,文件没有写在你期望的地方?这可能是非常正确的,因为您的代码使用相对磁盘文件系统路径,如'theoutfile.txt'
,而不是绝对文件系统路径,如'c:/theoutfile.txt'
,类似地,也可能使用新文件('theoutfile.txt')
相对磁盘文件系统路径与当前工作目录相对,而当前工作目录取决于启动应用程序的方式(在命令行、作为服务、服务器等中)。编程时千万不要依赖它。始终使用绝对磁盘文件系统路径
在MySQL中,文件的实际根可能是
c:/MySQL/bin
,而在webapp(servlet)中,文件的实际根可能是c:/webserverinstallationfolder/webapps
。对于相对路径,没有什么是确定的。不要使用它们。这只会占用大量记录的内存。谢谢!在我的sql语法混乱的过程中,这只会占用大量记录的内存。谢谢!在某种程度上,我的sql语法变得混乱谢谢你的帖子我同意相对路径是不可取的,但是我知道我可以在MySQL数据文件中查找这个简单的测试用例,因为我一直直接从MySQL执行查询作为比较。看起来真正的问题是我的语法,当我试图修复代码中的其他东西时,语法变得混乱。换句话说,你的问题已经用另一种方法解决了?谢谢你的帖子我同意相对路径是不可取的,但是我知道我可以在MySQL数据文件中查找这个简单的测试用例,因为我直接从MySQL执行查询作为比较。看起来真正的问题是我在试图修复代码中的其他东西时语法变得混乱。换句话说,你的问题已经以另一种方式解决了?