无法使用变量解决Java形式的jdbc查询
sql3=从select+baseParam+/+denom+as eff中选择avgeff、mineff、maxeff;这是我想要其输出的查询。 当我执行代码时,我得到一个错误,即检查您的mysql版本的语法。我使用字符串来存储列的名称。我想找出2000个作业渲染的效率,即每个作业渲染的效率。但我得到的是所有作业的总效率。当我将sql语法与它们的直接列名一起使用时。我也对该查询进行了评论,以供参考。我希望找到每个作业渲染相对于其2000 JOBID的效率。底线是我想找到2000个JOBID的效率,每个JOBID的公式是Job_Render/LC_Final+LC_Preview。我已将Job_Render存储在字符串baseParam中,并将两个LC的总和存储在字符串Denom中。请帮帮我无法使用变量解决Java形式的jdbc查询,jdbc,Jdbc,sql3=从select+baseParam+/+denom+as eff中选择avgeff、mineff、maxeff;这是我想要其输出的查询。 当我执行代码时,我得到一个错误,即检查您的mysql版本的语法。我使用字符串来存储列的名称。我想找出2000个作业渲染的效率,即每个作业渲染的效率。但我得到的是所有作业的总效率。当我将sql语法与它们的直接列名一起使用时。我也对该查询进行了评论,以供参考。我希望找到每个作业渲染相对于其2000 JOBID的效率。底线是我想找到2000个JOBID的效
public class Efficiency {
static final String DB_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/";
static final String DB_USER = "root";
static final String DB_PASSWORD = "root";
static final String dbName = "raas";
public static void main(String[] args) {
try{
effFunc();
}
catch (Exception q){
q.getMessage();
}
}
static void effFunc() throws ClassNotFoundException,SQLException{
Connection conn = null;
// STEP 2: Register JDBC driver
Class.forName(DB_DRIVER);
// STEP 3: Open a connection
System.out.println("Connecting to a selected database...");
conn = DriverManager.getConnection(DB_CONNECTION + dbName, DB_USER,
DB_PASSWORD);
System.out.println("Connected database successfully...");
String baseParam;
//String[] subParam ;
baseParam= "Job_Render";
String sql3="";
String denom="";
final String[] COL={ "LC_Final","LC_Preview"};
denom = "(" + COL[0] + "+" + COL[1] + ")";
Statement stmt = null;
stmt = conn.createStatement();
// sql3 = "select 'Efficiency' Field,avg(eff),min(eff),max(eff) from(select (Job_Render/(LC_Final+LC_Preview))as eff from ras)as s";
sql3 = "select avg(eff),min(eff),max(eff) from(select ("+baseParam+"/"+denom+"))as eff from ras)as s";
System.out.println(sql3);
//
try{
ResultSet res = stmt.executeQuery(sql3);
//System.out.println(res);
while(res.next()){
// String JobID = res.getString("JobID");
// System.out.println("Job ID : " + JobID);
String col1 = res.getString(1);
System.out.println(col1);
double avg = res.getDouble(2);
System.out.println("Average of eff is:"+avg);
double min = res.getDouble(3);
System.out.println("Min of eff is:"+min);
double max = res.getDouble(4);
System.out.println("Max of eff is:"+max);
}}
catch(Exception e){
e.getStackTrace();
System.out.println(e.getMessage());
}
}}
代码运行的查询sql1是空字符串
String sql1="";
// sql1 = "select * from raas.jobs";
ResultSet res = stmt.executeQuery(sql1); // sql1 = ""
应该是
ResultSet res = stmt.executeQuery(sql3);
编辑
然后获取值
String col1 = res.getString(1);
double avg = res.getDouble(2);
double min = res.getDouble(3);
double max = res.getDouble(4);
当你在数据库中运行select时,会得到不同的结果吗?@Elliot Frisch是的,当我通过mysql工作台运行相同的查询时,它运行得非常好。它不适用于JDBC发布您的JDBC代码。我用代码更改了正文。这是我得到的com.mysql.JDBC输出。ResultSet@27bc2616,而不是eff的值,我尝试了这个方法,但仍然没有得到从mysql获得的输出jdbcworkbench@DhruvSheth编辑。ResultSet.toString不会获取数据,也不会覆盖Object.toString.i要运行以下查询sql3=select+baseParam+/+denom+as eff from rasas s中的select avgeff、mineff、maxeff;这是对前一个查询的小修改,但我得到了语法error@ElliotFrisch我添加了一个修改后的查询,因为我想查找表中每个作业渲染的效率,而不是所有作业渲染的整体效率,因为表中有2000多个作业渲染。我不知道该怎么办do@Dhruv发布另一个问题。你想得到2000行吗?