Avatar billede ekoch Nybegynder
10. december 2005 - 22:06 Der er 25 kommentarer og
1 løsning

Igen problemer med Java

Jeg har problemer med at hente data fra Excel.

Jeg kan godt hente en kolonne data fra Excel over i min formel i Java. Men når jeg henter række to går det ikke.

Mit problem lige nu er at hente to kolonne fra Excel.

NetBeans output skriver:

K =-20.200000000000003
java.sql.SQLException: Column not found
BUILD SUCCESSFUL (total time: 0 seconds)

Mit program ser sådan ud:

/*
* Excel.java
*
* Created on 9. december 2005, 11:45
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/

package javaapplication48;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

       


/**
*
* @author Ellen Koch  Nielsen
*/
public class Excel {
   
    /** Creates a new instance of Excel */
    public Excel() {
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        Connection c = null;
        Statement stmnt = null;
        ResultSet rs = null;
       
       
        try
        {
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            String query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
           
            stmnt = c.createStatement();
            String queryg = "select Dagnr from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryg );
           
            stmnt = c.createStatement();
            String queryd = "select GlobalS from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryd );
           
            stmnt = c.createStatement();
            String queryt = "select Dag from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryt );
           
           
           
           
           
            while( rs.next() )
            {
            // pkt. 1.0   
            // Udregning af formel: solindfald = m2 * Globalsolstråling * Rb
            // pkt. 1.1 udregning af Rb:
            // Rb = Forholdet mellem bestrålingsstyrken af direkte solstråling på en skrå flade og på vandret

   
            // udregning af K
            // lokalkonstanten = K;
           
            double Etm;
            Etm = -15;
       
            double Etst;
            Etst = -9.95;
       
            double K;
            K = 4 * (Etm - Etst);
       
            System.out.println("K =" + K );
       
           
            // Tz = lokaltid(zonetid)
           
            double Tzt;
            Tzt = Double.parseDouble( rs.getString( "Time" ));
           
            double Tz;
            Tz = Tzt;
           
            // udregning af B
            // B indsættes i grader
           
            // dagensnummer = dagnr;
       
            double dagnr;
            dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
       
            double B;
            B = (dagnr - 1) * (360/365);
       
             
            // udregning af Tj
            // Tidekvationen = Tj;
       
            double Tj;
            Tj = 229.2 * (0.000075 + 0.001868 * Math.cos(B) - 0.030277 * Math.sin(B) - 0.014615 * Math.cos(2*B) - 0.04089 * Math.sin(2*B));
               
            // Soltid = Ts;
            // udregning af Ts
           
            double Ts;
            Ts = Tz + Tj + K;
           
            System.out.println("Ts=Tz+Tj+K");
         
       
            // w = timevinklen
            // udregning af w
           
            double w;
            w = 15 * (Ts -12);
       
            //  deklination = d
            // udregning af d
           
            double d;
            d = 23.45 * Math.sin(((284+dagnr)*260)/365);
       
            // ø = stedet breddegrad i Tylstrup
           
            double ø;
            ø = 57.180;
       
            // Beta = fladens hældning
       
            double Beta;
            Beta = 45;
       
            // udregning af Rb
            // Rb = Forholdet mellem bestrålingsstyrken af direkte solstråling på en skrå flade og på vandret

           
            double Rb;
            Rb = ((Math.cos((ø-Beta))*Math.cos(d)*Math.cos(w)+Math.sin((ø-Beta))*Math.sin(d))/(Math.cos(d)*Math.cos(ø)*Math.cos(w)+Math.sin(d)*Math.sin(ø)));                     
       
           
            System.out.println("Rb = " + Rb + "");
           
            // pkt. 1.3
            // uddregning af solindfald
            // Solindfald = m2 * E * Rb
           
            // GlobalSol = data fra vejrdata
            // E = GlobalSol
           
            double E;
            E = Double.parseDouble( rs.getString( "GlobalS" ));
           
            // m2 = kvadratmeter på solfangeren
       
            double m2;
            m2 = 2.51;
           
            // udregning af solindfald
           
            double SolIndfald;
            SolIndfald = m2 * E * Rb;
           
            System.out.println("Solindfald = " + SolIndfald + "watt");
           
           
           
            // pkt  2.0
            // udregning af Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2
            // Tm = middeltemperatur
           
            // pkt. 2.1
            // udregning af DeltaT
            // DeltaT = (tid * SolIndfald)/(masse * cp)
           
            double tid;
            tid = 3600;
           
            double masse;
            masse = 75.3;
           
            // cp = SpecifikVarmekapacitet
           
            double cp;
            cp = 4180;
           
            // udregning af DeltaT
             
            double DeltaT;
            DeltaT = ((tid * SolIndfald)/(masse * cp));
           
            // pkt 2.2
            // udregning af Tm
           
            double Tind;
            Tind = 4;
       
            double Tm;
            Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2;
           
            System.out.println("Tm = " + Tm + "grader");
           
            // pkt. 3.0
            // Solfangerens effekt = nX * E * m2 * Rb
           
            // pkt. 3.1
            // nX = virkningsgrad
           
            double nX;
            nX = 0.82;
           
            // pkt. 3.2
            // udregning af SolfangerEffekt
           
            double SolfangerEffekt;
            SolfangerEffekt = nX * E * m2 * Rb;
           
            System.out.println("Solfangerens Effekt = " + SolfangerEffekt + "watt");
           
            // pkt. 4.0
            // udregning af TemperaturÆndring
            // TemperaturÆndring = ((tid * SolfangerEffekt)/(masse * cp)) + Tind
           
            // pkt. 4.1
           
            double TemperaturÆndring;
            TemperaturÆndring = ((tid * SolfangerEffekt)/( masse * cp)) + Tind ;
       
            System.out.println("Temperaturændring = " + TemperaturÆndring + "grader");
            System.out.println("Seffekt omregnet til temperatur");
       
           
           
            // pkt. 5.0
       
            // pkt. 5.1
       
      if (TemperaturÆndring >= 45)
           
            {
            System.out.println("Temperaturændring er: " + TemperaturÆndring + " grader");
            System.out.println("Varmepumpen kører ikke.");
           
            // Hvis temperaturen er over 45 grader er formlen: Seffekt = Ett:ddd
           
            double Ettdd;
            Ettdd = Double.parseDouble( rs.getString( "dag" ));
       
            System.out.println(+ Ettdd + "=" + SolfangerEffekt + " watt");
           
           
            }
            // pkt. 5.2
        else if (TemperaturÆndring >=12)
        {
            System.out.println("Temperaturændring er: " + TemperaturÆndring +  " grader.");
            System.out.println("Varmepumpen kører.");
           
            // Denne formel gælder, hvis temperaturen er under 45 grader og over 12 grader: solfangeren effekt + el - tab = Ett:ddd
           
            double El;
            El = 1120;
       
            double Tab1;
            Tab1 = 353;
           
            double Tab2;
            Tab2 = 436;
           
            double Tab;
            Tab = Tab1 + Tab2;
                 
       
            double ligning;
            ligning = SolfangerEffekt + El - Tab;
       
     
            double Ettdd;
            Ettdd = Double.parseDouble( rs.getString( "dag" ));
     
            System.out.println( (rs.getString( "Dag" )));
            System.out.println(+ Ettdd + "=" + ligning + " watt");
           
               
        }
            // pkt. 5.3
        else if (TemperaturÆndring <= 12)
           
            {
            System.out.println("Temperaturændring er kun: " + TemperaturÆndring + " grader.");
            System.out.println("Elpatronen kører.");
           
            }
     
       
           
     
       
       
       
            }
           
        }
       
       

        catch( Exception e )
        {
            System.err.println( e );
       
       
        }
       
         
            try
            {
                stmnt.close();
                c.close();
            }
            catch( Exception e )
            {
                System.err.println( e );
               
     
               
            }
       
        }

}
Avatar billede _carsten Nybegynder
10. december 2005 - 22:37 #1
Du bruger kun det sidste resultset !

