java - MySQL 数据库连接速度无法正常工作

标签 java mysql velocity

我一直在尝试使用 Velocity 创建一个 HTML 页面,该页面显示存储在名为 users 的 SQL 表中的名称。当我运行程序时,它会打印以下堆栈跟踪:

java.sql.SQLException
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
    at com.sarvika.velocity.HelloWorld.CfNMHTMLParser.main(CfNMHTMLParser.java:41)

我确信我确实导入了所有必需的库和 MySQL 连接驱动程序。我正在使用 mysql-connector-java-5.1.6 来达到目的。我的代码是:

package com.sarvika.velocity.dbtovelocity;

import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.velocity.*;
import org.apache.velocity.app.VelocityEngine;

public class CfNMHTMLParser {

private final static String URL = "jdbc:mysql://localhost/coffeenet";
private final static String USER = "root";
private final static String PASS = "root";

private static final String BOOL_EXC = "exception";
private static final String EXC = "exc";
private static final String USER_LIST = "usersArray";

    public static void main (String [] args)
            throws IOException {

        VelocityEngine engine = new VelocityEngine();
        Template template = engine.getTemplate("HTMLTemplate.vm");
        VelocityContext context = new VelocityContext();

        CfNMHTMLParser parser = new CfNMHTMLParser();

        String [] data = null ;
        try {

            Connection conn = DriverManager.getConnection(URL, USER, PASS);
            Statement stmt = conn.createStatement();

            String query = "SELECT count(*) FROM users ;";
            ResultSet rs = stmt.executeQuery(query);

            int count = Integer.parseInt(rs.getString("count(*)"));

            data = new String[count];

            query = "SELECT AuthID FROM users ;";
            rs = stmt.executeQuery(query);

            for (int i = 0 ; i < count ; i++) {
                rs.next();
                data[i] = rs.getString("AuthID");
            }

    //          data = new String [] {
    //                  "developers",
    //                  "developers",
    //                  "developers",
    //                  "developers"
    //          };

        } catch (SQLException ex) {

            ex.printStackTrace();
            context.put(BOOL_EXC, true);
            context.put(EXC, ex.getMessage());

        }

        context.put(USER_LIST, data);

        StringWriter templateData = new StringWriter();
        template.merge(context, templateData);

        File htmlFile = new File("page.html");
        FileWriter fileWriter = new FileWriter(htmlFile);
        BufferedWriter writer = new BufferedWriter(fileWriter);
        writer.write(templateData.toString());

        writer.close();

    }

}

文件 HTMLTemplate.vm

#macro( makeUserTable $userListObjArray )
    #foreach( $user in $userListObjArray )
        <font size="7" color="ffccaa">
            $user
        </font>
        <BR>
    #end
#end

<html>

    <title>CoffeeNet Messenger Users</title>

    #if ($exception == true)
        <font size="48">Exception : $exc </font>
    #else
        #makeUserTable( $usersArray )
    #end

</html>

请告诉我哪里出错了......

最佳答案

错误出现在这行 rs.getString("count(*)") 中,因此您可以更改这两行:

String query = "SELECT count(*) FROM users ;";
...            
int count = Integer.parseInt(rs.getString("count(*)"));

分别在:

String query = "SELECT count(*) as tot FROM users ;";
...            
int count = Integer.parseInt(rs.getString("tot"));

对于 Velocity,我认为你必须初始化,这样你就可以添加这一行:

    VelocityEngine engine = new VelocityEngine();
    engine.init(); // line to add
    Template template = engine.getTemplate("HTMLTemplate.vm");

关于java - MySQL 数据库连接速度无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577773/

相关文章:

java - 将布局首选项应用于 Android 单选组中动态添加的按钮

java - 使用 Spring MVC 提交 JakartaVelocity 1.7 表单,在 Controller 中获取空值

java - 在 MVC 应用程序中为 View 层使用 JSTL 与 Velocity 的好处?

java - 如何循环 VelocityContext 中的所有变量?

Java 将日期转换为可读形式?

java - AWS如何从Java为特定IAM用户创建CMK key

Java正则表达式用于具有两个子字符串且其间不包含特定子字符串的模式

php - 将数据插入 mysql 数据库表 : showing DB error 时出现问题

php - 如何提高mysql查询处理速度

mysql - 带有计数操作的 SQL 连接查询