以下给出的是整个代码。它唯一的印刷"成功连接"。但它没有执行查询部分。指导我哪里出错了。不执行或打印Resultset之后的任何内容。字符串查询sql3包含baseParam和denom。这两个字段包含我想从中检索值的列名。我无法做到。引导我,因为我在某个地方出错了。我甚至尝试使用rs对象进行相同的结果循环,但是在代码中的Resultset之后没有执行。我无法将它以java格式转换为mysql查询
package com.journaldev.json;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import static java.lang.Math.*;
import java.io.*;
import com.mysql.jdbc.ResultSetMetaData;
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="";
String sql1="";
final String[] COL={ "LC_Final","LC_Preview"};
denom = "(" + COL[0] + "+" + COL[1] + ")";
Statement stmt = null;
//sql1 = "select * from raas.jobs";
stmt = conn.createStatement();
// sql3 = "select avg(eff),min(eff),max(eff) from(select ("+baseParam.trim()+"/"+denom.trim()+"))as eff from ras)as s";
sql3 = "select 'Efficiency' Field,avg(eff),min(eff),max(eff) from(select (Job_Render/(LC_Final+LC_Preview))as eff from ras)as s";
System.out.println(sql3);
// try{
// ResultSet rs = stmt.executeQuery(sql3);
// }
// catch(Exception p){
// p.getStackTrace();
//
// }System.out.println("Hello");
// //System.out.println(rs);
try{
ResultSet res = stmt.executeQuery(sql1);
System.out.println(res);
while(res.next()){
String JobID = res.getString("JobID");
System.out.println("Job ID : " + JobID);
System.out.println("Hello"+sql1);
}}
catch(Exception e){
System.out.println(e.getMessage());
}
}}
答案 0 :(得分:0)
好吧,我发现了一个问题,但不确定它会如何直接导致您的问题。在while()语句中,您在ResultSet对象res上调用next()。但是在循环中,您可以在rs ResultSet对象上调用getString()。不确定你想要发生什么,但是getString调用不会返回任何结果,并且rs对象的游标还没有移动到结果集的第一行。您将其移动到res的第一行,然后尝试从rs获取数据。可能无法解决您的问题,但它不会产生任何有用的输出。
我的猜测是你的res结果集是空的所以你的第一次通过while循环,res.next()计算结果为FALSE并且在代码路径进入它之前你退出循环以执行你的println语句
如果ResulSet有一个方法调用getRowCount(),你可以在循环之前为每个ResultSet调用它并打印输出。但它没有:(
为了调试目的来测试关于res为空的理论,请在while循环之前执行此操作。
System.out.println("res has results: " + res.next());
如果这是假的,第一次点击res.next()时,结果集为空,你永远不会在while循环中执行代码。