Sådan:

            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            String query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  ............
                  ...........
            }
           
            stmnt = c.createStatement();
            String queryg = "select Dagnr from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryg );
            while( rs.next() ) {
                  ............
                  ...........
            }
           
            stmnt = c.createStatement();
            String queryd = "select GlobalS from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryd );
            while( rs.next() ) {
                  ............
                  ...........
            }
           
            stmnt = c.createStatement();
            String queryt = "select Dag from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( queryt );
            while( rs.next() ) {
                  ............
                  ...........
            }
Avatar billede ekoch Nybegynder
10. december 2005 - 23:32 #2
Hver af mine formler referere til formlen før, så virker formlerne ikke.

Nu får jeg disse fejlmeddelser:
init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\build\classes
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:71: cannot find symbol
symbol  : variable Tzt
location: class javaapplication50.Excelwhile
            Tz = Tzt * 60;
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:167: cannot find symbol
symbol  : variable Rb
location: class javaapplication50.Excelwhile
            SolIndfald = m2 * E * Rb;
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:220: cannot find symbol
symbol  : variable Rb
location: class javaapplication50.Excelwhile
            SolfangerEffekt = nX * E * m2 * Rb;
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:247: cannot find symbol
symbol  : variable TemperaturÆndring
location: class javaapplication50.Excelwhile
            if (TemperaturÆndring >= 45)
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:258: cannot find symbol
symbol  : variable SolfangerEffekt
location: class javaapplication50.Excelwhile
            System.out.println( + SolfangerEffekt );
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:263: cannot find symbol
symbol  : variable TemperaturÆndring
location: class javaapplication50.Excelwhile
        else if (TemperaturÆndring >=12)
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:282: cannot find symbol
symbol  : variable SolfangerEffekt
location: class javaapplication50.Excelwhile
            ligning = SolfangerEffekt + El - Tab;
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:282: operator - cannot be applied to <nulltype>,double
            ligning = SolfangerEffekt + El - Tab;
