java - 使用 MySQL 连接器的 Java Servlet 中的 XML 响应缓慢

标签 java servlets jdbc

我创建了一个 Java Servlet,它从 mySQL 数据库获取查询结果并以 XML 格式打印。 问题是打印 xml 结果需要很长的时间,大约三分钟,而在我的 PHP 脚本中则需要 5 秒。

我的Servlet相关函数是: (运行查询并返回字符串变量中的 xml,然后将其打印到页面)

public String QueryResult(String query)
{
    String retStr;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection ("jdbc:mysql://"+this.host+":"+this.port+"/"+this.db, this.user, this.pass);
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery(query);
        ResultSetMetaData rsMetaData = rset.getMetaData();

        retStr = "<Result>\n";
        while (rset.next())
        {
            retStr += "\t<Item>\n";
            for (int i=1;i<=rsMetaData.getColumnCount();i++)
            {
                retStr += "\t\t<"+rsMetaData.getColumnName(i)+">"+ rset.getString(i) + "</"+rsMetaData.getColumnName(i)+">\n";
            }
            retStr += "\t</Item>\n";
        }
        retStr += "</Result>\n";
        stmt.close();
        conn.close();
    }
    catch(Exception e) 
    {
        return "<Result><Error>"+e.toString()+"</Error></Result>";
    }
    return retStr;
}

最佳答案

字符串连接:

首先,当速度很重要时,您不希望按照您的方式连接字符串。每次连接字符串时,您都会创建一个新字符串。

最好使用具有精心规划的容量的 StringBuilder,因为从您显示的代码片段来看,默认的 StringBuilder 可能无法满足您的需求。

另请参阅:

String, StringBuffer, and StringBuilder

Why to use StringBuffer in Java instead of the string concatenation operator

XML:

XStream is a simple library to serialize objects to XML and back again.

可能与您的性能问题无关,但可能会派上用场:XStream

“性能”确实出现在他们的功能列表中。

关于java - 使用 MySQL 连接器的 Java Servlet 中的 XML 响应缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227583/

相关文章:

java - alfresco buildonly 索引器,用于搜索动态创建的属性

java - 以编程方式在 Linux ec2 实例和 Windows ec2 实例之间传输文件

java - Servlet 继承以及全局对象创建和访问

java - 以编程方式确定 Java session 超时

spring - PreparedStatementCallback;SQL[SQLStatememnt] 的无效结果集访问;嵌套异常是 java.sql.SQLException :Invalid column index Spring Auth

java - 使用 Microsoft 的 JDBC 驱动程序创建连接比使用 jTDS 快 3 倍

java - 如何处理jdbc事务中的父键约束?

java - 回收站 View 中的重复项,notifydatasetchanged 不起作用

java - 在 JAX-WS 中定义绑定(bind)名称

java - 从一个jsp调用另一个jsp