我在包助手中有两个类,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++
,mac
和xQuartz
连接到服务器,cd一直到文件夹&#39; helpers&#39;然后命令 -
javac ProcessBean.java
这两个文件都在服务器上的文件夹助手下,DBHandler
已成功编译。
尝试了一切,但我无法理解。
非常感谢任何帮助。
答案 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%;.
这将删除包结构中的特定类而不是错误。