C:\Documents and Settings\Ellen Koch  Nielsen\JavaApplication50\src\javaapplication50\Excelwhile.java:295: cannot find symbol
symbol  : variable TemperaturÆndring
location: class javaapplication50.Excelwhile
        else if (TemperaturÆndring <= 12)
9 errors
Avatar billede _carsten Nybegynder
11. december 2005 - 08:57 #3
Nu ved jeg jo ikke hvad de ResultSet indeholder, men du skal selvfølgelig kun referere til de variabler som findes i de respective ResultSet.

Definer dine varialber udenfor din try/catch og gerne på samme linie
det gør din kode langt mere overskuelig og læsbar, især for andre


double Etm = -15;      // og så skrives referencer med lille begyndelsesbogstav, etm
double Etst = -9.95;
double K = 4 * (Etm - Etst);
String query = "";
 
  .........
      try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  ............
                  ...........
                  Tz = Tzt * 60;  // men kun hvis Tzt findes i det FØRSTE ResultSet
            }
           
            query = "select Dagnr from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  ............
                  ...........
            }

            query = "select GlobalS from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  ............
                  ...........
            }

            query = "select Dag from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  ............
                  ...........
            }

Referer kun til noget while løkkerne HVIS DET FINDES
Avatar billede ekoch Nybegynder
11. december 2005 - 14:49 #4
Jeg forstår ikke helt, hvordan jeg skal gøre.
Avatar billede _carsten Nybegynder
11. december 2005 - 16:07 #5
Jeg ved ikke om du er med på hvad jeg mener, øverste del af din try{catch tror jeg faktisk skal se såfan ud


double Etm = -15; 
double Etst = -9.95;
double K = 4 * (Etm - Etst);
String query = "";
double Tzt, dagnr, E, Ettdd;

      try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
            }
           
            query = "select Dagnr from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
            }

            query = "select GlobalS from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  E = Double.parseDouble( rs.getString( "GlobalS" ));
            }

            query = "select Dag from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
              Ettdd = Double.parseDouble( rs.getString( "dag" ));
            }

            ...........
            .............


Hjælper det ????
Avatar billede ekoch Nybegynder
11. december 2005 - 16:27 #6
Det hjælper lidt, men i while løkke nummer 2 mangler Tz reference til while løkke 1.
Hvad skal jeg skrive for, at Tz ved, at den skal hente sin reference i while løkke 1.

Her er mit program:

package javaapplication51;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

public class Time {
   
    /** Creates a new instance of Time */
    public Time() {
    }
   
public static void main(String[] args) {
        Connection c = null;
        Statement stmnt = null;
        ResultSet rs = null;
       
     
       
            double Etm = -15; 
            double Etst = -9.95;
            double K = 4 * (Etm - Etst);
            String query = "";
            double Tzt, dagnr, E, Ettdd;
         
       
        try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
         
              double Tz = Tzt *60;
           
            }
           
            query = "select Dagnr from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
                 
       
            // udregning af B
            // B indsættes i grader
           
            // dagensnummer = dagnr;
           
            double B;
            B = (dagnr - 1) * (360/365);
       
           
         
           
           
            // udregning af Tj
            // Tidekvationen = Tj;
       
            double Tj;
            Tj = 229.2 * (0.000075 + 0.001868 * Math.cos(B) - 0.030277 * Math.sin(B) - 0.014615 * Math.cos(2*B) - 0.04089 * Math.sin(2*B));
               
            // Soltid = Ts;
            // udregning af Ts
           
            double Ts;
            Ts = Tz + Tj + K;
           
            }

            query = "select GlobalS from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  E = Double.parseDouble( rs.getString( "GlobalS" ));
            }

            query = "select Dag from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
              Ettdd = Double.parseDouble( rs.getString( "dag" ));
            }
           
                 
        }
       
       

        catch( Exception e )
        {
            System.err.println( e );
       
       
        }
       
         
            try
            {
                stmnt.close();
                c.close();
            }
            catch( Exception e )
            {
                System.err.println( e );
               
     
               
            }
       
        }

}
Avatar billede _carsten Nybegynder
11. december 2005 - 16:40 #7
double Etm = -15; 
            double Etst = -9.95;
            double K = 4 * (Etm - Etst);
            String query = "";
            double Tzt, dagnr, E, Ettdd;
            double Tz = 0;  // SE HER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       
        try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] where Time2=4571;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
         
                Tz = Tzt *60; // FLYT Tz UNDENFOR DIN TRY/CATCH
            }
Avatar billede ekoch Nybegynder
11. december 2005 - 17:47 #8
Tak for hjælpen indtil videre, men nu gider java kun at skrive Tz ud. De næste jeg har sat til at skrive ud; Ts,SolfangerEffekt, bliver ikke skrevet ud. Fordi det er de sidste formler jeg skal bruge til at komme videre. Så det ville være med lidt mere hjælp.

