JDBC ODBC práce s databází – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JDBC ODBC práce s databází – Java – Fórum – Programujte.comJDBC ODBC práce s databází – Java – Fórum – Programujte.com

 

3. 6. 2013   #1
-
0
-

Dobrý den, 

chtěl bych se zeptat, jestli by byl někdo ochotný a napsal hlavičku k připojení programu na databázi. Nejlépe MS Access, dělal jsem to podle knížky Java bez předchozích znalostí a nepodařilo se mi. Pořád to píše jako něco, že soubor nebyl nalezen.

Radek

Nahlásit jako SPAM
IP: 86.63.210.–
liborb
~ Redaktor
+18
Guru
3. 6. 2013   #2
-
0
-

Tak jsem dej ten svůj zdroják, na kterém si to zkoušel a chybový výpis, třeba je to jenom drobnost :).

Nahlásit jako SPAM
IP: 188.75.135.–
3. 6. 2013   #3
-
0
-

   

package databaz;

import java.sql.*;
import javax.sql.*;

public class db01 {
String url="jdbc:odbc:Studenti";
String IDuzivatele="admin";
String heslo = "test";
String jmeno;
String prijmeni;
Statement pozadavek;
ResultSet vysledky;
Connection dB;

try {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  dB = DriverManager.getConnection(url,IDuzivatele,heslo);
  } catch (ClassNotFoundException v1) {
    System.err.println("Nepodařilo se zavést most JDBC/ODBC."+v1.getMessage());
    System.exit(1);
  } catch (SQLException v2) {
	System.err.println("Nepodařilo se připojit k databázi. "+v2.getMessage());
	System.exit(2);
  } try {
	String dotaz = "SELECT * FROM Studenti WHERE IDStudenta = '1234'";
	pozadavek = dB.createStatement();
	vysledky = pozadavek.executeQuery(dotaz);
  } catch (SQLException v3) {
    System.err.println("Chyba SQL. "+v3.getMessage());
    System.exit(3);
  } 
    boolean zaznamy=vysledky.next();
    if (!zaznamy) {
      System.out.println("Nebyla vracena žádná data");
      System.exit(4);
    } try {
    do {
      jmeno=vysledky.getString(1);
      prijmeni=vysledky.getString(2);
      System.out.println(jmeno+" "+prijmeni);
    } while (vysledky.next());
    pozadavek.close();
    } catch (SQLException v4) {
      System.err.println("Chyba při zobrazení dat. "v4.getMessage());
      System.exit(5);
    } finally {
	vysledky.close();
    dB.close();
  }
}

Databáze i tabulka se jmenuje Studenti.

Nahlásit jako SPAM
IP: 86.63.210.–
liborb
~ Redaktor
+18
Guru
3. 6. 2013   #4
-
0
-

A ta chyba?

Nahlásit jako SPAM
IP: 188.75.135.–
3. 6. 2013   #5
-
0
-

java.sql.SQLException: [Microsoft][Ovladač ODBC pro Microsoft Access] Nelze nalézt soubor (neznámý).
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DB.database.main(database.java:14)

Nahlásit jako SPAM
IP: 86.63.210.–
4. 6. 2013   #6
-
0
-

tak jsem to nějak upravil 

kód: 

package DB;

import java.sql.*;

public class db01 
{
  String url="jdbc:odbc:DB02";
  String jmeno;
  String prijmeni;
  Connection dB;
  Statement pozadavek;
  String dotaz;
  ResultSet vysledky;
  
  public db01() {
  connect();
  }
  
  public void connect() {
  
  try
  {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    dB = DriverManager.getConnection(url);
	dotaz = "SELECT * FROM Studenti WHERE ID = '2'";
	pozadavek = dB.createStatement();
	vysledky = pozadavek.executeQuery(dotaz);

  boolean zaznamy = vysledky.next();
  if (!zaznamy)
  {
    System.out.println("Nebyla vracena žádná data");
    System.exit(1);
  } 
  } catch (ClassNotFoundException v1)
  {
    System.err.println("Nepodařilo se zavést most JDBC/ODBC."+v1.getMessage());
    System.exit(1);
  } catch (SQLException v2)
    {
	    System.err.println("Nepodařilo se připojit k databázi. "+v2.getMessage());
	    System.exit(2);
    } 
  try
  {
    do
    {
      jmeno=vysledky.getString(1);
      prijmeni=vysledky.getString(2);
      System.out.println(jmeno+" "+prijmeni);
    }
    while (vysledky.next());
  pozadavek.close();
  vysledky.close();
  dB.close();  
  } catch (SQLException v3)
    {
      System.err.println("Chyba při zobrazení dat. "+v3.getMessage());
      System.exit(3);
    }
}
  public static void main(String[] args) {
	  db01 a01 = new db01();
	  a01.connect();
}}

