hjälp Postad 26 juli, 2004 Share Postad 26 juli, 2004 Hej! Jag har följande SQL-fråga: String query = "select Sid from Student, Kurs, Godkaend where Kurs.Kid = Godkaend.Kid " + "AND Student.Sid = Godkaend.Sid AND Student.Sid =" + tal; I början står det "select Sid from Student, Kurs... Problemet här är, att Kolumnen Sid finns i olika tabeller. För att urskilja vilket Sid jag menar försökte jag med Student.Sid som jag gör senare. Detta fungerar i Where-biten, men inte i början. Vad kan vara fel? Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Det känns kanske mer som en SQL-fråga än en java-fråga men ungefär så här borde det bli: SELECT s.sid, k.sid, g.sid FROM Stundent AS s, Kurs AS k, Godkaend AS g WHERE k.kid = g.kid AND s.sid = g.sid AND s.sid = <tal> http://dev.mysql.com/doc/mysql/en/SELECT.html beskriver de vanligaste användningarna av SELECT, även om några av dem kan behöva modifieras om man kör andra databaser. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Hej! Tack för hjälpen, dock fungerar det inte riktigt. Anledningen till att jag postade det här och inte i SQL var att jag trodde att det var en javaspecifik fråga. Använder Access och det är kanske det som är problemet. SELECT s.sid, k.sid, g.sid FROM Stundent AS s, Kurs AS k, Godkaend AS g WHERE k.kid = g.kid AND s.sid = g.sid AND s.sid = <tal> Ovanstående fungerade inte men: SELECT K.* FROM Stundent AS s, Kurs AS k, Godkaend AS g WHERE k.kid = g.kid AND s.sid = g.sid AND s.sid = <tal> fungerar bra. Problemet är att jag vill inte ha alla kolumner i Kurs, utan bara vissa. Försökte då med K.Kid och K.Namn. men då hittas inte kolumnerna. Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Ovanstående fungerade inte Det är inte speciellt lätt att hjälpa dig om du inte berättar vad som inte fungerar, vad händer? får du något fel och isf vilket? Jag har inte Access installerat men senast jag körde det gick det har jag för mig att det gick bra att göra frågor med det grafisk gränssnittet och se vilken SQL som behövs för att köra frågan utanför det grafiska gränssnittet. Det kanske kan vara värt att testa? Problemet är att jag vill inte ha alla kolumner i Kurs, utan bara vissa. Försökte då med K.Kid och K.Namn. men då hittas inte kolumnerna. Om du klistrar in hur de berörda tabellerna ser ut och vad du får för fel så kan du nog få rätt bra hjälp (och kanske kan moderatorn flytta tråden?). Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Mina tabeller är Student som har Kolumnerna Sid (Primärnyckel) och Namn. Kopplingstabellen Godkaend som har Kolumnerna Sid (sekundärnyckel), Kid(sekundärnyckel) Moment, datum och resultat. Kurs har Kolumnerna Kid (Primärnyckel) och Namn. String query = "select K.* "+ "from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " + "AND S.Sid = G.Sid AND S.Sid =" + tal; String query2 = "select S.* "+ "from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " + "AND S.Sid = G.Sid AND K.Kid =" + tal; Så här ser min frågor ut då de fungerar. Om jag byter ut Select K.* t.ex. till Select K.Kid, K.Namn fungerar det inte. Jag får felmeddelandet att kolumnen inte finns. Anledningen till att jag inte postade det i SQL är att detta borde fungera, åtminstone fungerade det med SQL server. Och eftersom tabellerna känns igen senare t.ex. S.Sid = G.Sid, förstår jag inte varför det första inte fungerar. Hoppas det hjälper. Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Om access säger att kolumnen inte finns så finns den nog inte, det låter som om du har stavat fel alternativt använt ett fältnamn som är ett reserverat ord. Om nu inte Access har någon variant på kommandot describe som du kan använda för att ge oss en komplett tabellbeskrivning och du inte kan klistra in ett exakt felmeddelandet så blir det rätt omöjligt att ge dig förslag utan att vara just access-guru, det är jag inte. Om frågorna fungerar när du skriver k.* men inte då du skriver k.namn så tycker jag du kan fortsätta med det, använder du access antar jag att applikationen är så liten att det lilla extra datat inte spelar någon roll. Anledningen till att jag inte postade det i SQL Jo, du skrev det ovan. Det var därför jag föreslog att mdoeratorn skulle flytta inlägget i fråga (det var alltså inte en uppmaning till dig). Länk till kommentar Dela på andra webbplatser More sharing options...
-OZn- Postad 27 juli, 2004 Share Postad 27 juli, 2004 Tråden flyttas till Databaser & SQL /OZn - Moderator för Java _______________________________________________________ Microchips - De små potatisflingorna du äter allra sist i chipspåsen Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Jo, det är bara en skoluppgift på Högskolan. Får väl acceptera det och klura vidare. Tack för all hjälp. P.S. Här är felmeddelandet. java.sql.SQLException: [Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades. at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) at Databashanterare.selectSomeFromExempel(Databashanterare.java:156) at HuvudFrame.actionPerformed(HuvudFrame.java:372) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245) at java.awt.Component.processMouseEvent(Component.java:5100) at java.awt.Component.processEvent(Component.java:4897) at java.awt.Container.processEvent(Container.java:1569) at java.awt.Component.dispatchEventImpl(Component.java:3615) at java.awt.Container.dispatchEventImpl(Container.java:1627) at java.awt.Component.dispatchEvent(Component.java:3477) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128) at java.awt.Container.dispatchEventImpl(Container.java:1613) at java.awt.Window.dispatchEventImpl(Window.java:1606) at java.awt.Component.dispatchEvent(Component.java:3477) at java.awt.EventQueue.dispatchEvent(EventQueue.java:456) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137) at java.awt.EventDispatchThread.run(EventDispatchThread.java:100 Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 och din SQL-sats ser ut hur då när du skickar in den i executeQuery()? (alltså, skriv ut den, när den är färdigihopsatt, precis som den ser ut när du skickar in den, förslagsvis med en System.out.println(query) eller motsvarande). Om jag skickar in exakt nedanstående i en databas som ser ut precis som din så får jag ut ett resultat med tre kolumner (sid, kid, och sid): [color="#0000ff"]SELECT[/color] s.sid, k.kid, g.sid [color="#0000ff"]FROM[/color] Student AS s, Kurs AS k, Godkaend AS g [color="#0000ff"]WHERE[/color] k.kid = g.kid [color="#0000ff"]AND[/color] s.sid = g.sid [color="#0000ff"]AND[/color] s.sid =1 Min gissning är att du inte har fått med siffran på slutet av någon anledning, men som sagt. Det går ju inte att sia om utan att få se din SQL-sats i sin helhet. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Hej fhe. Nej det var inte min SQl-sats. Min var bl.a.: String query = "select K.sid, K.Namn"+ "from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " + "AND S.Sid = G.Sid AND G.Moment = 'Tentamen' AND S.Sid ="+tal; Och då borde jag fått ut två kolumner, men jag får bara felmeddelande. Länk till kommentar Dela på andra webbplatser More sharing options...
-OZn- Postad 27 juli, 2004 Share Postad 27 juli, 2004 Om du får samma felmeddelande som du nyss postade så har det med SQL-satsen att göra och ett fel som jag ser (om den ser ut exakt som du postat den) är att du glömt ett mellanslag mellan K.Namn och " String query = "select K.sid, K.Namn "+ "from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " + "AND S.Sid = G.Sid AND G.Moment = 'Tentamen' AND S.Sid ="+tal; Den du postade kommer bli K.Namnfrom stället för K.Namn from /OZn _______________________________________________________ Microchips - De små potatisflingorna du äter allra sist i chipspåsen Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Min var bl.a.: String query = "select K.sid, K.Namn"+ "from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " Det där är ingen SQL-sats, det är javakod. Det jag bad dig posta var SQL-satsen som den ser ut när du skickar in den till executeQuery, det blir lättare att se sådana fel som OZn påpekar nedan då. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Ändrade det och då får jag: java.sql.SQLException: Column not found at sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(JdbcOdbcResultSet.java:1852) at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:413) at Databashanterare.selectSomeFromExempel(Databashanterare.java:180) at HuvudFrame.actionPerformed(HuvudFrame.java:385) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245) at java.awt.Component.processMouseEvent(Component.java:5100) at java.awt.Component.processEvent(Component.java:4897) at java.awt.Container.processEvent(Container.java:1569) at java.awt.Component.dispatchEventImpl(Component.java:3615) at java.awt.Container.dispatchEventImpl(Container.java:1627) at java.awt.Component.dispatchEvent(Component.java:3477) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128) at java.awt.Container.dispatchEventImpl(Container.java:1613) at java.awt.Window.dispatchEventImpl(Window.java:1606) at java.awt.Component.dispatchEvent(Component.java:3477) at java.awt.EventQueue.dispatchEvent(EventQueue.java:456) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137) at java.awt.EventDispatchThread.run(EventDispatchThread.java:100) Länk till kommentar Dela på andra webbplatser More sharing options...
Anjuna Moon Postad 27 juli, 2004 Share Postad 27 juli, 2004 Kan Access SQL vara Case-sensitive möjligen? Tror inte det...men testa att kolla det. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Select K.Kid, K.Namn from Student AS S, Kurs AS K, Godkaend AS G Where K.Kid = G.Kid AND S.SID = G.Sid AND K.Kid = 5 (t.ex.) Är det så här du menar, annars förstår jag inte hur jag ska göra. Så här blir det om man kör println: select K.Kid from Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid AND S.Sid = G.Sid AND S.Sid =1 [inlägget ändrat 2004-07-27 22:11:55 av Net] Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Select K.Kid, K.Namn from Student AS S, Kurs AS K, Godkaend AS G Where K.Kid = G.Kid AND S.SID = G.Sid AND K.Kid = 5 Om det där inte fungerar och tabellerna ser ut som du säger så kan det bara bero på att databasen i fråga (i det här fallet MySQL) är case-känslig på tabellnamn (eller fältnamn) för det där är rätt. Ingen här kan gissa hur dina tabeller ser ut (med stora och små bokstäver) så det är svårt att säga. Mitt förslag är fortfarande att du använder access för att se vad den genererar för SQL för motsvarande operation, det borde kunna ge dig en ledtråd. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 27 juli, 2004 Trådskapare Share Postad 27 juli, 2004 Jag har kollat med stora och små bokstäver, då jag också trodde detta, men det fungerar inte ändå. Det är förövrigt just Access som jag arbetar mot. Mina tabeller innhåller de kolumner jag skrev med stor begynnelsebokstav och små för övrigt. D.v.s. Kurs: Kid (primärnyckel) Namn(namn på kurs) Litteratur Student: Sid(primärnyckel) Namn Godkaend: (kopplingstabell) Sid Kid Moment (t.ex. tentamen) Datum Resultat Ska kanske testa att köra SQL direkt i Access. Men skumt är det... [inlägget ändrat 2004-07-27 22:44:59 av Net] Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 27 juli, 2004 Share Postad 27 juli, 2004 Det är förövrigt just Access som jag arbetar mot. ... Ska kanske testa att köra SQL direkt i Access. Jo, det var det jag menade... Att du jobbar mot Access-databaser har ju varit ett faktum hela tiden. Att testa innefrån Access borde vara det första man testar. Länk till kommentar Dela på andra webbplatser More sharing options...
Robbac1 Postad 28 juli, 2004 Share Postad 28 juli, 2004 Tror mig se vad felet är i frågan SELECT s.sid, k.kid, g.sid FROM Student AS s, Kurs AS k, Godkaend AS g WHERE k.kid = g.kid AND s.sid = g.sid AND s.sid =1 Frågan i sig är helt korrekt, men det du får tillbaka i ditt recordset är två stycken kolumner som heter "sid" (s.sid och g.sid). Prova med att ändar till följande: SELECT s.sid as ssid, k.kid , g.sid as gsid FROM Student AS s, Kurs AS k, Godkaend AS g WHERE k.kid = g.kid AND s.sid = g.sid AND s.sid =1 Lycka till, ____Robbac_____________________________________ The Truth Is Out there Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 28 juli, 2004 Share Postad 28 juli, 2004 men det du får tillbaka i ditt recordset är två stycken kolumner som heter "sid" Klarar inte access att hantera det? Länk till kommentar Dela på andra webbplatser More sharing options...
Robbac1 Postad 28 juli, 2004 Share Postad 28 juli, 2004 Jo Access borde klara det utan problem. Problemet är hos den som hanterar recordsetet, översätter frågan till den databashanterare som skall ha frågan. Om frågan går igenom utan problem, kan det i sin tur vara mottagande språk som inte klarar av att hantera det. Om du tex får två kolumner med samma namn i ett recordset i ASP får du ett felmeddelande först när du försöker accessa någon av kolumnerna med samma namn. Jag säger inte att det här som är problemet, eftersom jag inte har någon möjlighet att testa det. Men jag känner igen problematiken, och vad jag har gjort för att komma runt det. ____Robbac_____________________________________ The Truth Is Out there Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 28 juli, 2004 Share Postad 28 juli, 2004 Oavsett vilket är det ett gott råd, det blir lätt förvirrande att jobba med resultat där man har flera fält som heter samma sak om det går. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 29 juli, 2004 Trådskapare Share Postad 29 juli, 2004 Nej, tyvärr verkade det inte funka med att döpa om kolumnerna. Jag förstår att det är svårt utan alla fakta, men jag postar gärna javafiler och databas om någon vill försöka lösa det. Länk till kommentar Dela på andra webbplatser More sharing options...
hjälp Postad 30 juli, 2004 Trådskapare Share Postad 30 juli, 2004 Hej! Jag har efter mycket mailande till Suns jdbc forum löst det. http://forum.java.sun.com/thread.jsp?forum=48&thread=542263&start=30&range=15&hilite=false&q= Min SQL-fråga såg ut så här ungefär: String query = "SELECT K.Kid, K.Namn "+ "FROM Student AS S, Kurs AS K, Godkaend AS G where K.Kid = G.Kid " + "AND S.Sid = G.Sid AND G.Moment = 'Tentamen' AND S.Sid ="+tal; Sedan försökte jag spara värdet för "Litteratur" i en vektor, fast jag hämtar ju aldrig det värdet. Löste det genom att kommatera bort "Litteratur"; (tabell.equals("Kurs")) { Vector rowVector = new Vector(); rowVector.add(new Integer(rs.getInt("Kid"))); rowVector.add(rs.getString("Namn")); //rowVector.add(rs.getString("Litteratur")); dataVector.add(rowVector); } Länk till kommentar Dela på andra webbplatser More sharing options...
fhe Postad 30 juli, 2004 Share Postad 30 juli, 2004 Intressant att du så sent som igår skrev: The same with: String query = "SELECT Kurs.Kid , Kurs.Namn"+ "FROM (Kurs INNER JOIN Godkaend ON Kurs.Kid = Godkaend.Kid) "+ "INNER JOIN Student ON Student.Sid = Godkaend.Sid "+ "WHERE Godkaend.Moment = 'Tentamen' AND Student.Sid =" + tal; Doesn't work, but but if I choose all (K.*) it does. på Suns forum, trots att det långt tidigare i den här tråden fanns en förklaring på varför det inte skulle fungera (eftrersom du saknar mellanslag mellan "Kurs.Namn" och "FROM". Sedan försökte jag spara värdet för "Litteratur" i en vektor, fast jag hämtar ju aldrig det värdet. Löste det genom att kommatera bort "Litteratur"; Det har du ju aldrig nämnt här så det var ju inte så konstigt att ingen hjälpte dig med. Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.