Net Beans output skriver:
java.lang.NullPointerException
BUILD SUCCESSFUL (total time: 0 seconds)// når jeg fjerner udskrivning af Tz

Sådan ser programmet ud:
package javaapplication51;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

/**
*
* @author Ellen Koch  Nielsen
*/
public class Time {
   
    /** Creates a new instance of Time */
    public Time() {
    }
   




public static void main(String[] args) {
        Connection c = null;
        Statement stmnt = null;
        ResultSet rs = null;
       
       
       
       
            double Etm = -15; 
            double Etst = -9.95;
            double K = 4 * (Etm - Etst);
            String query = "";
            double Tzt, dagnr, E, Ettdd;
            double Tz = 0;
            double Rb = 0;
            double TemperaturÆndring = 0;
            double SolfangerEffekt = 0;
           
        try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
           
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
         
                Tz = Tzt *60;
            System.out.println("Tz" + Tz +  "watt");
           
            }
           
            query = "select Dagnr from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
                 
       
            // udregning af B
            // B indsættes i grader
           
            // dagensnummer = dagnr;
           
            double B;
            B = (dagnr - 1) * (360/365);
       
           
          System.out.println(+B);
           
           
            // udregning af Tj
            // Tidekvationen = Tj;
       
            double Tj;
            Tj = 229.2 * (0.000075 + 0.001868 * Math.cos(B) - 0.030277 * Math.sin(B) - 0.014615 * Math.cos(2*B) - 0.04089 * Math.sin(2*B));
           
           
           
            // Soltid = Ts;
            // udregning af Ts
           
            double Ts;
            Ts = Tz + Tj + K;
           
            System.out.println("Ts" + Ts + "watt" );
           
            // w = timevinklen
            // udregning af w
           
            double w;
            w = 15 * (Ts -12);
       
            //  deklination = d
            // udregning af d
           
            double d;
            d = 23.45 * Math.sin(((284+dagnr)*260)/365);
       
            // ø = stedet breddegrad i Tylstrup
           
            double ø;
            ø = 57.180;
       
            // Beta = fladens hældning
       
            double Beta;
            Beta = 45;
       
            // udregning af Rb
            // Rb = Forholdet mellem bestrålingsstyrken af direkte solstråling på en skrå flade og på vandret

           
           
            Rb = ((Math.cos((ø-Beta))*Math.cos(d)*Math.cos(w)+Math.sin((ø-Beta))*Math.sin(d))/(Math.cos(d)*Math.cos(ø)*Math.cos(w)+Math.sin(d)*Math.sin(ø)));                     
       
               
           
            }

            query = "select GlobalS from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
                  E = Double.parseDouble( rs.getString( "GlobalS" ));
                 
                  // pkt. 1.3
            // uddregning af solindfald
            // Solindfald = m2 * E * Rb
           
            // GlobalSol = data fra vejrdata
            // E = GlobalSol
           
         
           
            // m2 = kvadratmeter på solfangeren
       
            double m2;
            m2 = 2.51;
           
            // udregning af solindfald
           
           
            double SolIndfald;
            SolIndfald = m2 * E * Rb;
           
           
           
           
            // pkt  2.0
            // udregning af Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2
            // Tm = middeltemperatur
           
            // pkt. 2.1
            // udregning af DeltaT
            // DeltaT = (tid * SolIndfald)/(masse * cp)
           
            double tid;
            tid = 3600;
           
            double masse;
            masse = 75.3;
           
            // cp = SpecifikVarmekapacitet
           
            double cp;
            cp = 4180;
           
            // udregning af DeltaT
             
            double DeltaT;
            DeltaT = ((tid * SolIndfald)/(masse * cp));
           
            // pkt 2.2
            // udregning af Tm
           
            double Tind;
            Tind = 4;
       
            double Tm;
            Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2;
           
         
           
            // pkt. 3.0
            // Solfangerens effekt = nX * E * m2 * Rb
           
            // pkt. 3.1
            // nX = virkningsgrad
           
            double nX;
            nX = 0.82;
           
            // pkt. 3.2
            // udregning af SolfangerEffekt
           
         
            SolfangerEffekt = nX * E * m2 * Rb;
           
            System.out.println("Solfangerens Effekt = " + SolfangerEffekt + "watt");
           
            // pkt. 4.0
            // udregning af TemperaturÆndring
            // TemperaturÆndring = ((tid * SolfangerEffekt)/(masse * cp)) + Tind
           
            // pkt. 4.1
           
           
            TemperaturÆndring = ((tid * SolfangerEffekt)/( masse * cp)) + Tind ;
       
           
            }

            query = "select Dag from [sheet1$];";
            rs = stmnt.executeQuery( query );
            while( rs.next() ) {
              Ettdd = Double.parseDouble( rs.getString( "Dag" ));
                          // pkt. 5.0
       
            // pkt. 5.1
           
           
               
            if (TemperaturÆndring >= 45)
           
            {
           
           
            // Hvis temperaturen er over 45 grader er formlen: Seffekt = Ett:ddd
           
           
            Ettdd = Double.parseDouble( rs.getString( "dag" ));
       
   
            System.out.println( + SolfangerEffekt );
           
           
            }
            // pkt. 5.2
        else if (TemperaturÆndring >=12)
        {
           
            // Denne formel gælder, hvis temperaturen er under 45 grader og over 12 grader: solfangeren effekt + el - tab = Ett:ddd
           
            double El;
            El = 1120;
       
            double Tab1;
            Tab1 = 353;
           
            double Tab2;
            Tab2 = 436;
           
            double Tab;
            Tab = Tab1 + Tab2;
                 
           
            double ligning;
            ligning = SolfangerEffekt + El - Tab;
       
     
           
            Ettdd = Double.parseDouble( rs.getString( "Dag" ));
     
         
            System.out.println( + ligning );
           
               
        }
            // pkt. 5.3
        else if (TemperaturÆndring <= 12)
           
            {     
           
      }
     
             
            }
           
                 
        }
       
       

        catch( Exception e )
        {
            System.err.println( e );
       
       
        }
       
         
            try
            {
                stmnt.close();
                c.close();
            }
            catch( Exception e )
            {
                System.err.println( e );
               
     
               
            }
       
        }

}
Avatar billede _carsten Nybegynder
11. december 2005 - 17:52 #9
Mig som skriver noget sludder, sådan skal den selvfølgelig se ud, det er selve definitionen af Tz som skulle flyttes udenfor

            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
         
                Tz = Tzt *60;
            }
