Avatar billede bodhisatva Nybegynder
26. april 2003 - 08:53 Der er 17 kommentarer og
1 løsning

MS SQL 2000 connection string

Jeg bruger disky's DbHandler, men har lidt problemer med at connecte til en extern Ms Sql2000 server.


<%@ page language="java" import="java.sql.* " %>
<jsp:useBean id="db" name="db" class="disky.DbHandler" scope="page"/>
<%
// åbner databasen
db.open("jdbc:microsoft:sqlserver://mssql.hostname.dk","DatabaseName=databasenavn","username","password");
   
    String sql = "select * from test";
    ResultSet rs = db.doQuery(sql);
   
    out.println(rs);

    if(rs != null){
    while(rs.next()){
    String txt = rs.getString("test");
    out.println(txt);
    }
   
    }
    else{
    out.println("der er ingen output");
    }
   
    %>


Når jeg prøver at udskrive mit ResultSet får jeg null tilbage.

What to do?
Avatar billede arne_v Ekspert
26. april 2003 - 08:57 #1
Den her:

db.open("jdbc:microsoft:sqlserver://mssql.hostname.dk",
"DatabaseName=databasenavn","username","password");

ser meget suspekt ud !

Jeg formoder at du skal kalde med 3 eller 4 argumenter:
  (driver navn)
  URL
  username
  password

Og ikke noget "databasename=databasename".
Avatar billede arne_v Ekspert
26. april 2003 - 09:03 #2
Ihvertfald er de JDBC kald der skal udføres:

class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://databasenavn", "brugernavn", "password");
Avatar billede bodhisatva Nybegynder
26. april 2003 - 09:07 #3
db.open("com.microsoft.jdbc.sqlserver.SQLServerDriver","jdbc:microsoft:sqlserver://mssql.hostname.dk","username","password");

virker på samme måde. Jeg får meddelelsen:
"null der er ingen output"
Avatar billede arne_v Ekspert
26. april 2003 - 09:08 #4
Hov det er ikke rigtigt:

class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://servernavn:1433;DatabaseName=databasenavn", "brugernavn", "password");

ser mere korrekt ud.
Avatar billede arne_v Ekspert
26. april 2003 - 09:09 #5
Sorry for den vildledende statement.
Avatar billede bodhisatva Nybegynder
26. april 2003 - 09:25 #6
Nåh, så kom vi så langt. Følgende viser nu mit script:

<%@ page language="java" import="java.sql.* disky.*" %>
<jsp:useBean id="db" name="db" class="disky.DbHandler" scope="page"/>
<%

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://mssql.host.dk:1433;DatabaseName=dbnavn","user","pass");
    String sql = "select * from test";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

    out.println(rs);

    if(rs != null){
    while(rs.next()){
    String txt = rs.getString("test");
    out.println(txt);
    }
   
    }
    else{
    out.println("der er ingen output");
    }
   
    %>

Men, nu melder Resin om en fejl:

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
    at com.caucho.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:530)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:140)
    at _functions._dbopen__jsp._jspService(/functions/dbopen.jsp:14)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
    at com.caucho.jsp.Page.subservice(Page.java:506)
    at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:344)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:536)
Avatar billede arne_v Ekspert
26. april 2003 - 09:36 #7
Du skal have jar-filen fra Microsoft anbragt i classpathen.

Der er flere muligheder:

* global classpath via environment variabel CLASSPATH

* serverens lib directory

* web applikationens lib directory
Avatar billede bodhisatva Nybegynder
26. april 2003 - 10:34 #8
Nåh, så langt så godt. Nu har jeg valideret at der rent faktisk er forbindelse, ved at sætte system dsn op på serveren og kalde databasen med følgende:

<%@ page language="java" import="java.sql.* disky.*" %>
<jsp:useBean id="db" name="db" class="disky.DbHandler" scope="page"/>
<%
db.open("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:db-navn","user","pass");
String sql = "select * from test";


ResultSet rs = db.doQuery(sql);

    out.println(rs);
    out.println("<br>" + db.open("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:db-navn","user","pass") + "<br>");
    if(rs != null){
    while(rs.next()){
    String txt = rs.getString("test");
    out.println(txt);
    }
   
    }
    else{
    out.println("der er ingen output");
    }
   
    %>

Det giver det korrekte resultat:
sun.jdbc.odbc.JdbcOdbcResultSet@425eb9
true
test1 test2 test3

Men, det var jo ikke meningen man skal sætte sys dsn op på serveren for at connecte.
Der må findes noget alá:

db.open("org.gjt.mm.mysql.Driver","jdbc:mysql:3306//host/auktion","user","pass");
som jeg bruger til mysql connections??
Avatar billede arne_v Ekspert
26. april 2003 - 10:40 #9
Ja.

Din første version bør virke så fremt du får anbragt den rigtige jar-fil
i classpath.

(Du har downloadet og installeret MS SQLServer 2000 JDBC driver
fra Microsoft ikke ?)
Avatar billede arne_v Ekspert
26. april 2003 - 10:41 #10
Og JDBC ODBC bridgen fra SUN sucks til high-volume ting.

Den er ikke thread-safe.

Man kan få mærkelige fejl under high load.
Avatar billede bodhisatva Nybegynder
26. april 2003 - 10:45 #11
Jo, jeg har hentet driveren, indstalleret den og fik ikke rigtig noget resultat ud af det.

Jeg prøvede derefter at kopiere mssqlserver.jar ind i resin/lib - men ikke noget resultat.
Avatar billede arne_v Ekspert
26. april 2003 - 10:47 #12
Genstartede du også Resin efter at have kopieret den ind i lib ?
Avatar billede bodhisatva Nybegynder
26. april 2003 - 10:51 #13
Ja, jeg genstartede faktisk også hele maskinen
Avatar billede arne_v Ekspert
26. april 2003 - 11:34 #14
Efter at have læst lidt mere på nettet, så kunne det måske være
interessant at putte msbase.jar og msutil.jar i resin lib også.
Avatar billede bodhisatva Nybegynder
26. april 2003 - 11:39 #15
Det gjorde jeg faktisk i samme håndevending :) - men lige meget har det hjulpet
Avatar billede arne_v Ekspert
26. april 2003 - 11:44 #16
Mystisk.

Jeg har lige prøvet med:

public class MsTest {
  public static void main(String[] args) throws Exception {
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
  }
}

C:\>java MsTest
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.jdbc.
sqlserver.SQLServerDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:120)
        at MsTest.main(MsTest.java:3)

C:\>java -classpath .;\MSSQL\jdbc\lib\mssqlserver.jar MsTest
Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/jdbc/base/BaseDriver
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:486)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:120)
        at MsTest.main(MsTest.java:3)

C:\>java -classpath .;\MSSQL\jdbc\lib\mssqlserver.jar;\MSSQL\jdbc\lib\msbase.jar MsTest

C:\>
Avatar billede arne_v Ekspert
26. april 2003 - 11:47 #17
Det skal kunne bringes til at virke.

Har du checket at dine jar-filer er OK med:
  jar tvf xxxxx.jar
?
Avatar billede bodhisatva Nybegynder
26. april 2003 - 13:18 #18
jeg har faktisk fundet en driver på www.atinav.com som ser ud til at virke. Sat den op i min CLASSPATH - og fået et svar tilbage om at den ikke kan finde min database på sql-serveren. Om det er fordi databasen indeholder - (bindestreg) er jeg ved at finde ud af.

Jeg har ikke kontrolleret mine .jar filer, men vil nu kigge nærmere på dem, og prøve CLASSPATH til dem også.
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