a CHYBA: 

Nepodařilo se připojit k databázi. [Microsoft][Ovladač ODBC pro Microsoft Access] Nesoulad datových typů ve výrazu.
Nahlásit jako SPAM
IP: 86.63.210.–
liborb
~ Redaktor
+18
Guru
4. 6. 2013   #7
-
0
-

ID bude asi celé číslo, tak to zkus bez apostrofů:


SELECT * FROM Studenti WHERE ID=2
Nahlásit jako SPAM
IP: 188.75.135.–
4. 6. 2013   #8
-
0
-

Díky    

už to funguje, jen nevím jak použít block finale. Píše mi to, že musím to mít v try catch. Nevíte někdo jak tomu zabránít, v případě toho posledního catch mě štve, že vždycky hodí chybu.

package DB;

import java.sql.*;

public class db01 
{
  String url="jdbc:odbc:myDB";
  String jmeno;
  String prijmeni;
  static Connection dB;
  Statement pozadavek;
  String dotaz;
  static ResultSet vysledky;
  
  public db01()
  {
    connect();
  }
  
  public void connect()
  {
    try
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      dB = DriverManager.getConnection(url);
    } catch (ClassNotFoundException v1)
    {
      System.err.println("Nepodařilo se zavést most JDBC/ODBC."+v1.getMessage());
      System.exit(1);
    } catch (SQLException v2)
      {
	    System.err.println("Nepodařilo se připojit k databázi. "+v2.getMessage());
	    System.exit(2);
      }
    try 
    {
      dotaz = "SELECT * FROM Studenti WHERE Jméno = 'Ferda' and ID=2";
	  pozadavek = dB.createStatement();
	  vysledky = pozadavek.executeQuery(dotaz);
    } catch (SQLException v3) 
      {
	    System.err.println("Chyba SQL. "+v3.getMessage());
	    System.exit(3);
	  }
    try
    {
      boolean zaznamy = vysledky.next();
      if (!zaznamy)
      {
        System.out.println("Nebyla vracena žádná data");
        System.exit(3);
      } 
      do
      {
        jmeno=vysledky.getString(2);
        prijmeni=vysledky.getString(3);
        System.out.println("ID je "+vysledky.getString(1)+" a jméno: "+jmeno+" "+prijmeni+". Adresa: ");
      }
      while (vysledky.next());
    pozadavek.close();
    } catch (SQLException v4)
      {
        System.err.println("Chyba při zobrazení dat. "+v4.getMessage());
        System.exit(4);
      } 
    finally
    {
      try
      {
	    vysledky.close();
	    dB.close();
	  } catch (Exception v5)
	    {
	      System.err.println("Chyba při ukončení spojení. "+v5.getMessage());
	      System.exit(5);
	    }
    }
  }
  public static void main(String[] args)
  {
    db01 a01 = new db01();
    a01.connect();
  }
}

a výsledek: 

ID je 2 a jméno: Ferda Srab. Adresa: 
Chyba při ukončení spojení. ResultSet is closed

Kdo by věděl o nějaký radě, budu rád a moc to ocením.

Nahlásit jako SPAM
IP: 86.63.210.–
liborb
~ Redaktor
+18
Guru
4. 6. 2013   #9
-
+1
-
Zajímavé

Když se podíváš do dokumentace k ResultSet.close(), tak se tam mimo jiné dočteš:

Note: A ResultSet object is automatically closed by the Statement object that generated it when that Statement object is closed ...

Nahlásit jako SPAM
IP: 188.75.135.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Rychlejší práce s databází — založil Franceq

Práce s databází - Pascal — založil El97za

ODBC v C++ — založil plantaznik

JDBC a JAVA — založil Lumpik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý