Avatar billede telep Nybegynder
28. september 2006 - 16:00 Der er 10 kommentarer og
2 løsninger

Forbinde til MS SQL Server

Hej,

Jeg er helt ny til JAVA, men programmerer til daglig i en række andre sprog.
Jeg skal lave et plugin til et eksisterende program. Jeg skal have forbindelse til en MS SQL Server.

Jeg bruger NetBeans IDE 5.0 som udviklingstool.
Jeg har hentet MS JDBC, men ved ikke helt hvordan det skal bruges/hvor det skal ligge/hvordan jeg inkluderer det

Jeg har følgende klasse som jeg har fundet her på siden:

/*
* datalayer.java
*
* Created on 27. september 2006, 14:39
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package dbapp;
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;

/**
*
* @author tm
*/
public class datalayer extends Object
{
   
    /** Creates a new instance of datalayer */
    public datalayer ()
    {
    }
   
      private Connection con=null;

    /** Creates new DataBase */
    public boolean open(String dbDriverName, String dbClassName, String user, String pass)
    {         
//        System.out.println("************************************************************************");
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
//                System.out.println("con = "+con);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return true;
    }
 
    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
    }
 
    public int doUpdate(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeUpdate(sql);     
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return 0;
    }

    public ResultSet doQuery(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeQuery(sql);     
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }
}
_________________________________________________________

Den klasse har jeg så extended med denne:

/*
* db.java
*
* Created on 27. september 2006, 14:56
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package dbapp;

/**
*
* @author tm
*/
public class db extends datalayer
{
   
    /** Creates a new instance of db */
    public db ()
    {
    }
   
    public boolean open()
    {
     
        return super.open("com.microsoft.sqlserver.jdbc","jdbc:sqlserver://dom02dk;databaseName=Autodial;integratedSecurity=true","sa","");
    }
}
____________________________________________________________

Det er sikkert her der er noget galt:
super.open("com.microsoft.sqlserver.jdbc","jdbc:sqlserver://dom02dk;databaseName=Autodial;integratedSecurity=true","sa","");

Jeg kalder hele molevitten fra en form:
        db tm = new db();
        tm.open ();
        ResultSet q1 = tm.doQuery ("SELECT UserEmail FROM tblUser WHERE ID=2");
        try
        {
            JOptionPane.showMessageDialog (null, jTextField1.getText (), q1.getString("UserEmail"), JOptionPane.INFORMATION_MESSAGE);
        }
        catch (SQLException sqlE)
        {
           
        }
________________________________________________________

Mit spørgsmål kan forsimples til at være:
hvordan opretter jeg forbindelse til en MS SQL Server og hiver data ud?

Mvh
Telep
Avatar billede arne_v Ekspert
28. september 2006 - 19:37 #1
koden ser rigtig ud

det er kun et spoergsmaal om driver of connection URL

driver er forskelligt for SQLServer 2000 og 2005, men den er i docs

ditto med connection string

connection string ser dog lidt mystisk ud - jeg har ihvertfald aldrig
brugt integrated security i Java

jeg kan godt finde nogle eksempler paa driver og connection string for baade
2000 og 2005
Avatar billede arne_v Ekspert
28. september 2006 - 19:39 #2
det her virker mod min 2000:

        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
        Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost;DatabaseName=Test", "sa", "");
Avatar billede arne_v Ekspert
28. september 2006 - 19:39 #3
hm - det driver navn du bruger ser ogsaa forkert ud - mangler der ikke klasse navnet ?
Avatar billede telep Nybegynder
29. september 2006 - 08:53 #4
Jeg har rettet til så jeg bruger hvad der står i det 2. post.

Jeg får følgende fejl når jeg kører det:
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:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at dbapp.datalayer.open(datalayer.java:36)
        at dbapp.db.open(db.java:27)
        at dbapp.window.jButton1MouseClicked(window.java:64)
        at dbapp.window.access$100(window.java:16)
        at dbapp.window$2.mouseClicked(window.java:52)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
        at java.awt.Component.processMouseEvent(Component.java:5491)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at dbapp.window.jButton1MouseClicked(window.java:68)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at dbapp.window.access$100(window.java:16)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at dbapp.window$2.mouseClicked(window.java:52)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.Component.processMouseEvent(Component.java:5491)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Avatar billede arne_v Ekspert
30. september 2006 - 01:24 #5
er det JDBC driveren til SQLServer 2000 du har ?

og er den i classpath ?
Avatar billede arne_v Ekspert
30. september 2006 - 01:25 #6
i 2005 heder driveren:

com.microsoft.sqlserver.jdbc.SQLServerDriver
Avatar billede telep Nybegynder
30. september 2006 - 15:44 #7
jeg har en sql server 2000...
Avatar billede arne_v Ekspert
30. september 2006 - 17:01 #8
og har du de 3 jar filer med 2000 JDBC driveren i classpath ?
Avatar billede telep Nybegynder
02. oktober 2006 - 09:16 #9
Kan du forklare mig hvordan jeg gør det?
Avatar billede telep Nybegynder
02. oktober 2006 - 09:33 #10
hvis det er til nogen hjælpe har jeg lige pakket hele projekt. Det kan hentes her:
http://www.oyan.dk/diverse/dbApp.rar
Avatar billede telep Nybegynder
10. oktober 2006 - 13:03 #11
det kom til at spille in the end - med lidt modifying :-)

Læg et svar så er der lidt point
Avatar billede arne_v Ekspert
10. oktober 2006 - 13:14 #12
ok
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