JPA - Datenbanktabellen auslesen

mavinatic

Bekanntes Mitglied
Hallo Community,

ich habe eine Frage und zwar möchte ich aus meiner Oracle 10g XE alle Datenbanktabellen eines bestimmten Benutzters auslesen ;-) Ist das mit JPA irgendwie möglich?

Gruß

George
 

Peter W. Marth

Aktives Mitglied
Hallo,

es sollte möglich sein, mit JPA auf die Spalten OWNER und TABLE_NAME der View SYS.ALL_TABLES zu mappen und damit eine Abfrage auf einen bestimmten Owner zu formulieren.
 

mavinatic

Bekanntes Mitglied
Hallo ich bin ein extremer anfänger was jpa angeht und bitte darum es anfängerfreundlicher zu formulieren, vllt mit code beispiel :)

gruß

george
 

Peter W. Marth

Aktives Mitglied
Hallo,

ich hab mal vorausgesetzt, dass Du die Grundlagen von JPA kennst und dass als Persistence Provider für JPA Hibernate zum Einsatz kommt.

Zunächst braucht man eine Entity-Klasse, welche die View ALL_TABLES repräsentiert. Dabei müssen nicht alle Tabellenspalten dieser View gemappt werden, nur die für diesen zweck interessanten OWNER und TABLE_NAME:

Java:
package test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity(name = "AllTables")
@Table(name = "SYS.ALL_TABLES")
public class AllTables {

	@Column(name = "OWNER")
	private String owner;
	@Id
	@Column(name = "TABLE_NAME")
	private String tableName;

	public AllTables() {
		super();
	}

	public AllTables(String owner, String tableName) {
		super();
		this.owner = owner;
		this.tableName = tableName;
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}

	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

}

Dazu noch eine Persistence Unit, in der die Datenbank-Verbindungsparameter und die Entity-Klasse stehen:

[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

<persistence-unit name="demo">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<class>test.AllTables</class>

<properties>
<property name="hibernate.archive.autodetection" value="none"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.c3p0.min_size" value="1"/>
<property name="hibernate.c3p0.max_size" value="1"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect"/>
<property name="hibernate.connection.driver_class"
value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.url"
value="jdbc:eek:racle:thin:mad:meindatenbankserver:1521:meinedatenbank" />
<property name="hibernate.connection.username" value="meinuser" />
<property name="hibernate.connection.password" value="meinpasswort" />
</properties>
</persistence-unit>

</persistence>
[/XML]

Und dann noch eine Klasse, um das Ganze mal mit einer einfachen JPA-Abfrage zu testen:

Java:
package test;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class QuickAndDirty {

	public static void main(String[] args) {
	    EntityManagerFactory emf;
	    EntityManager em;
        emf = Persistence.createEntityManagerFactory("demo");
        em = emf.createEntityManager();
        
        Query query = em.createQuery("SELECT a FROM AllTables a");
        @SuppressWarnings("unchecked")
		List<AllTables> resultList = query.getResultList();
        for(AllTables a:resultList){
        	System.out.println("name="+a.getTableName()+" owner="+a.getOwner());
        }
	}

}
 

Peter W. Marth

Aktives Mitglied
Natürlich lässt sich das noch anders ermitteln, aber dann nicht mit JPA. Man kann z.B. selber eine JDBC-Connection zur Datenbank aufbauen und dann eine Abfrage "select table_name, owner from sys.all_tables" absetzen, das ResultSet auswerten usw. Aber "einfacher" wird die Sache dadurch auch nicht wirklich.
 

Peter W. Marth

Aktives Mitglied
Ja, stimmt, so geht's auch ohne Entity-Klasse:

Java:
        Query q2 = em.createNativeQuery( "select owner, table_name from sys.all_tables" );
        List<Object[]> r2 = q2.getResultList();
        for(Object[] oa:r2){
            for(Object o:oa){
                String s = (String)o;
                System.out.println("s=" + s);
            }
        }
 

mavinatic

Bekanntes Mitglied
Ich bedanke mich nochmals und habe noch eine Frage:

Ich hab die Variable String databaseUser = "xy" und möchte die in den SQL-Query einbauen, es müsste folglich so aussehen:

"SELECT table_name, owner FROM sys.all_tables WHERE owner LIKE '"+databaseUser+"'"

aber dabei bekomm ich NICHTS zurück :/ Ich weiß 100%ig das dieser benutzer existiert ich benutze Oracle 10g XE :)
 

