无法使用jdbc查询从表中检索列值

时间:2014-08-19 17:35:32

标签: jdbc

以下给出的是整个代码。它唯一的印刷"成功连接"。但它没有执行查询部分。指导我哪里出错了。不执行或打印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());
        }



    }}

1 个答案:

答案 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循环中执行代码。