Avatar billede baitianlong Nybegynder
10. april 2006 - 14:57 Der er 7 kommentarer og
1 løsning

saert database problem

Det er maaske sql mere end java, men jeg har et underligt problem. Jeg sidder med en database med en masse firmaer i, og saa har jeg lavet en soege form med category, name og en knap.

Jeg har skrevet dette i jsp siden:

List companies = new ArrayList();
    if(request.getMethod().equals("POST")) {
        companies = DatabaseContact.getRecords(request.getParameter("incategory"), request.getParameter("inname"));
        if(companies.size() > 0) {
            showresults = true;
        }
    }

getRecords ser saadan her ud:

public static List getRecords(String category, String search) {
        Connection c = openDatabase();
        ResultSet rs = null;
        List res = new ArrayList();
        try {
            Statement stmt = c.createStatement();
            if (category != "" && search == "") {
                rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE category LIKE '%" + category + "%'");
            } else if (category != "" && search != "") {
                rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE category LIKE '%" + category + "%' AND name LIKE '%" + search + "%'");
            } else {
                rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE name LIKE '%" + search + "%'");
            }
            while(rs.next()) {
                Wp_company company = new Wp_company();
                company.setCategory(rs.getString("category"));
                company.setName(rs.getString("name"));
                company.setDescription(rs.getString("description"));
                company.setState(rs.getString("state"));
                company.setPhone(rs.getString("phone"));
                company.setEmail(rs.getString("email"));
                company.setURL(rs.getString("URL"));
                res.add(company);
            }
        } catch (SQLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        return res;
    }

formen ser saadan her ud:

<form action="searchform.jsp" method="post">
    <table style="width:500px; height:300px; border-width:1px; border-color:#999999;" class="formtext">
      <tr>
          <td colspan="2"><b>Search for companies</b></td>
      </tr>
      <tr>
          <td>Category</td>
          <td>
            <select name="incategory" size="1">
            <option value="">Choose category or leave blank for all</option>
            <%
                List a = DatabaseContact.getCategories();
                for(int i = 0; i < a.size(); i++) {
                    String current = (String) a.get(i);
                    out.write("<option value=\"" + current + "\">" + current + "</option>\n");
                }
            %>
            </select>
          </td>
      </tr>
      <tr>
          <td>Name (or part of name)</td>
          <td><input type="text" size="30" name="inname"></td>
      </tr>
      <tr>
          <td colspan="2" align="center"><input type="submit" value="Search"></td>
      </tr>
    </table>
    </form>

Hvis jeg ikke skriver noget i tekstfeltet, men vaelger f.eks Computer Network Hardware i selectoren, saa er foerste post, der vises et firma med navn Hts. Hvis jeg ikke vaelger noget i selectoren, men skriver Hts i tekstfeltet faar jeg ogsaa resultater, men hvis jeg vaelger Computer Network Hardware i selectoren og skriver Hts i tekstfeltet faar jeg ingen resultater. Jeg kan ikke se hvorfor???
Avatar billede arne_v Ekspert
10. april 2006 - 15:04 #1
if (category != "" && search == "") {

skal nok vaere

if (!category.equals("") && search.equals("")) {

etc.
Avatar billede baitianlong Nybegynder
10. april 2006 - 15:17 #2
Det lader til at virke,

if (!category.equals("") && search.equals("")) {
    rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE category LIKE '%" + category + "%'");
} else if (!category.equals("") && !search.equals("")) {
    rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE category LIKE '%" + category + "%' AND name LIKE '%" + search + "%'");
} else {
    rs = stmt.executeQuery("SELECT * FROM " + table + " WHERE name LIKE '%" + search + "%'");
}

men jeg forstaar ikke hvorfor??
Avatar billede arne_v Ekspert
10. april 2006 - 15:23 #3
category != ""

tester om category og "" er samme objekt

!category.equals("")

tester om categori indeholder en blank streng

proev evt. at koere dette lille program og studer output:

public class Equals {
    public static void main(String[] args) {
        String s1 = "ab";
        String s2 = new String("ab");
        String s3 = "a" + "b";
        String s4 = new String("a") + new String("b");
        String s5 = a() + b();
        System.out.println((s1=="ab") + " " + (s1.equals("ab")));
        System.out.println((s2=="ab") + " " + (s2.equals("ab")));
        System.out.println((s3=="ab") + " " + (s3.equals("ab")));
        System.out.println((s4=="ab") + " " + (s4.equals("ab")));
        System.out.println((s5=="ab") + " " + (s5.equals("ab")));
    }
    private static String a() {
        return "a";
    }
    private static String b() {
        return "b";
    }
}
Avatar billede baitianlong Nybegynder
11. april 2006 - 11:24 #4
Jeg forstaar det lidt bedre nu, og du har besvaret spoergsmaalet. Tak.

Da jeg har sat ret mange points paa her, ville jeg hoere om du maaske kan fortaelle mig hvorfor min tomcat er lidt saer... Hvis jeg skriver

<c:out value="${4+4}" />

saa skriver den ${4+4} paa siden i stedet for 8. Det er et generelt problem med det jeg sidder og arbejder med, og jeg fatter det simpelthen ikke. Nogen hurtig ide om hvorfor?
Avatar billede arne_v Ekspert
11. april 2006 - 12:29 #5
så ligger jeg et svar
Avatar billede arne_v Ekspert
11. april 2006 - 12:30 #6
EL kræver så vidt jeg ved JSP 2.0 / Servlet 2.4

så prøv og erstat

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
...
</web-app>

med

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
...
</web-app>

i din web.xml
Avatar billede baitianlong Nybegynder
11. april 2006 - 13:36 #7
Det kan den ikke lide. Alt inden i <web-app> bliver roedt og er ikke tilladt der... er du sikker paa syntaxen. Det skal ikke i en DTD? (spoerger bare)
Avatar billede arne_v Ekspert
12. april 2006 - 04:07 #8
ja

du får kopieret indeholdet korrekt ind hvor der 3 punktummer er ?

hvad bruger du til at redigere web.xml med ?
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