Avatar billede ekoch Nybegynder
11. december 2005 - 18:13 #10
med definitionen mener du: "Tz = 0" ?????

Jeg har stadig problemer med at få slutresultatet frem?????
Avatar billede ekoch Nybegynder
11. december 2005 - 18:35 #11
Jeg kan kun få resultatet af den første while løkke, så skriver netbeans output:
"java.lang.NullPointerException"

Hvad gør jeg forkert  ??????
Avatar billede _carsten Nybegynder
11. december 2005 - 18:59 #12
Du er nødt til at finde ud af hvor den nullpointer er - er det dit ResultSet i anden løkke ??

Prøv

            query = "select Dagnr from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            if(rs == null)
                System.out.println("SHIT !!!!");

            while( rs.next() ) {

Din kode er ikke specielt gennemskuelig, så jeg har lidt svært ved at se det, men find den nullpointer
Avatar billede ekoch Nybegynder
11. december 2005 - 19:09 #13
Nu skriver den bare Tz kolonnen ud og ikke mere.

Jeg forstår ikke hvorfor den bare holder op med at skrive resten ud.....
Avatar billede _carsten Nybegynder
11. december 2005 - 19:23 #14
Vil det sige at den ikke når til løkke nr. 2 ??
Avatar billede ekoch Nybegynder
11. december 2005 - 19:28 #15
Nu når den til løkke nr. 2, men den når ikke til løkke nr. 3
Avatar billede _carsten Nybegynder
11. december 2005 - 19:34 #16
d.v.s den når igennem 2, men ikke ind i 3 løkke

er rs så null der, har du checket det ??
Avatar billede ekoch Nybegynder
11. december 2005 - 19:39 #17
Så vidt jeg kan se er  rs null, men hvis du vil tjecke det




mit program:
package javaapplication51;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

/**
*
* @author Ellen Koch  Nielsen
*/
public class Time {
   
    /** Creates a new instance of Time */
    public Time() {
    }
   




public static void main(String[] args) {
        Connection c = null;
        Statement stmnt = null;
        ResultSet rs = null;
       
       
       
       
            double Etm = -15; 
            double Etst = -9.95;
            double K = 4 * (Etm - Etst);
            String query = "";
            double Tzt, dagnr, E, Ettdd;
            double Tz = 0;
            double Rb = 0;
            double TemperaturÆndring = 0;
            double SolfangerEffekt = 0;
           
        try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:vejrdata", "", "" );
            stmnt = c.createStatement();
            query = "select Time from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            if(rs == null)
               
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
         
                Tz = Tzt *60;
           
           
            }
           
            query = "select Dagnr from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            if(rs == null)
                System.out.println("SHIT !!!!");

            while( rs.next() ) {


           
           
            dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
                 
       
            // udregning af B
            // B indsættes i grader
           
            // dagensnummer = dagnr;
           
            double B;
            B = (dagnr - 1) * (360/365);
       
           
          System.out.println(+B);
           
           
            // udregning af Tj
            // Tidekvationen = Tj;
       
            double Tj;
            Tj = 229.2 * (0.000075 + 0.001868 * Math.cos(B) - 0.030277 * Math.sin(B) - 0.014615 * Math.cos(2*B) - 0.04089 * Math.sin(2*B));
           
           
           
            // Soltid = Ts;
            // udregning af Ts
           
            double Ts;
            Ts = Tz + Tj + K;
           
           
           
            // w = timevinklen
            // udregning af w
           
            double w;
            w = 15 * (Ts -12);
       
            //  deklination = d
            // udregning af d
           
            double d;
            d = 23.45 * Math.sin(((284+dagnr)*260)/365);
       
            // ø = stedet breddegrad i Tylstrup
           
            double ø;
            ø = 57.180;
       
            // Beta = fladens hældning
       
            double Beta;
            Beta = 45;
       
            // udregning af Rb
            // Rb = Forholdet mellem bestrålingsstyrken af direkte solstråling på en skrå flade og på vandret

           
           
            Rb = ((Math.cos((ø-Beta))*Math.cos(d)*Math.cos(w)+Math.sin((ø-Beta))*Math.sin(d))/(Math.cos(d)*Math.cos(ø)*Math.cos(w)+Math.sin(d)*Math.sin(ø)));                     
       
            System.out.println(+Rb);   
           
            }
           
            query = "select GlobalS from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            if(rs == null)
            System.out.println("SHIT !!!!"); 

            while( rs.next() ) {


           
            E = Double.parseDouble( rs.getString( "GlobalS" ));
                 
                  // pkt. 1.3
            // uddregning af solindfald
            // Solindfald = m2 * E * Rb
           
            // GlobalSol = data fra vejrdata
            // E = GlobalSol
           
         
           
            // m2 = kvadratmeter på solfangeren
       
            double m2;
            m2 = 2.51;
           
            // udregning af solindfald
           
           
            double SolIndfald;
            SolIndfald = m2 * E * Rb;
           
           
            System.out.println(+SolIndfald);
           
            // pkt  2.0
            // udregning af Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2
            // Tm = middeltemperatur
           
            // pkt. 2.1
            // udregning af DeltaT
            // DeltaT = (tid * SolIndfald)/(masse * cp)
           
            double tid;
            tid = 3600;
           
            double masse;
            masse = 75.3;
           
            // cp = SpecifikVarmekapacitet
           
            double cp;
            cp = 4180;
           
            // udregning af DeltaT
             
            double DeltaT;
            DeltaT = ((tid * SolIndfald)/(masse * cp));
           
            // pkt 2.2
            // udregning af Tm
           
            double Tind;
            Tind = 4;
       
            double Tm;
            Tm = (((tid * SolIndfald)/(masse * cp*2))+ Tind);
           
         
           
            // pkt. 3.0
            // Solfangerens effekt = nX * E * m2 * Rb
           
            // pkt. 3.1
            // nX = virkningsgrad
           
            double nX;
            nX = 0.82;
           
            // pkt. 3.2
            // udregning af SolfangerEffekt
           
         
            SolfangerEffekt = nX * E * m2 * Rb;
           
            System.out.println("Solfangerens Effekt = " + SolfangerEffekt + "watt");
           
            // pkt. 4.0
            // udregning af TemperaturÆndring
            // TemperaturÆndring = ((tid * SolfangerEffekt)/(masse * cp)) + Tind
           
            // pkt. 4.1
           
           
            TemperaturÆndring = ((tid * SolfangerEffekt)/( masse * cp)) + Tind ;
       
           
            }
            query = "select Dag from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
            if(rs == null)
                System.out.println("SHIT !!!!");

            while( rs.next() ) {


           
              Ettdd = Double.parseDouble( rs.getString( "Dag" ));
                          // pkt. 5.0
       
            // pkt. 5.1
           
           
               
            if (TemperaturÆndring >= 45)
           
            {
           
           
            // Hvis temperaturen er over 45 grader er formlen: Seffekt = Ett:ddd
           
           
            Ettdd = Double.parseDouble( rs.getString( "dag" ));
       
   
            System.out.println( + SolfangerEffekt );
           
           
            }
            // pkt. 5.2
        else if (TemperaturÆndring >=12)
        {
           
            // Denne formel gælder, hvis temperaturen er under 45 grader og over 12 grader: solfangeren effekt + el - tab = Ett:ddd
           
            double El;
            El = 1120;
       
            double Tab1;
            Tab1 = 353;
           
            double Tab2;
            Tab2 = 436;
           
            double Tab;
            Tab = Tab1 + Tab2;
                 
           
            double ligning;
            ligning = SolfangerEffekt + El - Tab;
       
     
           
            Ettdd = Double.parseDouble( rs.getString( "Dag" ));
     
         
            System.out.println( + ligning );
           
               
        }
            // pkt. 5.3
        else if (TemperaturÆndring <= 12)
           
            {     
           
      }
     
             
            }
           
                 
        }
       
       

        catch( Exception e )
        {
            System.err.println( e );
       
       
        }
       
         
            try
            {
                stmnt.close();
                c.close();
            }
            catch( Exception e )
            {
                System.err.println( e );
               
     
               
            }
       
        }

}
Avatar billede _carsten Nybegynder
11. december 2005 - 19:46 #18
Kan du copy/paste en lille del af dit regneark her ?
Avatar billede _carsten Nybegynder
11. december 2005 - 19:55 #19
Jeg fatter ikke en hujene f..

