Avatar billede rbl Praktikant
14. december 2001 - 01:34 Der er 46 kommentarer og
2 løsninger

Forbindelse til database

Jeg skal lave en forbindelse til en MSSQL database. Hvordan gør man det ?

Derudover skal jeg selvfølgelig også sende sql-statements til databasen og hente/gemme data i databasen.

Jeg har set at Disky er kommet med en klasse til formålet, men den er for stor og uoverskuelig til det, jeg skal bruge det til. Jeg vil gerne have det så simpelt som muligt.
Avatar billede logical Nybegynder
14. december 2001 - 07:19 #1
7 trin:
1 Load en driver:
Class.forName(\"org.gjt.mm.mysql.Driver\");

2 Skab forbindelse til DB:
Connection c = DriverManager.getConnection(\"jdbc:mysql://host/db\", \"username\", \"passwd\");

3 create en statement
Statement st = c.createStatement();

4 Udføre en SQL sætning
ResultSet rs = st.executeQuery(\"SELECT * FROM EMP\");

5 Iterere over eksemplet
while(rs.next())

6 bruge værdierne
String name = rs.getString(\"ENAME\");

7 lukke, når du er færdig
rs.close(); st.close(); c.close();
Avatar billede tmceu Praktikant
14. december 2001 - 07:29 #2
Kig på disky\'s fremragende svar her: http://www.eksperten.dk/spm/143278

Driveren skal udskiftes med din egen. Ved ikke hvilken version af SQL Server du anvender, men du kan finde en JDBC driver til SQL Server 2000 her
http://www.microsoft.com/sql/downloads/2000/jdbc.asp
Avatar billede disky Nybegynder
14. december 2001 - 09:33 #3
rbl:

Stor og uoverskuelig ???

Den er netop lavet til at være simpel og let forståelig og genbrugelig.

Det logical har foreslået er nøjagtigt det samme med den undtagelse af at han åbner og lukker en forbindelse til basen hver gang der skal laves en request.
Avatar billede logical Nybegynder
14. december 2001 - 10:26 #4
Yep, men han viser også hvad der skal til, ikke hvordan det er mest praktisk :-)
Avatar billede disky Nybegynder
14. december 2001 - 10:30 #5
rofl
Avatar billede tmceu Praktikant
14. december 2001 - 11:06 #6
Man skal jo som bekendt kravle før man kan gå.

Du behøver ikke nødvendigvis forstå hvad der foregår inde i disky\'s klasse, for at anvende den, hvis du blot koncentrer dig om metoderne (interfacet).

Lad som om at disky\'s klasse er en hvilken som helst anden klasse du ikke source code til, så bliver forvirringen sikkert mindre.
Avatar billede rbl Praktikant
14. december 2001 - 18:39 #7
Ok, det kan godt være at \"stor og uoverskuelig\" var et forkert udtryk. Det jeg mener er, at jeg gerne vil lære de grundlæggende trin man skal igennem for at bruge en database. Derefter laver jeg så selv en klasse, der er skræddersyet til det, jeg skal bruge den til.

Jo, det er MSSQL 2000 jeg bruger, og jeg har lige downloaded og installeret driverne.

Hvis vi går ud fra logical\'s 7-trins model, hvad skal jeg så præcist skrive i trin 1 og 2 ?

SQLversion: 2000
Servernavn: minServer
databasenavn: KundeDB
user: user1
pass: 1234
Avatar billede rbl Praktikant
14. december 2001 - 18:41 #8
Lige en ting mere: Er der noget der hedder rs.prev() ?  Jeg vil nemlig gerne kunne gå både frem og tilbage.
Avatar billede logical Nybegynder
14. december 2001 - 20:32 #9
1)
Class.forName(\"com.microsoft.jdbc.sqlserver.SQLServerDriver\");
2)
Connection con = DriverManager.getConnection
(\"jdbc:microsoft:sqlserver://minServer:1433;DatabaseName=KundeDB\",\"user1\", \"1234\");

Hvis du loader den driver, som tmceu angav ovenfor.

Og den driver, som tmceu angav er JDBC2.0 compliant, og så skulle der også være en previous() ligesom next().
Avatar billede rbl Praktikant
14. december 2001 - 22:31 #10
Den kommer med en ClassNotFoundException i første punkt.
Avatar billede logical Nybegynder
14. december 2001 - 22:35 #11
Så er din driver ikke installeret ordentligt.

Du skal sikre dig, at den jar fil, som formodentlig er blevet installeret fra ovenstående pakke er inkluderet i din classpath.

Indtil du kan finde klassen, kan du eventuelt rette din sourcekode til:
was)
Class.forName(\"com.microsoft.jdbc.sqlserver.SQLServerDriver\");
now)
new com.microsoft.jdbc.sqlserver.SQLServerDriver();

Når det kan compileres har du fået din driver på plads.
Avatar billede rbl Praktikant
14. december 2001 - 22:40 #12
hvordan får jeg den includeret i classpath ?
Avatar billede logical Nybegynder
14. december 2001 - 22:53 #13
javac -classpath %CLASSPATH%;C:\\sti\\til\\driver.jar Test.java

java -classpath %CLASSPATH%;C:\\sti\\til\\driver.jar Test

Det afhænger af dit udviklings- og afviklingsmiljø. Ovenstående er til kommandolinien. Hvis du vil undgå at skrive så meget hvergang, så brug følgende kommando:
SET CLASSPATH=%CLASSPATH%;C:\\sti\\til\\driver.jar
Avatar billede rbl Praktikant
14. december 2001 - 23:10 #14
mystisk, nu kommer compileren med en fejl:
Exception in thread \"main\" java.lang.NoClassDefFoundError: Test

Det jeg skrev var:
SET CLASSPATH=%CLASSPATH%;C:\\Program Files\\Microsoft SQL Server 20
00 JDBC\\lib\\mssqlserver.jar

Er det ikke den rigtige jar-fil ?
Avatar billede logical Nybegynder
14. december 2001 - 23:13 #15
Jo sikkert, det lyder sådan men jeg aner det ikke, da jeg aldrig har brugt en SQLServer JDBC driver.

Men fejlen skyldes klassen Test. Test.java var i mit eksempel et pseudo navn på det program, som du var igang med. Hvis du nu brugte dit eget program, kunne det være det virkede.
Avatar billede rbl Praktikant
14. december 2001 - 23:15 #16
det er tilfældigt at dit pseudo navn er det samme, som det jeg bruger. Min klasse HEDDER Test.java
Avatar billede logical Nybegynder
14. december 2001 - 23:24 #17
Så tilføj lige . i din CLASSPATH:
SET CLASSPATH=.;%CLASSPATH%

Hvorfor hedder de altid Test :-)
Avatar billede rbl Praktikant
14. december 2001 - 23:59 #18
ENDELIG VIRKER DET !!!!!! Jippiiiiii.....

Tak for hjælpen :-)

Lige en ting til:
Ved du om det gøres på samme måde i JSP ?

Og hvor dælen skal man skrive så meget for at få det til at virke ? (retorisk spørgsmål :-))
Avatar billede 2cool Nybegynder
15. december 2001 - 00:13 #19
Det virker 100% på samme måde i JSP - du kan bare ikke iterere tilbage med rs.previous() i en JSP fil!!

Men lige en ting - det er pænere at ligge alt funktionalitet i din class fil, og IKKE i JSP filen som jeg ligesom kan høre på det hele at du vil gøre!!
Avatar billede rbl Praktikant
15. december 2001 - 00:17 #20
skal denne klasse så bare ligge i samme bibliotek eller hvad ?
Avatar billede 2cool Nybegynder
15. december 2001 - 00:22 #21
nej - den skal ligge i WEB-INF/classes

Når du skal bruge den skal du skrive f.eks.

<%
Kunde k = new Kunde();
k.setNavn(\"Anders And\")
out.println(k.getNavn());
%>
Avatar billede 2cool Nybegynder
15. december 2001 - 00:23 #22
Jeg har brugt Kunde - det skal selvfølgelig være navnet på den class du vil skabe en instans af!
Avatar billede rbl Praktikant
15. december 2001 - 00:32 #23
ok, hvor er WEB-INF/classes ?
Avatar billede 2cool Nybegynder
15. december 2001 - 00:35 #24
Hvilken JSP server kører du?
Avatar billede rbl Praktikant
15. december 2001 - 00:44 #25
Tomcat 4.xx
Avatar billede 2cool Nybegynder
15. december 2001 - 01:00 #26
arrrggg, den er jeg ikke så vild med men ok!!

Jeg mener det ligger ca. her!
C:\\Program Files\\Apache Tomcat 4.0\\webapps\\ROOT\\WEB-INF

og der skal du så selv lave mappen classes

Men noget siger mig de også kan ligge her:
C:\\Program Files\\Apache Tomcat 4.0\\server\\classes
C:\\Program Files\\Apache Tomcat 4.0\\common\\classes

Prøv dig frem med de tre steder, jeg bruger ikke Tomcat, men Resin
Avatar billede rbl Praktikant
15. december 2001 - 01:15 #27
ok, tak :-)

Jeg får en fejl med rs.previous() (det er ikke JSP, jeg roder med)

Compileren klager ikke, det er først når funktionen bliver kaldt.
Avatar billede 2cool Nybegynder
15. december 2001 - 01:20 #28
Så er der vel ikke en previous :)

Har du en if omkring som her?

if (rs.previous()) {
 
}
Avatar billede rbl Praktikant
15. december 2001 - 01:23 #29
ja, jeg bruger if (rs.previous()).

Fejlmeddelelse:
Unsupported method: ResultSet.previous
Avatar billede 2cool Nybegynder
15. december 2001 - 01:24 #30
husker du ()

??
Avatar billede 2cool Nybegynder
15. december 2001 - 01:26 #31
Det tyder fejler nemlig på!! Men jeg har også selv haft problemer med resultset! :(

Derfor brugte jeg det at hente mit resultset over i en ArrayList hver gang, men det er måske ikke så kønt, jeg ved ikke så meget om Java!!
Avatar billede rbl Praktikant
15. december 2001 - 01:31 #32
jo, jeg har ()

Jeg har også selv tænkt på at bruge en List af en art, men det ser ikke kønt ud.
Avatar billede 2cool Nybegynder
15. december 2001 - 01:33 #33
Nej, jeg ved det - men bruger man en liste har man flere muligheder, og SKAL man bruge de muligheder er det vel egentlig ligegyldigt om det ser pænt ud! Eller?
Avatar billede rbl Praktikant
15. december 2001 - 01:37 #34
naah, det er en afleverings-opgave til skolen, så det skulle jo gerne se pænt ud.

Det er egentlig mærkelig at compileren ikke klager over det, men når programmet kører, findes metoden ikke !!
Avatar billede 2cool Nybegynder
15. december 2001 - 01:39 #35
Det er ikke en aflevering til på mandag på AABC vel?
Avatar billede rbl Praktikant
15. december 2001 - 01:48 #36
jooo, det ville jeg da mene :-)
Avatar billede 2cool Nybegynder
15. december 2001 - 01:51 #37
hmm - så er den 50% chanche for at vi går på samme hold!! Har du Erik eller Michael?
Avatar billede rbl Praktikant
15. december 2001 - 01:52 #38
erik og du ?
Avatar billede 2cool Nybegynder
15. december 2001 - 01:52 #39
erik!
Avatar billede rbl Praktikant
15. december 2001 - 01:53 #40
hmm...
Avatar billede rbl Praktikant
15. december 2001 - 01:54 #41
hvilken klasse går du i ?
Avatar billede 2cool Nybegynder
15. december 2001 - 01:54 #42
:) Jeg hedder Brian - and U?
Avatar billede rbl Praktikant
15. december 2001 - 01:55 #43
Rasmus, 00D
Avatar billede 2cool Nybegynder
15. december 2001 - 01:56 #44
Hmm, jeg er en skovl til at huske navne desværre!! Ved kun hvem Bo, Anders, Claus og Rikke er! Jeg har jo heller ikke haft så mange timer med Jer :)
Avatar billede 2cool Nybegynder
15. december 2001 - 01:57 #45
Men ehh, held og lykke med opgaven Rasmus - jeg skal til at skrive resten af dokumentationen nu - mangler stadig omkring 20 sider!! Sur røv!
Avatar billede rbl Praktikant
15. december 2001 - 01:58 #46
Jeg har nu heller ikke været der så meget.
Avatar billede rbl Praktikant
15. december 2001 - 02:02 #47
Jeg skal skrive hele dokumentationen på søndag :-(

Jeg mangler stadig at gøre opgave 3 og 4 færdig. Nå, men held og lykke til også !
Avatar billede 2cool Nybegynder
15. december 2001 - 02:02 #48
Thanks
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