04. december 2004 - 17:27
Der er
51 kommentarer og 1 løsning
JSP/SQL problem
Jeg vil gerne lave denne forespørgsel i min database SELECT p.under_produktnavn, p.id from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = 1; Det gør jeg så således, men af en eller anden grund så kikser det. Det mærkelige er at hvis jeg fjerner p.id så virker det. Jeg har prøvet at køre forespørgslen direkte på databasen og der virker hele udtrykket. ResultSet rs = d.select("SELECT p.id, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id", vi);
Annonceindlæg fra Academic Work Denmark A/S
04. december 2004 - 17:29
#1
Kan du uddybe "kikser det" ?
04. december 2004 - 17:29
#2
04. december 2004 - 17:31
#3
Jeg kan prøve at fjerne p.id så du kan se at det så virker
04. december 2004 - 17:33
#4
Jeg fik en NullPointerException, hvilket antyder en variabel der ikke har fået en værdi. Stack trace sagde: under_005fproduktgruppe_jsp.java:78 så det er vel bare at finde under_005fproduktgruppe_jsp.java ovre i work dir og se hvad linie 78 er ?
04. december 2004 - 17:37
#5
okay, det underlige er bare at der kun er en variable, og det eneste jeg gør er at hente en værdi til fra databasen
04. december 2004 - 17:44
#6
Jeg ville kunne forstå det hvis det ikke virkede når jeg kørte det op imod databasen direkte, men der virker det fint :-)
04. december 2004 - 17:48
#7
under_005fproduktgruppe_jsp.java:78 er starten på den whileløkke jeg bruger til at løbe resultsettet igennem med
04. december 2004 - 17:50
#8
Hvis du får en null pointer exception i den, så må rs vel være null !? Sker der en exception uden at du får exception teksten skrevet ud ?
04. december 2004 - 17:50
#9
ResultSet rs = d.select("SELECT p.id, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id", vi); virker ikke
04. december 2004 - 17:51
#10
ResultSet rs = d.select("SELECT p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id", vi); Virker
04. december 2004 - 17:56
#11
Det har jeg forstået. Men fejlen indikeret at det opstår ved at d.select returnerer null i det første tilfælde. Det kan den nok kun hvis der sker en SQLException inde i d.select. Hvis vi kendte den SQLException så var det nok nemmere at se fejlen.
04. december 2004 - 18:18
#12
den siger at bjorndb.p doesn't exist
04. december 2004 - 18:20
#13
Select fejlede: java.sql.SQLException: General error, message from server: "Tab le 'bjorndb.p' doesn't exist"
04. december 2004 - 18:49
#14
Det ser godt nok mystisk ud. p burde jo eksistere lige meget i begge queries Der er ikke noget snavs som f.eks. en tab karakter fremfor mellemrum i linien ?
04. december 2004 - 18:55
#15
Nope. Det ser præcis således ud select p.id, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = 1 and pr.produkt_id = p.id Jeg bruger jo også p.id tilsidst
04. december 2004 - 18:55
#16
kan det hænge sammen med alle de _ jeg bruger
04. december 2004 - 19:03
#17
Jeg fatter det simpelthen hat. Her er den klasse som jeg bruger til at skabe forbindelsen til databasen package util; import java.util.Vector; import java.sql.*; public class Databaseforbindelsemysqlprepared { private Connection conn ; private PreparedStatement pstmt; public Databaseforbindelsemysqlprepared(String data, String driver) { try { Class.forName(driver); conn = DriverManager.getConnection(data, "", ""); } catch(Exception s) { System.out.println("SQL dataforbindelse fejlede"+s); } } public ResultSet select(String sql, Vector params) { ResultSet r = null; try { // System.out.println("SQL=" + sql); PreparedStatement pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); for (int i=0; i < params.size(); i++) { // System.out.println("arg " + (i + 1) + "=" + (String)params.elementAt(i)); pstmt.setString(i+1, (String)params.elementAt(i)); } r = pstmt.executeQuery(); } catch(SQLException s) { System.out.println("Select fejlede: "+s); } return r; } public void insertUpdate(String sql, Vector params) { try { PreparedStatement pstmt = conn.prepareStatement(sql); for (int i=0; i < params.size(); i++) { pstmt.setString(i+1, (String)params.elementAt(i)); } pstmt.executeUpdate(); } catch(SQLException s) { System.out.println("update/insert fejlede"); } } public void close() { try { conn.close(); } catch(SQLException s) { System.out.println("Close fejlede"); } } }
05. december 2004 - 11:49
#18
Jeg syntes efterhånden at jeg har prøvet alt. Jeg kan heller ikke hive p.id ud alene
05. december 2004 - 11:56
#19
Det bliver mere og mere spooky. Det er kun feltet id som giver problemer. Jeg har prøvet at tilføje et nyt felt og det virker bare
05. december 2004 - 13:55
#20
Ja - jeg forstår det heller ikke
05. december 2004 - 14:09
#21
Det er et meget dårligt tegn at du ikke forstår det :-)
05. december 2004 - 14:17
#22
Der er nok en god forklaring. Det plejer der jo ;) Hvad er typen af dit produktnavn? Og hvordan ser det ud, der hvor du henter tingene fra dit resultset?
05. december 2004 - 14:19
#23
Der er ingen god forklaring på det her
05. december 2004 - 14:20
#24
og hvis der er er jeg meget interesseret i at vide hvad den skulle være
05. december 2004 - 14:27
#25
<tr><td><%= rs.getString("under_produktnavn") %></td><td><%= rs.getString("test") %></td></tr>
05. december 2004 - 14:28
#26
test er så bare for at se om jeg kan hente noget andet end id ud
05. december 2004 - 14:29
#27
05. december 2004 - 14:33
#28
SELECT p.id, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id giver: java.sql.SQLException: General error, message from server: "Table 'bjorndb.p' doesn't exist" SELECT p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id virker Og der er ikke tabs eller andre non printable karakterer i den version som giver fejl ?
05. december 2004 - 14:33
#29
Har du prøvet: SELECT `p.id`, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id ?
05. december 2004 - 14:35
#30
det virker heller ikke
06. december 2004 - 17:40
#31
Jeg forstår det simpelhen ikke. Det vil bare ikke virke. Jeg kan ikke skrive ResultSet rs = d.select("select p.id, p.under_produktnavn from under_produktgruppe p, under_produktgruppe_produkt_rel pr where pr.under_produktgruppe_id = ? and pr.produkt_id = p.id", vi); men godt ResultSet rs = d.select("SELECT id,under_produktnavn from under_produktgruppe", vi);
06. december 2004 - 18:02
#32
der er 200 points til den person som kan løse mysteriet :-)
06. december 2004 - 19:40
#33
Jeg har fundet en løsning, ikke at jeg fatter hvorfor det virker. Når man laver et index på en tabel i MySQL kan man åbenbart lave et primært og et newindex. Jeg havde sat det til at være primært, men efter jeg satte det til newindex så virker det med auto increment og det hele
06. december 2004 - 19:40
#34
Lukker
06. december 2004 - 21:32
#35
Som jeg sagde, der er altid en løsning, hvis du blot vil give os de relevante oplysninger ;)
06. december 2004 - 22:10
#36
Det har jeg da også gjort. Kan du forklare mig hvad problemet var?
06. december 2004 - 22:13
#37
Du havde slet ikke fortalt alt, før du selv fandt din løsning. Så kan vi kun gætte. Men det er fint nok du fandt ud af det!
06. december 2004 - 22:15
#38
Det ville jeg sætte pris på. Jeg har intet ændret i min JAVA. Jeg har blot konstateret at jeg ikke kunne hente data fra id feltet hvis der var defineret et index i tabellen. Det er så en sandhed med modifikationer jeg kunne jo godt skrive select id from o.s.v men ikke select u.id from o.s.v. Hvordan skulle man kunne vide at man ikke må definerer indexet på en tabel som primary index, men skal definerer det som noget andet???? Det giver i min verden ingen mening
06. december 2004 - 22:16
#39
Hvad manglede du at vide?
06. december 2004 - 22:18
#40
Det som generer mig mest er at den løsning jeg har fundet virker, men jeg fatter ikke hvad forskellen skulle være fra det andet jeg havde lavet
06. december 2004 - 22:20
#41
Fx hvordan din tabel var konstrueret. Jeg bad om typen på det ene felt, og det ville du ikke svare på. I nogle tilfælde har det betydning. Men glem det, intet problem for mig. Slut herfra.
06. december 2004 - 22:21
#42
Jeg forstår det heller ikke. Normalt vil man antage at tilstedeværelsen af index påvirker performance af SELECT men ikke funktionaliteten af SELECT.
06. december 2004 - 22:21
#43
det er såmend bare en int
06. december 2004 - 22:25
#44
Der er et index på tabellen nu og det virker. Når jeg oprettet tabellen, iøvrigt med MySQL front så oprettet den automatisk et felt som hedder Id med et Primary Index på. Hvis jeg bare lader det index være det så virker det ikke, så det fjerner jeg, og opretter et nyt som jeg kalder noget andet. Det giver ingen mening at det skulle gøre en forskel, men det gør det altså
06. december 2004 - 22:29
#45
nogen gange kan man blot sige NÅ!!
06. december 2004 - 22:33
#46
Jeg er bare så glad for at det virker. Tak for hjælpen :-)
06. december 2004 - 22:37
#47
Tabellen er oprettet således for at det skal virke CREATE TABLE `under_produktgruppe` ( `id` int(6) unsigned NOT NULL auto_increment, `under_produktnavn` varchar(40) default NULL, KEY `NewIndex` (`id`) ) TYPE=InnoDB;
06. december 2004 - 22:46
#48
Det eneste jeg efterlyser er hvorfor det kun virker i det tilfælde
06. december 2004 - 22:49
#49
Og hvordan så den ud, når den ikke virkede ?
06. december 2004 - 22:50
#50
KEY `Primary Index` (`id`)
06. december 2004 - 22:57
#51
Hvad med den "normale" form: CREATE TABLE `under_produktgruppe` ( `id` int(6) unsigned NOT NULL auto_increment, `under_produktnavn` varchar(40) default NULL, PRIMARY KEY (`id`) ) TYPE=InnoDB; ?
06. december 2004 - 23:02
#52
aner det ikke :-)
Kurser inden for grundlæggende programmering