找不到符号,符号:变量DBHandler位置:类ProcessBean

时间:2014-04-06 02:06:09

标签: java servlets

我在包助手中有两个类,ProcessBean.java和DBHandler.java

ProcessBean.java

package helpers;

import java.util.*;
import java.sql.*;

public class ProcessBean implements java.io.Serializable {
    public ProcessBean() {}

    public String processRequest(String option) {
     String query = "";
        String type = option.split("|")[0];
        int id = Integer.parseInt(option.split("|")[1]);

        if(type.equals("category"))
            query = "Select * from products where categoryId="+id;
        else if(type.equals("vendor"))
            query = "Select * from products where vendorId="+id;
        else
            query = "select * from products";

         Vector<String []> v = DBHandler.doQuery(query);
         return DBHandler.getQueryResultTable(v);
    }      
}  

DBHandler.java

package helpers;

import java.util.*;
import java.sql.*;

public class DBHandler implements java.io.Serializable {

    public static Vector<String []> doQuery(String s) {
        String user = "xxx";
        String password = "xxx";
        String database = "xxx";
    String connectionURL = "jdbc:mysql://opatija:3306/" + database +
            "?user=" + user + "&password=" + password;      
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
        Vector<String[]> v = new Vector<String[]>();        

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(connectionURL);
        statement = connection.createStatement();
        resultSet = statement.executeQuery(s);

            ResultSetMetaData md = resultSet.getMetaData();
            int numCols = md.getColumnCount();

            while(resultSet.next()) {
                String [] tmp = new String[numCols];
                for(int i=0; i < numCols; i++)
                    tmp[i] = resultSet.getString(i+1);  // resultSet getString is 1 based
                v.add(tmp);                
                    }
        }
        catch(Exception e) {
            e.printStackTrace();
            }           
        finally {
            try {
                resultSet.close();
                statement.close();                
                connection.close();
                }
            catch(SQLException e) {}  // don't do anything if the connection is not open.
        }
        return v;
    }  
    public static int doUpdate(String s) {
        String user = "xxx";
        String password = "xxx";
        String database = "xxx";
        String connectionURL = "jdbc:mysql://opatija:3306/" + database +
            "?user=" + user + "&password=" + password;      
        Connection connection = null;
        Statement statement = null;
        int result = -1;   

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(connectionURL);
        statement = connection.createStatement();  
            result = statement.executeUpdate(s);
            }
    catch(Exception e) {
        e.printStackTrace();
        }           
        finally {
            try {
                statement.close();                
                connection.close();
                }
            catch(SQLException e) {}  // don't do anything if the connection is not open.
        }
        return result;
    }

    public static String getQueryResultTable(Vector<String []> v) {
        StringBuffer toReturn = new StringBuffer();
    toReturn.append("<table>");
    for(int i=0; i < v.size(); i++) {
        String [] tmp = v.elementAt(i);
        toReturn.append("<tr>");        
        for(int j=0; j < tmp.length; j++)
            toReturn.append("<td>" + tmp[j] + "</td>");
        toReturn.append("</tr>");
        }
    toReturn.append("</table>"); 
    return toReturn.toString();
    }                       
}            

当我编译ProcessBean时,我收到此错误

ProcessBean.java:21: error: cannot find symbol  
Vector<String []> v = DBHandler.doQuery(query);  
                               ^   
symbol:   variable DBHandler   location: class ProcessBean  
ProcessBean.java:22: error: cannot find symbol  
return DBHandler.getQueryResultTable(v);  
                ^   
symbol:   variable DBHandler   location: class ProcessBean  
2 errors

我使用notepad++macxQuartz连接到服务器,cd一直到文件夹&#39; helpers&#39;然后命令 -

javac ProcessBean.java

这两个文件都在服务器上的文件夹助手下,DBHandler已成功编译。 尝试了一切,但我无法理解。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

要使编译器找到DBHandler,它必须位于编译器正在使用的类路径上。

您已编辑帖子以表明您在命令行上编译,因此您有一个&#34;默认目录&#34; (你去的那个)。让我们说目录是&#34; projects&#34;,所以它包含目录&#34; packages&#34;。

你需要有目录&#34; projects&#34;在类路径上。您可以通过在项目中编译命令行的默认目录并使类路径包含&#34;来实现这一点。&#34 ;;你可以拥有&#34;项目&#34;类路径中的目录。

我不知道如何在mac上设置系统变量。您可以通过执行以下命令在命令行上设置类路径:javac -cp . helpers/ProcessBean.java

有可能&#34;。&#34;默认位于类路径上;我也不会在mac上知道这一点。

答案 1 :(得分:0)

  

我使用notepad ++,mac和xQuartz连接到服务器,cd一直到文件夹'helpers'然后命令--javac ProcessBean.java

位于helpers的父文件夹中,并使用以下编译命令。

javac -d . helpers/ProcessBean.java

所有生成的类文件都将保存在其特定于包的文件夹中 在此之前,请确保类路径也设置为

的当前文件夹
classpath = %classpath%;.

这将删除包结构中的特定类而不是错误。