postgres Problem...

  • 7 Antworten
  • Letztes Antwortdatum
T

tomycat

Ambitioniertes Mitglied
0
hallo,
ich habe die...
<uses-permission android:name="android.permission.INTERNET" />
in die mainifest eingefügt.

die jar in mein Projekt eingebaut und aktiviert.
Code:
public class normal extends Activity implements OnClickListener{
       private Button zurueck;
      private Button jetztsenden;
      TextView   resultArea; // tut
      @Override
      public void onCreate(Bundle savedInstanceState)  {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.normal);
       
          resultArea= (TextView) findViewById(R.id.resultArea);
          resultArea.setText("............");      //tut

 
          zurueck = (Button) findViewById(R.id._zurueck);
          zurueck.setOnClickListener(this);
         
          jetztsenden = (Button) findViewById(R.id.jetzt_senden);
          jetztsenden.setOnClickListener(this);
             
      public void onClick(View v)
      {
          if (v == zurueck)
           {
   
             Intent intent = new Intent(this, MainActivity.class);
           this.startActivity(intent);
           }
          if (v == jetztsenden)
           {
            /// postgressql
            String retval = "";
                try {
                    Class.forName("org.postgresql.Driver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                    retval = e.toString();

                }
                String url = "jdbc:postgresql://192.168.178.111/meinebank?user=postgres";
                Connection conn;
                try {
                    DriverManager.setLoginTimeout(5);
                    conn = DriverManager.getConnection(url);
                    Statement st = conn.createStatement();
                    String sql;
                    sql = "SELECT * FROM kunden";
                    ResultSet rs = st.executeQuery(sql);
                    while(rs.next()) {
                        retval = rs.getString(1);
                    }
                    rs.close();
                    st.close();
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    retval = e.toString();
                    resultArea.setText(e.toString()); ///////// Es kommt eine Fehlermeldung
               
                }           
           }           
         
       }     
      //AB hier tut             
      // Bis hier tut     
      }

Ich drücke den Button und die Zeile schreibt mir folgendes in mein Fenster:
resultArea.setText(e.toString());
org.postgresql.util.PSQLException: Etwas Ungewöhnliches ist passiert, das den Treiber fehlschlagen ließ. Bitte teilen Sie diesen Fehler mit.

Was mich wundert, wo trage ich mein Port ein?
 
Z.B:

...//192.168.178.111:PORT/meinebank..

PS: Du solltest auch die 3 Streams schließen (rs, st, con), wenn du ein Fehler hast (im catch block).

Literatur z.B:
Rheinwerk Computing :: Java ist auch eine Insel – 24 Datenbankmanagement mit JDBC

Sonst google den Begriff JDBC.


Fehlermeldung. du kannst Dir den Fehler auch mit Logcat ausgeben.

Und ich habe noch eine schlechte Nachricht. Wenn du JDBC benutzt, sind die Fehlermeldung bei SQLException meist sehr kryptisch.
 
  • Danke
Reaktionen: tomycat
danke für die Doku.
Dieser Code habe ich mit Java (ohne Android) ausgeführt, geht 1a !!! Ich bekomme eine Tabelle erstellt.
Über dem Code steht noch main blalbal MEHR NICHT !!! Dieses Stück Code habe ich 1 zu 1 in meinem Button reingezogen.Kompiliert, Button gedrückt und es wird KEINE TABELLE erstellt !!!
Code:
     Connection conn1 = null;
     try {
       // Connect method #1
       String dbURL1 = "jdbc:postgresql://192.168.178.111:5432/Felkass?user=postgres";
       conn1 = DriverManager.getConnection(dbURL1);
       if (conn1 != null)
       {
         System.out.println("Connected to database #1");
       }
       Statement stmt = null;
        stmt = conn1.createStatement();
      String sql = "CREATE TABLE COMPANYjxxx " +
      "(ID INT PRIMARY KEY  NOT NULL," +
      " NAME  TEXT  NOT NULL, " +
      " AGE  INT  NOT NULL, " +
      " ADDRESS  CHAR(50), " +
      " SALARY  REAL)";
      stmt.executeUpdate(sql);
      stmt.close();
      conn1.close();
     } catch (SQLException ex) {
       ex.printStackTrace();
     } finally {
       try {
         if (conn1 != null && !conn1.isClosed()) {
           conn1.close();
         }
       
       } catch (SQLException ex) {
         ex.printStackTrace();
       }
     }
 
Hast Du die Tabelle wieder gelöscht? Wenn nicht versuche es mal mit:
CREATE TABLE IF NOT EXISTS
 
  • Danke
Reaktionen: tomycat
hmmmm,
Wenn es zu einer Tabelle gekommen ist, dann ändere ich den Tabellenname ab.Leider kommt es nur zu einer TAbelle mit reinem JAva nicht Android.
CREATE TABLE COMPANY_x
CREATE TABLE COMPANY_xx
CREATE TABLE COMPANY_xxx
CREATE TABLE COMPANY_y
Wenn ich debugge:

02-06 20:22:13.123: W/IInputConnectionWrapper(19249): getCursorCapsMode on inactive InputConnection
02-06 20:22:24.177: E/LoadedApk(19621): initializeJavaContextClassLoader: Unable to get Package Info <---Rot !!!!!!!!!!!!!!
02-06 20:22:33.187: D/libEGL(19746): loaded /system/lib/egl/libEGL_VIVANTE.so
02-06 20:22:33.197: D/libEGL(19746): loaded /system/lib/egl/libGLESv1_CM_VIVANTE.so
02-06 20:22:33.207: D/libEGL(19746): loaded /system/lib/egl/libGLESv2_VIVANTE.so
02-06 20:22:33.250: D/OpenGLRenderer(19746): Enabling debug mode 0

Ich drücke den Button "jetzt ausführen"

02-06 20:22:56.704: W/System.err(19746): java.sql.SQLException: No suitable driver
02-06 20:22:56.710: W/System.err(19746): at java.sql.DriverManager.getConnection(DriverManager.java:182)
02-06 20:22:56.714: W/System.err(19746): at java.sql.DriverManager.getConnection(DriverManager.java:140)
02-06 20:22:56.717: W/System.err(19746): at com.example.kinup.normal.onClick(normal.java:172)
02-06 20:22:56.717: W/System.err(19746): at android.view.View.performClick(View.java:4204)
02-06 20:22:56.720: W/System.err(19746): at android.view.View$PerformClick.run(View.java:17394)
02-06 20:22:56.720: W/System.err(19746): at android.os.Handler.handleCallback(Handler.java:725)
02-06 20:22:56.724: W/System.err(19746): at android.os.Handler.dispatchMessage(Handler.java:92)
02-06 20:22:56.724: W/System.err(19746): at android.os.Looper.loop(Looper.java:137)
02-06 20:22:56.727: W/System.err(19746): at android.app.ActivityThread.main(ActivityThread.java:5106)
02-06 20:22:56.727: W/System.err(19746): at java.lang.reflect.Method.invokeNative(Native Method)
02-06 20:22:56.727: W/System.err(19746): at java.lang.reflect.Method.invoke(Method.java:511)
02-06 20:22:56.727: W/System.err(19746): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
02-06 20:22:56.727: W/System.err(19746): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:588)
02-06 20:22:56.727: W/System.err(19746): at dalvik.system.NativeStart.main(Native Method)
02-06 20:23:28.114: W/IInputConnectionWrapper(19746): getCursorCapsMode on inactive InputConnection
 
Soweit ich den Fehler verstehe, findet deine App nicht den Treiber für die Datenbank.
Hast Du die passende Library eingebunden.
 
  • Danke
Reaktionen: tomycat
Man darf im UI Thread keine Netzwerkverbindungen aufbauen. Auch nicht, wenn man die INTERNET Permission hat. Die Postgres Query muss in einem eigenen Thread bzw. AsyncTask stattfinden.
 
  • Danke
Reaktionen: tomycat
DieGoldeneMitte schrieb:
Man darf im UI Thread keine Netzwerkverbindungen aufbauen. Auch nicht, wenn man die INTERNET Permission hat. Die Postgres Query muss in einem eigenen Thread bzw. AsyncTask stattfinden.
Genau so ist es. Ich dachte wenn ich AsyncTask weglasse und im Java (ohne Android) starte. Dann sollte es auf Android auch gehen. :)
 
Zurück
Oben Unten