Jeg har lige testet din kode med et regneark jeg hurtigt strikkede sammen - den kører da perfekt !!!

Er dit regneark på engelsk ??

Ellers skal det være
query = "select Time from [ark1$] ;";

og IKKE
query = "select Time from [sheet1$] ;";
Avatar billede ekoch Nybegynder
11. december 2005 - 19:57 #20
Dag    Time    Dato            Dagnr
1    0    01-07-03 00:00    182,000
1    1    01-07-03 01:00    183,000
1    2    01-07-03 02:00    183,000
1    3    01-07-03 03:00    183,000
1    4    01-07-03 04:00    183,000
1    5    01-07-03 05:00    183,000
1    6    01-07-03 06:00    183,000
1    7    01-07-03 07:00    183,000
1    8    01-07-03 08:00    183,000
1    9    01-07-03 09:00    183,000
1    10    01-07-03 10:00    183,000
1    11    01-07-03 11:00    183,000
1    12    01-07-03 12:00    183,000

Time2  TempC    DugtempC   
15,5    13,5    0
15,6    13,2    0
15,7    13,3    0
15,4    13,2    0
15,1    12,8    12
13,5    12,2    18
13,5    12,5    41
13,3    12,2    42
13,5    12,6    50
13,4    12,9    53
13,4    12,9    51
13,5    13,1    33
13,4    13,1    71


