2014-04-06 51 views
0

我在包帮手,ProcessBean.java和DBHandler.java找不到符号,符号:变量DBHandler位置:类ProcessBean

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所有到文件夹“帮手”的方式,然后命令 -

javac ProcessBean.java 

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

任何帮助,高度赞赏。

+0

你没有正确使用矢量,或者你没有输入正确的矢量。无论哪种方式,问题与你的载体。 –

+0

哦,不要介意,对不起,你的错误信息真的不清楚。 –

回答

0

我用记事本+ +,Mac和xQuartz连接到服务器,CD中的所有文件夹,以“助手”的方式,然后命令 - javac的ProcessBean.java

helpers父文件夹中和使用下面的编译命令。

javac -d . helpers/ProcessBean.java 

所有生成的类文件都将保存在它们的包特定文件夹中。
在此之前,请确保类路径也被设置为当前文件夹是

classpath = %classpath%;. 

这将封装结构中删除特定类没有错误。

+0

感谢Ravinder,这有帮助,但我还有一个问题,我想弄清楚如何发送request.getParameter(“选项”)到ProcessBean里面jsp \t \t \t \t \t $ {processBean.processRequest( '这里')} – user3331487

+0

它应该是'processBean.processRequest(用request.getParameter( “option”))'。 –

+0

示例@ [* JSP:useBean *](http://www.coderanch.com/t/473342/JSP/java/jsp-useBean) –

0

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

你已经编辑了你的帖子,以表明你在命令行上编译,所以你有一个“默认目录”(你可以cd到的目录)。假设这个目录是“projects”,所以它包含目录“packages”。

你需要在classpath上有“projects”目录。你可以通过让一个命令行的默认目录在项目中编译并使classpath包含“。”;你可以在类路径中添加“projects”目录。

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

有可能“。”在默认情况下在类路径中;我也不知道在Mac上。

+0

我不认为OP正在遇到类路径问题 – GingerHead

+0

对不起,困惑我,我使用notepad ++,我是新来的java – user3331487

+0

那么如何编译?你在windows,unix,mac吗?你使用命令行吗?试着想象我们对你正在做的事情一无所知,并以这种方式提出你的问题;不要以为我们可以在没有上下文信息的情况下弄清楚你的问题。 – arcy