mavinatic

Bekanntes Mitglied
Ich habe jetzt nochmals probiert den Ansatz mit den Entitys, aber dann sagt er mir folgendes:

Java:
org.hibernate.AnnotationException: No identifier specified for entity: ....

Nur zur Info!
 

Peter W. Marth

Aktives Mitglied
Die Abfrage arbeitet case sensitive, man muss dabei die Groß-/Kleinschreibung beachten. Mit z.B.

"SELECT table_name, owner FROM sys.all_tables WHERE lower(owner) = lower('"+databaseUser+"')"
oder
"SELECT table_name, owner FROM sys.all_tables WHERE lower(owner) LIKE lower('%"+databaseUser+"%')"

kann das "normalisiert" werden.


org.hibernate.AnnotationException: No identifier specified for entity: ....

Der Trick besteht darin, einfach eine Spalte mit @Id zu annotieren, um JPA einen Primary Key vorzugaukeln.
 

mavinatic

Bekanntes Mitglied
Aber ich habe doch garkeinen PrimaryKey auf welche spalte soll ich folglich die Id-Annotation setzen? Oder sind die Datenbanktabellennamen PK?
 

Peter W. Marth

Aktives Mitglied
Es spielt für diesen Fall keine Rolle, welche Spalte mit @Id annotiert wird, da nur lesend auf die View zugegriffen wird. der Trick dient nur dazu, JPA/Hibernate zufrieden zu stellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Warum werden für Datenbanktabellen Schemanamen festgelegt? Datenbankprogrammierung 1
D Frage zu INSERTS über mehrere Datenbanktabellen Datenbankprogrammierung 3
G welche Datenbanktabellen für folgende Attribute Datenbankprogrammierung 3
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
L Oracle Oracle Datumsspalte auslesen Datenbankprogrammierung 5
A Umsätze der Bank auslesen Datenbankprogrammierung 7
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
K SQLite Datenbank in App integrieren: Vor Auslesen schützbar? Datenbankprogrammierung 6
K Java Datenbank auslesen Datenbankprogrammierung 8
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
J Onlinedatenbank einmalig auslesen Datenbankprogrammierung 1
E Wie kann ich textdateien, die als BLOB abgespeichert sind, aus der Datenbanktabelle auslesen? Datenbankprogrammierung 23
C MySQL Datenbank auslesen/beschreiben und Zusatz Datenbankprogrammierung 1
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
E primaryKey auslesen - Datensätze abgleichen Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R MS-Access mit JAva auslesen Datenbankprogrammierung 7
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Tabellen nacheinander auslesen Datenbankprogrammierung 10
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
E Werte auslesen Datenbankprogrammierung 3
O Metadaten / DatenbankAttribute Auslesen Datenbankprogrammierung 4
D Alle Werte aus DB auslesen und in Chart darstellen Datenbankprogrammierung 6
Ollek Auslesen DatenbanktabelleDatei iSeries Datenbankprogrammierung 10
C H2 Letzten Eintrag auslesen Datenbankprogrammierung 6
D MySQL Bild aus DB auslesen und auf FTP Speichern Datenbankprogrammierung 7
N Oracle txt. Datei auslesen-> verändern-> einlesen Datenbankprogrammierung 7
F NUR 3 datensätze auslesen Datenbankprogrammierung 6
M Datenbank (MySQL) auslesen Datenbankprogrammierung 3
S MySQL Datenbank auslesen - Treiberproblem Datenbankprogrammierung 12
F MySQL SSH Datenbank auslesen Datenbankprogrammierung 3
D Blob MimeTyp auslesen Datenbankprogrammierung 2
S Verschiedene Informationen gleichen Typs speichern und auslesen Datenbankprogrammierung 4
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
D Hibernate: ArrayList in DB speichern und auslesen Datenbankprogrammierung 4
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
P MySQL Objekt aus BLOB auslesen Datenbankprogrammierung 3
B String aus txtDatei auslesen und in Datenbank schreiben. Datenbankprogrammierung 8
B häppchenweises auslesen "lazy loading" von Datenbank Datenbankprogrammierung 13
D Csv auslesen und in mysql db schreiben Datenbankprogrammierung 9
K PostgreSQL PDF-Dateien in Datenbank speichern und auslesen Datenbankprogrammierung 4
E Datenbank auslesen mit JAVA Datenbankprogrammierung 2
W MySQL Datenbanken auslesen Datenbankprogrammierung 3
H DB auslesen (Hibernate, Query, Parameter) Datenbankprogrammierung 8
J Tabelle auslesen- knifflig Datenbankprogrammierung 7
W bestimmte Zeile mit bestimmter Spalte auslesen Datenbankprogrammierung 11
Plastagen DBC Dateien korrekt auslesen Datenbankprogrammierung 2
O vernümpftig Datumsangabe in mySQL DB speichern und auslesen Datenbankprogrammierung 4
M Derby insert, ID auslesen Datenbankprogrammierung 3
S Java objekt in MYSQL auslesen Datenbankprogrammierung 32
R Update Time auslesen Datenbankprogrammierung 2
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
MQue speziell Auslesen aus Datenbank Datenbankprogrammierung 5
C MP3 in DB als Blob, wieder auslesen und als MP3 speichern??? Datenbankprogrammierung 8
Antoras Passwort aus DB auslesen Datenbankprogrammierung 12
V tabellenName aus den Metadaten auslesen Datenbankprogrammierung 4
L primärschlüssel auslesen Datenbankprogrammierung 6
G Bild aus als OLE-Typ aus MS Acces auslesen Datenbankprogrammierung 3
G Namen der Datebank aus einer Connction auslesen Datenbankprogrammierung 3
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
S ResultSet variabel auslesen Datenbankprogrammierung 4
G Daten schneller aus einer DB auslesen Datenbankprogrammierung 9
T Metadaten Auslesen Datenbankprogrammierung 7
B Spaltennamen von MySQL Datenbank nach Java auslesen Datenbankprogrammierung 10
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
A Auslesen aus einer csv-Datei Datenbankprogrammierung 2
N Unbekannte Datenbank über Metadaten auslesen? Datenbankprogrammierung 9
A Funktionale Abhängigkeiten auslesen Datenbankprogrammierung 4
T Datenbanknamen eines Datenbankservers auslesen Datenbankprogrammierung 9
thE_29 Byte auslesen mit MS SQL Server Datenbankprogrammierung 4
W Auslesen von Tabellen einer MYSql Datenbank Datenbankprogrammierung 25
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
M Mysql datenbank auslesen und mittels servlet wiedergeben Datenbankprogrammierung 3
G Oracle-Record auslesen Datenbankprogrammierung 2
M Letzter Datensatz mit auslesen(brauch kleinen Tipp) Datenbankprogrammierung 15
G Spalten Namen auslesen und Zeilen daten auslesen Datenbankprogrammierung 17
F JDBC Abfrage Werte auslesen Datenbankprogrammierung 2
V mysql - tree auslesen und richtig ordnen Datenbankprogrammierung 4
G DB auslesen und in ein JTextArea schreiben Datenbankprogrammierung 3
Z Auslesen aus einer mySQL Datenbank Datenbankprogrammierung 4
P MYSQL werte aus liste auslesen und anderen damit updaten Datenbankprogrammierung 4
T Creates der Datenbank auslesen Datenbankprogrammierung 10
W datenbankschema auslesen Datenbankprogrammierung 3
S Daten aus einer MySQL-Datenbank auslesen Datenbankprogrammierung 7
S metadaten/Tabellen des sqlservers auslesen Datenbankprogrammierung 8
S Tabellen auslesen in einer DB Datenbankprogrammierung 14
P Primärschlüssel direkt nach der Eingabe wieder auslesen Datenbankprogrammierung 7
M MySQL Tabellen in java auslesen? Datenbankprogrammierung 5
L DB Felder in einem Array speichern und wieder auslesen Datenbankprogrammierung 11
V MAX Wert und weitere auslesen Datenbankprogrammierung 2
D Zufällige Zeile auslesen Datenbankprogrammierung 6
G Auslesen und in TextBox anzeigen lassen Datenbankprogrammierung 7
D Problem mit auslesen deiner DBase Datenbank Datenbankprogrammierung 8
R Einen Integer-Wert aus einer MySQL DB auslesen Datenbankprogrammierung 2
G speichern und auslesen von daten aus einer datenbank Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben