Datenbank Abfragen

  • Antworten:72
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 37

02.05.2011, 18:53:39 via Website

Hallo Androiden!

Ich habe derzeit ein Projekt in der Schule laufen. Es soll ein App erstellt werden mit dem ich auf die Schuldatenbank zugreife und dn Stundenplan anzeigen lasse. Das Habe ich bislang:

Java
1package AndroidStundenPlan.App;
2
3import java.sql.Connection;
4import java.sql.DriverManager;
5import java.sql.ResultSet;
6import java.sql.Statement;
7
8import android.R.string;
9import android.app.Activity;
10import android.content.Context;
11import android.database.SQLException;
12import android.os.Bundle;
13import android.view.View;
14import android.widget.AdapterView;
15import android.widget.AdapterView.OnItemClickListener;
16import android.widget.AdapterView.OnItemSelectedListener;
17import android.widget.ArrayAdapter;
18import android.widget.Spinner;
19import android.widget.TextView;
20import android.widget.Toast;
21
22public class androidStundenPlanApp extends Activity {
23 /** Called when the activity is first created. */
24
25 @Override
26 public void onCreate(Bundle savedInstanceState) {
27 super.onCreate(savedInstanceState);
28 setContentView(R.layout.main);
29
30 /** Erster Spinner zur Auswahl der Klasse! */
31
32 Spinner s = (Spinner) findViewById(R.id.spinner);
33 ArrayAdapter adapter = ArrayAdapter.createFromResource(
34 this, R.array.Klassen, android.R.layout.simple_spinner_item);
35 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
36 s.setAdapter(adapter);
37 s.setOnItemSelectedListener(new MyOnItemSelectedListener());
38
39 /** Zweiter Spinner Wochenauswahl */
40
41 Spinner d = (Spinner) findViewById(R.id.spinner2);
42 ArrayAdapter adapter2 = ArrayAdapter.createFromResource(
43 this, R.array.wochen, android.R.layout.simple_spinner_item);
44 adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
45 d.setAdapter(adapter2);
46 d.setOnItemSelectedListener(new MyOnItemSelectedListener2());
47
48 }
49 /** Auswertung des Ersten Spinners (Klassenauswahl) */
50 public class MyOnItemSelectedListener implements OnItemSelectedListener {
51
52 public void onItemSelected(AdapterView<?> parent,
53 View view, int pos, long id) {
54 /** Kurzer Popup der auswahl! */
55 Toast.makeText(parent.getContext(), "Die Klasse ist " +
56 parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
57
58 /** Dauerhafte ausgab der AUswahl! */
59 TextView test = (TextView) findViewById(R.id.barname);
60 test.setText("Select * FROM STUNDENPLANDB WHERE Klasse = "+parent.getItemAtPosition(pos).toString());
61
62
63
64 }
65
66
67
68 public void onNothingSelected(AdapterView<?> parent) {
69 // Do nothing.
70 }
71 }
72 /** Auswertung des zweiten Spinners (Wochenauswahl) */
73 public class MyOnItemSelectedListener2 implements OnItemSelectedListener {
74
75 public void onItemSelected(AdapterView<?> parent,
76 View view, int pos, long id) {
77 Toast.makeText(parent.getContext(), "Die Woche ist " +
78 parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
79 }
80 public void onNothingSelected(AdapterView<?> parent) {
81 // Do nothing.
82 }
83 }
84 public class SimpleQuery {
85
86 public void main(String[] args) {
87
88 // Diese Eintraege werden zum
89 // Verbindungsaufbau benoetigt.
90 final String hostname = "localhost";
91 final String port = "3306";
92 final String dbname = "lischa";
93 final String user = "root";
94 final String password = "";
95
96 Connection conn = null;
97
98 try {
99 System.out.println("* Treiber laden");
100 Class.forName("org.gjt.mm.mysql.Driver").newInstance();
101 }
102 catch (Exception e) {
103 System.err.println("Unable to load driver.");
104 e.printStackTrace();
105 }
106 try {
107 System.out.println("* Verbindung aufbauen");
108 String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
109 conn = DriverManager.getConnection(url, user, password);
110
111 System.out.println("* Statement beginnen");
112 Statement stmt = conn.createStatement();
113
114 System.out.println("* Abfrage beginnen");
115 String sqlCommand =
116 "SELECT Name, StOrt, Gehalt FROM personal";
117 // "SELECT Name, StOrt, Gehalt FROM personal WHERE Gehalt>50000";
118 ResultSet rs = stmt.executeQuery(sqlCommand);
119
120 System.out.println("* Ergebnisse anzeigen");
121 while (rs.next()) {
122 String name = rs.getString(1);
123 String standort = rs.getString("StOrt");
124 double gehalt = rs.getDouble(3);
125 System.out.println( name+" "+standort+" "+gehalt );
126 }
127
128 System.out.println("* Statement beenden");
129 stmt.close();
130 System.out.println("* Datenbank-Verbindung beenden");
131 conn.close();
132 }
133 catch (SQLException sqle) {
134 System.out.println("SQLException: " + sqle.getMessage());
135 System.out.println("SQLState: " + sqle.getSQLState());
136 System.out.println("VendorError: " + sqle.getErrorCode());
137 sqle.printStackTrace();
138 }
139
140
141 } // ende: public static void main()
142
143 } // ende: public class SimpleQuery */
144}

Main.xml
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:padding="10dip"
5 android:layout_width="fill_parent"
6 android:layout_height="wrap_content">
7
8 <TextView
9
10 android:layout_width="fill_parent"
11 android:layout_height="wrap_content"
12 android:layout_marginTop="10dip"
13 android:text="Bitte wähle deine Klasse:"
14 />
15
16 <Spinner
17 android:id="@+id/spinner"
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:drawSelectorOnTop="true"
21 android:prompt="@string/planet_prompt"
22 />
23 <TextView
24
25 android:layout_width="fill_parent"
26 android:layout_height="wrap_content"
27 android:layout_marginTop="10dip"
28 android:text="Bitte wähle die Woche:"
29 />
30
31 <Spinner
32 android:id="@+id/spinner2"
33 android:layout_width="fill_parent"
34 android:layout_height="wrap_content"
35 android:drawSelectorOnTop="true"
36 android:prompt="@string/planet_prompt"
37 />
38 <TextView
39 android:id="@+id/barname"
40 android:layout_width="fill_parent"
41 android:layout_height="wrap_content"
42 android:textSize="30sp"
43 android:textStyle="bold"
44 android:layout_marginTop="5dp"
45 android:layout_marginLeft="5dp"
46 />
47
48</LinearLayout>

Arrays.xml
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string-array name="Klassen">
5 <item>FG123</item>
6 <item>FG141</item>
7 <item>FG123</item>
8 <item>FG113</item>
9 </string-array>
10 <string-array name="wochen">
11 <item>1</item>
12 <item>2</item>
13 <item>3</item>
14 <item>4</item>
15
16 </string-array>
17</resources>

Strings.xml
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3 <string name="hello">Hello World, androidStundenPlanApp!</string>
4 <string name="app_name">AndroidStundenPlanApp</string>
5 <string name="planet_prompt">Choose a planet</string>
6 <string name="mContext">Choose a planet</string>
7 <string name="selection">Choose a planet</string>
8</resources>


Wie man sieht habe ich Zwei Spinner eingebaut. Mit diesen soll der User wählen was das SQL Statement den Server abfragen soll. Später soll es so Funktionieren:
1.Der User wählt Klasse und Woche aus
2.Der User drückt auf "Anfragen"
3.Der User kommt auf einer Neuen Seite den Stundenplan für diese Woche gezeigt.

Derzeit Hänge ich etwas an dem Teil die Datenbank abzufragen:
System.out.println("SQLState: " + sqle.getSQLState());
System.out.println("VendorError: " + sqle.getErrorCode());

An dieser Stelle bekomme ich die Meldung angezeigt: The Method geteErrorCode() is undefined for the type SQLException

Was muss ich tuen? Da ich warscheinlich mehr Hilfe brauchen werde wäre es toll wen sich Jemand finden lässt der mir vieleicht per Teamviewer (natürlich werde ich diesen Beitrag aktualisieren um anderen zu Helfen) weiter hilft.

Bitte um Hilfe

— geändert am 02.05.2011, 19:01:06

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

02.05.2011, 23:55:05 via Website

Tausche mal :

import android.database.SQLException;

gegen

import java.sql.SQLException;

Dann sollte dieser Error verschwinden. Vermutlich hast Du irgendwann beim Autoimport die Frage welches der beiden er verwenden soll falsch beantwortet.

lg Voss

Antworten
  • Forum-Beiträge: 37

03.05.2011, 01:29:31 via Website

Danke für die Schnelle Hilfe!

Ich habe es ausgetestet, der Fehler ist nun zwar behoben aber ich bekomme nicht den gewünschten inhalt ausgegeben.
Woran könnte dies liegen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 136

03.05.2011, 10:55:24 via Website

Was heißt, nicht den gewünschten Inhalt? Den falschen oder garkeinen?

Grüße,
Malte

Antworten
  • Forum-Beiträge: 636

05.05.2011, 23:59:57 via Website

Hi,
ich habe mir das mal angeschaut.
Fange ich mal ganz vor an. Variablen haben immer sprechende Namen s,adapter,adapter2 gehen gar nicht :)
Dann hast du dort eine main-Methode zum testen der Datenbank-Verbindung und deiner Abfrage. In dieser benutzt du den JDBC-Treiber org.gjt.mm. Ich habe es mit dem Treiber gar nicht erst versucht. Ladt dir bitte folgende jar damit hast du nun den JDBC mysql connector.

1Class.forName("org.gjt.mm.mysql.Driver").newInstance();
2änderst du in
3Class.forName("com.mysql.jdbc.Driver").newInstance();

Damit die Klasse (com.mysql.jdbc.Driver) beim Ausführen der main-Methode gefunden wird, muss du diese mit ecplise in den PATH deiner Anwendung packen. Das kannst du hier nachlesen unter dem Punkt "Adding external library (.jar ) to the Java classpath".
Danach kannst du die main-Methode ausführen und bekommst deine Ergebnisse :)

Gruß,
Markus

— geändert am 06.05.2011, 00:01:05

Antworten
  • Forum-Beiträge: 37

06.05.2011, 12:24:32 via Website

Hey danke für die Unterstützung von euch allen.

Leider Funktionuert der Link zu der Jar Datei nicht. Wärst so net den nochmal rein zusetzen? Will nichts falsches runterladen, habe schon danach gegoogelt aber befürchte das ich nicht das Richtige auswähle.


MfG
Roland

Antworten
  • Forum-Beiträge: 30

06.05.2011, 12:30:29 via App

Jörg V.
Tausche mal :

import android.database.SQLException;

gegen

import java.sql.SQLException;

Dann sollte dieser Error verschwinden. Vermutlich hast Du irgendwann beim Autoimport die Frage welches der beiden er verwenden soll falsch beantwortet.

Hallo mal kurz weg von eigentlichen Frage.

Wie funktioniert ein Autoimport? Danke

Gruß Kevin :-)

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

06.05.2011, 12:34:30 via Website

Roland Frescher
Hey danke für die Unterstützung von euch allen.

Leider Funktionuert der Link zu der Jar Datei nicht. Wärst so net den nochmal rein zusetzen? Will nichts falsches runterladen, habe schon danach gegoogelt aber befürchte das ich nicht das Richtige auswähle.


MfG
Roland

Nimm dies .... :kid:

lg Voss

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

06.05.2011, 12:38:36 via Website

Kevin W.
Jörg V.
Tausche mal :

import android.database.SQLException;

gegen

import java.sql.SQLException;

Dann sollte dieser Error verschwinden. Vermutlich hast Du irgendwann beim Autoimport die Frage welches der beiden er verwenden soll falsch beantwortet.

Hallo mal kurz weg von eigentlichen Frage.

Wie funktioniert ein Autoimport? Danke

Gruß Kevin :-)

Wenn Du in Eclipse bspw. schreibst:

Toast.makeText(parent.getContext(), "Die Klasse ist " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

Wird Eclipse den Code zunächst als Fehlerhaft markieren weil es die zugehörige Codebasis nicht kennt.

Dann drückst Du [Strg] + [Shift] + [O] und wie von Zauberhand fügt Eclipse Deinem Code hinzu:

import android.widget.Toast;

Das ist Autoimport ...

— geändert am 06.05.2011, 12:38:59

lg Voss

Antworten
  • Forum-Beiträge: 37

06.05.2011, 14:45:53 via Website

Hallo,Ich habe es probiert die Jar datei einzubinden und bin daran gescheitert mit dem Fehler:

1[2011-05-06 14:41:04 - AndroidStundenPlanApp] Dx 1 error; aborting
2[2011-05-06 14:41:04 - AndroidStundenPlanApp] Conversion to Dalvik format failed with error 1

Habe gegoogelt und in einigen Beiträgen stand es hängt damit zusammen das die Class schon irgendwo vorkommt und ich sie nicht doppelt einbauen kann. verstehe ich nur nicht weil ich diese JAR nochnie eingebunden hatte. Da stand ich soll versuchen das Project zu Cleanen und andere Tipps die ich probierte aber bisher hat nix geholfen.

MfG
Roland

— geändert am 06.05.2011, 14:46:47

Antworten
  • Forum-Beiträge: 30

06.05.2011, 15:41:24 via App

Jörg V.
Kevin W.
Jörg V.
Tausche mal :

import android.database.SQLException;

gegen

import java.sql.SQLException;

Dann sollte dieser Error verschwinden. Vermutlich hast Du irgendwann beim Autoimport die Frage welches der beiden er verwenden soll falsch beantwortet.

Hallo mal kurz weg von eigentlichen Frage.

Wie funktioniert ein Autoimport? Danke

Gruß Kevin :-)

Wenn Du in Eclipse bspw. schreibst:

Toast.makeText(parent.getContext(), "Die Klasse ist " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

Wird Eclipse den Code zunächst als Fehlerhaft markieren weil es die zugehörige Codebasis nicht kennt.

Dann drückst Du [Strg] + [Shift] + [O] und wie von Zauberhand fügt Eclipse Deinem Code hinzu:

import android.widget.Toast;

Das ist Autoimport ...

Woah mega cool :-) ich hab immer nach den imports gegoogelt :-) super danke.

Antworten
  • Forum-Beiträge: 636

06.05.2011, 16:10:03 via Website

Roland Frescher
Hallo,Ich habe es probiert die Jar datei einzubinden und bin daran gescheitert mit dem Fehler:

1[2011-05-06 14:41:04 - AndroidStundenPlanApp] Dx 1 error; aborting
2[2011-05-06 14:41:04 - AndroidStundenPlanApp] Conversion to Dalvik format failed with error 1

Habe gegoogelt und in einigen Beiträgen stand es hängt damit zusammen das die Class schon irgendwo vorkommt und ich sie nicht doppelt einbauen kann. verstehe ich nur nicht weil ich diese JAR nochnie eingebunden hatte. Da stand ich soll versuchen das Project zu Cleanen und andere Tipps die ich probierte aber bisher hat nix geholfen.

MfG
Roland

Hi,
in deinem Projekt-Root-Verzeichnis sollte eine .classpath-Datei liegen.
Schreib mir mal bitte den Inhalt hier rein.

Gruß,
Markus

Antworten
  • Forum-Beiträge: 37

06.05.2011, 16:18:58 via Website

1<?xml version="1.0" encoding="UTF-8"?>
2<classpath>
3 <classpathentry kind="src" path="src"/>
4 <classpathentry kind="src" path="gen"/>
5 <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
6 <classpathentry kind="lib" path="NewLib/mysql-connector-java-5.1.16.jar"/>
7 <classpathentry kind="output" path="bin"/>
8</classpath>

Antworten

Empfohlene Artikel