GlobalS
1
2
3
4
5
6
7
8
9
10
11
12
13
Avatar billede _carsten Nybegynder
11. december 2005 - 20:10 #21
Forstår det ikke helt
0 til 12 er det Dag
01-07-03 00:00 må være Dato og Time IKKE Time og Dato

Er det korrekt ???
Avatar billede ekoch Nybegynder
11. december 2005 - 20:17 #22
Ja det er korrekt
Avatar billede _carsten Nybegynder
11. december 2005 - 20:19 #23
Gig mig lige en halv time til at strikke det sammen
Avatar billede ekoch Nybegynder
11. december 2005 - 20:22 #24
Dag    Time    Dato            Dagnr    Time2
1    0    01-07-03 00:00    182,000    1
1    1    01-07-03 01:00    183,000    2
1    2    01-07-03 02:00    183,000    3
1    3    01-07-03 03:00    183,000    4
1    4    01-07-03 04:00    183,000    5
1    5    01-07-03 05:00    183,000    6
1    6    01-07-03 06:00    183,000    7
1    7    01-07-03 07:00    183,000    8
1    8    01-07-03 08:00    183,000    9
1    9    01-07-03 09:00    183,000    10
1    10    01-07-03 10:00    183,000    11
1    11    01-07-03 11:00    183,000    12
1    12    01-07-03 12:00    183,000    13
1    13    01-07-03 13:00    183,000    14
1    14    01-07-03 14:00    183,000    15
1    15    01-07-03 15:00    183,000    16
1    16    01-07-03 16:00    183,000    17
1    17    01-07-03 17:00    183,000    18
1    18    01-07-03 18:00    183,000    19
1    19    01-07-03 19:00    183,000    20
1    20    01-07-03 20:00    183,000    21
1    21    01-07-03 21:00    183,000    22
1    22    01-07-03 22:00    183,000    23
1    23    01-07-03 23:00    183,000    24


TempC    DugtempC    GlobalS
15,5    13,5            0
15,6    13,2            0
15,7    13,3            0
15,4    13,2            0
15,1    12,8            12
13,5    12,2            18
13,5    12,5            41
13,3    12,2            42
13,5    12,6            50
13,4    12,9            53
13,4    12,9            51
13,5    13,1            33
13,4    13,1            71
14,1    13,8          101
14,3    13,9          93
14    13,8          98
14,3    14          63
14,8    14,5          54
15,1    14,9          36
15    14,8          58
15    14,9          18
14,2    14,1          1
14,4    14,3          0
13,1    13          0

Der er data for et helt år
Avatar billede _carsten Nybegynder
11. december 2005 - 20:42 #25
Sådan skal den se ud


package javaapplication51;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

/**
*
* @author Ellen Koch  Nielsen
*/
public class Time {
   
    /** Creates a new instance of Time */
    public Time() {
    }
   
    public static void main(String[] args) {
        Connection c = null;
        Statement stmnt = null;
        ResultSet rs = null;
       
       
       
       
        double Etm = -15;
        double Etst = -9.95;
        double K = 4 * (Etm - Etst);
        String query = "";
        double Tzt = 0, dagnr = 0, E = 0, Ettdd = 0;
        double Tz = 0;
        double Rb = 0;
        double TemperaturÆndring = 0;
        double SolfangerEffekt = 0;
        try{
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:tester", "", "" );
            stmnt = c.createStatement();
            query = "select Time, Dagnr, GlobalS, Dag from [sheet1$] ;";
            rs = stmnt.executeQuery( query );
             
            while( rs.next() ) {
                Tzt = Double.parseDouble( rs.getString( "Time" ));
                dagnr = Double.parseDouble( rs.getString( "Dagnr" ));
                E = Double.parseDouble( rs.getString( "GlobalS" ));
                Ettdd = Double.parseDouble( rs.getString( "Dag" ));
               
                Tz = Tzt *60;


                // udregning af B
                // B indsættes i grader

                // dagensnummer = dagnr;

                double B;
                B = (dagnr - 1) * (360/365);

                // udregning af Tj
                // Tidekvationen = Tj;

                double Tj;
                Tj = 229.2 * (0.000075 + 0.001868 * Math.cos(B) - 0.030277 * Math.sin(B) - 0.014615 * Math.cos(2*B) - 0.04089 * Math.sin(2*B));


                // Soltid = Ts;
                // udregning af Ts

                double Ts;
                Ts = Tz + Tj + K;


                // w = timevinklen
                // udregning af w

                double w;
                w = 15 * (Ts -12);

                //  deklination = d
                // udregning af d

                double d;
                d = 23.45 * Math.sin(((284+dagnr)*260)/365);

                // ø = stedet breddegrad i Tylstrup

                double ø;
                ø = 57.180;

                // Beta = fladens hældning

                double Beta;
                Beta = 45;

                // udregning af Rb
                // Rb = Forholdet mellem bestrålingsstyrken af direkte solstråling på en skrå flade og på vandret



                Rb = ((Math.cos((ø-Beta))*Math.cos(d)*Math.cos(w)+Math.sin((ø-Beta))*Math.sin(d))/(Math.cos(d)*Math.cos(ø)*Math.cos(w)+Math.sin(d)*Math.sin(ø)));

                System.out.println(+Rb);


                // pkt. 1.3
                // uddregning af solindfald
                // Solindfald = m2 * E * Rb

                // GlobalSol = data fra vejrdata
                // E = GlobalSol



                // m2 = kvadratmeter på solfangeren

                double m2;
                m2 = 2.51;

                // udregning af solindfald


                double SolIndfald;
                SolIndfald = m2 * E * Rb;


                System.out.println(+SolIndfald);

                // pkt  2.0
                // udregning af Tm = ((tid * SolIndfald)/(masse * cp)+ Tind)/2
                // Tm = middeltemperatur

                // pkt. 2.1
                // udregning af DeltaT
                // DeltaT = (tid * SolIndfald)/(masse * cp)

                double tid;
                tid = 3600;

                double masse;
                masse = 75.3;

                // cp = SpecifikVarmekapacitet

                double cp;
                cp = 4180;

                // udregning af DeltaT

                double DeltaT;
                DeltaT = ((tid * SolIndfald)/(masse * cp));

                // pkt 2.2
                // udregning af Tm

                double Tind;
                Tind = 4;

                double Tm;
                Tm = (((tid * SolIndfald)/(masse * cp*2))+ Tind);

                // pkt. 3.0
                // Solfangerens effekt = nX * E * m2 * Rb

                // pkt. 3.1
                // nX = virkningsgrad

                double nX;
                nX = 0.82;

                // pkt. 3.2
                // udregning af SolfangerEffekt


                SolfangerEffekt = nX * E * m2 * Rb;

                System.out.println("Solfangerens Effekt = " + SolfangerEffekt + "watt");

                // pkt. 4.0
                // udregning af TemperaturÆndring
                // TemperaturÆndring = ((tid * SolfangerEffekt)/(masse * cp)) + Tind

                // pkt. 4.1


                TemperaturÆndring = ((tid * SolfangerEffekt)/( masse * cp)) + Tind ;

                // pkt. 5.0

                // pkt. 5.1



                if (TemperaturÆndring >= 45) {
                    System.out.println( + SolfangerEffekt );
                }
                // pkt. 5.2
                else if (TemperaturÆndring >=12) {
                    // Denne formel gælder, hvis temperaturen er under 45 grader og over 12 grader: solfangeren effekt + el - tab = Ett:ddd

                    double El;
                    El = 1120;

                    double Tab1;
                    Tab1 = 353;

                    double Tab2;
                    Tab2 = 436;

                    double Tab;
                    Tab = Tab1 + Tab2;


                    double ligning;
                    ligning = SolfangerEffekt + El - Tab;
                    System.out.println( + ligning );
                }
                // pkt. 5.3
                else if (TemperaturÆndring <= 12){

                }
            }
        }
        catch( Exception e ) {
            System.err.println( e );
        }


        try {
            stmnt.close();
            c.close();
        } catch( Exception e ) {
            System.err.println( e ); 
        }
 
}
}
Avatar billede ekoch Nybegynder
11. december 2005 - 20:56 #26
Tusind tak for hjælpen....

Smuk 3. Advent
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester