Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 07:41 Der er 19 kommentarer og
1 løsning

Angående Serperering af kode

Hvis jeg ønsker at flytte hvise dele over i en selvstændig klasse, hvis der er en del der skal bruges i en del klasser. Her er min kode skriver nedenunder hvad der skal flyttes ud i en selvstændig klasse.

package test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.ArrayList;

public class searchServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
     
        try {
           
String isbnIn;   
String forfatter;
String titel;
String forlag;
String beskrivelse;

int counter =0;
           
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
Statement stmt = con.createStatement();


isbnIn = request.getParameter("isbn");
forfatter = request.getParameter("forfatter");
titel = request.getParameter("titel");
forlag = request.getParameter("forlag");
beskrivelse = request.getParameter("beskrivelse");



if (isbnIn.length() > 0 && forfatter.length() == 0 && titel.length() == 0 && forlag.length() == 0 && beskrivelse.length() == 0)    {

ResultSet rs = stmt.executeQuery("SELECT isbn, forfatter, titel, forlag, beskrivelse FROM boeger WHERE isbn = '" + isbnIn + "'");     

ArrayList boger = new ArrayList();

while(rs.next()) {
   
boger.add(new bog(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));

}
request.setAttribute("search", "done");
request.setAttribute("boger", boger);

rs.close();

stmt.close();

counter = 1;

    }
   
else if(forfatter.length() > 0 && titel.length() > 0 && isbnIn.length() == 0 && forlag.length() == 0 && beskrivelse.length() == 0)    {

ResultSet rs = stmt.executeQuery("SELECT isbn, forfatter, titel, forlag, beskrivelse FROM boeger WHERE forfatter  = '" + forfatter + "' AND titel = '" + titel + "'");     

ArrayList boger = new ArrayList();

while(rs.next()) {
   
boger.add(new bog(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));

}
request.setAttribute("search", "done");
request.setAttribute("boger", boger);

rs.close();

stmt.close();

counter = 1;
   
}   

else if(beskrivelse.length() > 0 && isbnIn.length() == 0 && forfatter.length() == 0 && titel.length() == 0 && forlag.length() == 0)    {

ResultSet rs = stmt.executeQuery("SELECT isbn, forfatter, titel, forlag, beskrivelse FROM boeger WHERE beskrivelse LIKE '%" + beskrivelse + "%'");

ArrayList boger = new ArrayList();

while(rs.next()) {
   
boger.add(new bog(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));

}

request.setAttribute("search", "done");
request.setAttribute("boger", boger);

rs.close();

stmt.close();

counter = 1;

}

else  {
    if(counter ==0)
    request.setAttribute("searchnone", "none");
}


con.close();
 
     
} catch (Exception e) {
        }
        getServletConfig().getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    }
}


Det er selve forbindelsen til databasen der skal ligge i en selvstændig klasse. Skal man lave en bean og i såfald hvordan opstilelr man denne. Det er denne kode der skal rykkes i en selvstændig klasse

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
Statement stmt = con.createStatement();
Avatar billede arne_v Ekspert
22. november 2004 - 07:47 #1
Klasser som henter en connection er ofte set.

public class DBUtil {
    public static Connection getConnection() {
        // kode
    }
}

der bruges som:

Connection con = DBUtil.getConnection();

[det er lidt svært at returnere statemenet, da du jo skal have kaldt close
på connection !]
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 07:52 #2
ja det er det, så det er faktisk nemmmerer at have den i alle end klasser eller?

ellers skal man jo skrive DBUtil.closeConnection() hver gang man lukker forbindelsen eller hvad
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 07:53 #3
Jeg kan vel lave metoder i selve klassen kan det ikke bare være en almindelig java klasse med metoder for åbne og lukke samt start af forbindelse.
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 07:55 #4
Eller skal den også formateres som en servlet, men det ville jeg da nemlig ikke tro
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 07:59 #5
Siger at der mangler en return statement men burde det her ikke virke

public class dbUtil    {
   
   
public getConnection()    {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
return con;
}   
   
   
   
}
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:00 #6
Ahh dumme mig

det var sådan her

public class dbUtil    {
   
   
public getConnection{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
return con;
}   
   
   
   
}

Men det burde virke prøver lige
Avatar billede arne_v Ekspert
22. november 2004 - 08:04 #7
Du mangler en return type.
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:05 #8
Ok hvordan skriver jeg den
Avatar billede arne_v Ekspert
22. november 2004 - 08:05 #9
public class dbUtil    {
 
 
public Connection getConnection()    {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
return con;
}
Avatar billede arne_v Ekspert
22. november 2004 - 08:06 #10
Hvis du laver getConnection som ikke static metod eså kan du godt lave en
close.

Men jeg ville have levet den som static (factory style).
Avatar billede arne_v Ekspert
22. november 2004 - 08:07 #11
public class dbUtil {
  private Connection con;
  public Connection getConnection()    {
      Class.forName("com.mysql.jdbc.Driver");
      con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
      return con;
  }
  public void close() {
      con.close();
  }
}
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:07 #12
Altså i hver enkelt dokument har sin egen forbindelseskode
Avatar billede arne_v Ekspert
22. november 2004 - 08:08 #13
Den skal så kaldes som:

DBUtil dbu = new DBUtil();
Connection con = dbu.getConnection();
...
dbu.close();

i.s.f.

Connection con = DbUtil.getConnection();

i den static version.
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:13 #14
ok der
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:19 #15
Hvordan er det nu man skriver throws exception iden kode du gav mig
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:29 #16
Den vil ikke compile det her

import java.io.*;
import java.net.*;
import java.sql.*;

public class dbUtil {

private Connection con;
 
public Connection getConnection()    {
try    {
   
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/bog", "pma", "fpra6712");
  }catch (ClassNotFoundException cnfe, SQLException sqle)    {}

return con;

  }
 
public void close() {
    try    {
      con.close();
     
      } catch (SQLException sqle)    {
     
      }
  }




}

Siger det her


--------------------Configuration: bogsoeg - JDK version 1.5.0 <Default> - <Default>--------------------
C:\Program Files\Xinox Software\JCreatorV3\MyProjects\bogsoeg\src\mypackage\dbUtil.java:14: ')' expected
  }catch (ClassNotFoundException cnfe, SQLException sqle)      {}
                                      ^
C:\Program Files\Xinox Software\JCreatorV3\MyProjects\bogsoeg\src\mypackage\dbUtil.java:15: '{' expected
return con;
          ^
C:\Program Files\Xinox Software\JCreatorV3\MyProjects\bogsoeg\src\mypackage\dbUtil.java:20: illegal start of expression
public void close() {
^
C:\Program Files\Xinox Software\JCreatorV3\MyProjects\bogsoeg\src\mypackage\dbUtil.java:28: ';' expected
^
C:\Program Files\Xinox Software\JCreatorV3\MyProjects\bogsoeg\src\mypackage\dbUtil.java:32: '}' expected
}
^
5 errors

Process completed.
Avatar billede noerdar-dilling Nybegynder
22. november 2004 - 08:33 #17
Tager afsted nu er tilbage kl 10 Fatter det ikke hvorfor den giver fejl
Avatar billede arne_v Ekspert
22. november 2004 - 08:39 #18
import java.sql.*;

public class DbUtil {
    private Connection con;
    public Connection getConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/bog",    "pma", "fpra6712");
        } catch (ClassNotFoundException cnfe) {
        } catch (SQLException sqle) {
        }
        return con;
    }
    public void close() {
        try {
            con.close();
        } catch (SQLException sqle) {
        }
    }
}
Avatar billede noerdar-dilling Nybegynder
23. november 2004 - 21:05 #19
Bare send et svar Arne
Avatar billede arne_v Ekspert
23. november 2004 - 22:21 #20
kommer her
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