kommentare speichern

  • Antworten:18
  • Bentwortet
Simon S.
  • Forum-Beiträge: 24

11.10.2012, 09:43:39 via Website

Hallo community,

habe mal wieder eine Frage, ich bin dabei eine App zu erstellen, die Kommentare von Nutzern speichern soll.
Würdet Ihr das in einer SQL Datenbank?
Bisher mache ich die Übertragung per Rest (Json), kann ich das auch bei langen Kommentaren problemlos machen?

Danke schonmal

— geändert am 11.10.2012, 09:44:07

Antworten
Stefan S.
  • Forum-Beiträge: 560

15.10.2012, 08:36:42 via Website

Meines Wissens sollte bei JSON Übertragungen die Länge keine Rolle spielen und eine SQL-DB ist natürlich Performance-Technisch nie schlecht.

Antworten
Simon S.
  • Forum-Beiträge: 24

15.10.2012, 09:00:19 via Website

Hallo Stefan,

danke für deine Antwort. Ja so dachte ich auch, wollte nur noch andere Meinungen hören. Habe nur die Bedenken, dass die Performance meiner SQL Datenbank sehr schnell nachlässt, wenn viele und lange Kommentare gespeichert werden und somit die Größe steigt. Wie würdest denn die Länge des Feldes in der SQL definieren?

Habe in meiner App noch ein Problem, ich wähle in der Galerie ein Bild aus und möchte dieses auf einen Server hochladen. Leider bekomme ich eine File not Found Exception. Kennst Dich mit dem Problem auch aus? P.S. bin auf Arbeit, kann den Code frühestens heut Abend posten.

hab aber die URI über data.getdata() ausgelesen und dann per URI.toString wieder in eine File gelesen. Dennoch kommt das.
Kann heute Abend wie gesagt den Code posten.

Antworten
Stefan S.
  • Forum-Beiträge: 560

15.10.2012, 10:02:28 via Website

Simon S.
Habe nur die Bedenken, dass die Performance meiner SQL Datenbank sehr schnell nachlässt, wenn viele und lange Kommentare gespeichert werden und somit die Größe steigt. Wie würdest denn die Länge des Feldes in der SQL definieren?

Falls nur der Kommentar gespeichert wird würde ich ein zusätliches Feld als PrimaryKey definieren wegen dem Index und der Performance.
Die Länge des Kommentars würde ich z.B. auf 255 beschränken und das Feld als VARCHAR(255) definieren.

Simon S.

Habe in meiner App noch ein Problem, ich wähle in der Galerie ein Bild aus und möchte dieses auf einen Server hochladen. Leider bekomme ich eine File not Found Exception. Kennst Dich mit dem Problem auch aus? P.S. bin auf Arbeit, kann den Code frühestens heut Abend posten.

hab aber die URI über data.getdata() ausgelesen und dann per URI.toString wieder in eine File gelesen. Dennoch kommt das.
Kann heute Abend wie gesagt den Code posten.

Wo tritt das FileNotFound auf? In der App?

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

15.10.2012, 10:55:12 via Website

Kurze Anmerkung zum VARCHAR(255).

SQLite-typisch würdest Du einfach nur TEXT als Typ verwenden und die Längenangabe weglassen. SQLite hat die Typen in Klassen eingeteilt und befreit den Entwickler von diesen einschränkenden Vorgaben. Beispiel:

1kommentarfeld TEXT

Ich habe auch für Dekaden den VARCHAR(255) verwendet. Das war zu Zeiten als noch an Längenfeldern gespart werden musste angesagt (für 255 Byte Daten reicht ein Byte Längenfeld). Heute spielt das so gut wie keine Rolle mehr.

Antworten
Simon S.
  • Forum-Beiträge: 24

15.10.2012, 12:06:07 via Website

Hi,

wow ist ja geil mit den Antworten...
Alsooo, ich kann zwar SQL aber in der Performance bzw Tiefe kenne ich mich nicht aus.
Und die Kommentare sollen auf dem Server gespeichert werden, d.h. ich hab normales SQL.
Kann ich da dann Text ohne Längenangaben machen?
Auf nem normalen Server mit SQL 5? Passt er dann den Speicherbedarf an?
Denn das ist ja das Problem, wenn ich es richtig verstanden habe reserviert er doch bei Varchar(255) immer Speicher für 255 Zeichen, oder?

Habe mir es eigentlich so gedacht, dass ich ne Extra Tabelle anlege für Kommentare, dann kann ich nach der ID des Fotos/bzw. Beitrages der Kommentiert werden soll,suchen und alle dazu verfügbaren Kommentare ausgeben...Oder nicht?
Also theoretisch Select * from (tabellename der kommentare) where id = ***

Zum Fehler, ich führe die App aus und bekomme dann einen Toast mit der FilenotFound Exception. Kann heute Abend nen Screenshot machen :)

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

15.10.2012, 12:18:27 via Website

Verstehe nur Bahnhof.

SQL5? Auf dem Handy? Über was redest Du? Das hättest Du vielleicht in Deinem Original-Post genauer erwähnen sollen, so dachten alle es geht um die Speicherung der Daten auf dem Gerät - deshalb die SQLite Empfehlungen.

Speicher in voller Länge reservieren beim Anlegen eines VARCHAR? Nein, das ist falsch. Dafür besitzt VARCHAR ein Längenfeld in der Datenbank.

Antworten
Simon S.
  • Forum-Beiträge: 24

15.10.2012, 12:36:12 via Website

ok, sry, also die Kommentare sollen online auf einem Webhosting Server gespeichert werden.
Und nun frage ich mich ob ich das da in ner SQL speichern soll...

Antworten
Simon S.
  • Forum-Beiträge: 24

15.10.2012, 18:05:36 via Website

Sodele nun kommt die Filenotfoundexception:

hier der Code der Fotoauswahl:

1public void onClick(View v) {
2 switch(v.getId()) {
3 case R.id.fotoauswaehlen:
4 Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
5
6 startActivityForResult(i, RESULT_LOAD_IMAGE);
7 break;
8 case R.id.senden:
9 senden();
10 break;
11 case R.id.empfangen:
12 empfangen();
13 break;
14 }
15 }
16
17
18 @Override
19 public void onActivityResult(int requestCode, int resultCode, Intent data) {
20 super.onActivityResult(requestCode, resultCode, data);
21
22 if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
23 Uri selectedImage = data.getData();
24
25
26
27
28
29 NetworkUtilityMessageHandler handler = new NetworkUtilityMessageHandler() {
30 public void onException(final Throwable exception) {
31
32 runOnUiThread(new Runnable()
33 {
34
35 public void run() {
36
37 Toast.makeText(Activity2.this,exception.getLocalizedMessage()+" "+exception.toString(),Toast.LENGTH_LONG).show();
38
39 }
40
41 });
42
43
44 }
45
46 public void onError(StatusLine statusLine) {
47 // TODO Auto-generated method stub
48
49 }
50 }
51 ;
52
53
54 String url = "meine url";
55
56
57 HttpPost post = new HttpPost(url);
58 File f = new File(selectedImage.toString());
59 FileEntity fileEntity = new FileEntity(f,"image/jpeg");
60 post.setHeader("Content-Disposition",f.getName());
61 post.setEntity(fileEntity);
62
63
64 HttpClient httpClient = new DefaultHttpClient();
65 try {
66 HttpResponse response = httpClient.execute(post);
67 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
68 {
69
70 }
71 else
72 {
73 if (handler!=null) handler.onError(response.getStatusLine());
74 }
75 } catch (ClientProtocolException e) {
76
77 if (handler!=null)
78 {
79 handler.onException(e);
80 }
81
82 } catch (IOException e) {
83
84 if (handler!=null) handler.onException(e);
85
86 }
87
88
89
90 }
91 }


Dazu die Exception:


Hmmm check nicht wie man Bilder einfügt tippe es ab:

content:/media/external/images/media/1 java.io.FileNotFoundException: /content:/media/external/images/1

— geändert am 15.10.2012, 18:09:07

Antworten
Stefan S.
  • Forum-Beiträge: 560

16.10.2012, 21:29:24 via Website

Simon S.
ok, sry, also die Kommentare sollen online auf einem Webhosting Server gespeichert werden.
Und nun frage ich mich ob ich das da in ner SQL speichern soll...

Eine SQL-Datenbank ist auf Dauer sicher die performanteste Lösung.
Es ginge aber auch mit XML, Access oder sonst was

Antworten
Stefan S.
  • Forum-Beiträge: 560

16.10.2012, 21:30:29 via Website

Und wo passiert der Fehler?

Antworten
Simon S.
  • Forum-Beiträge: 24

16.10.2012, 21:31:00 via Website

Ok...Würdest dann varchar(wenn ja welche Länge) oder text?

Antworten
Stefan S.
  • Forum-Beiträge: 560

17.10.2012, 09:57:36 via Website

Simon S.
Ok...Würdest dann varchar(wenn ja welche Länge) oder text?

Was für eine Datenbank ist es?
MS SQL?

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

17.10.2012, 10:14:56 via Website

Simon S.
Ok...Würdest dann varchar(wenn ja welche Länge) oder text?

TEXT als Spaltentyp gibt es nicht bei den meisten professionellen Datenbanksystemen. Dieser Hinweis stammt von mir unter der Annahme das Du über die Speicherung auf dem Android Gerät in der SQLite Datenbank redest. Bei SQLite spielt der Spaltentyp in der Tat nur eine Nebenrolle (siehe Storage Classes and Datatypes).

Bei den professionellen Datenbanksystemen solltest Du als Typ für Kommentare sicherlich VARCHAR verwenden. Die Länge ergibt sich durch Deine Anforderung. Wie viel Text soll Deiner Anforderung nach der Benutzer speichern können? Wenn Du das nicht weißt kannst Du einfach das Limit für VARCHAR in dem von Dir genutzten Datenbanksystem nachschlagen. Steht dort 2GB dann nutzt die Datenbank ein 4-Byte Längenfeld und Du kannst das getrost als Limit verwenden. Aber: Du solltest schon, auch im Sinne der grafischen Oberfläche die diese Texte erfassen/anzeigen soll, sinnvolle Werte für Längen verwenden.

— geändert am 17.10.2012, 10:16:06

Antworten
Simon S.
  • Forum-Beiträge: 24

17.10.2012, 10:26:33 via Website

Ok danke für die Info, ja es ist mysql...

Ja der Fehler, der hat mich in Wahnsinn getrieben...Man lernt täglich dazu :)

Wisst Ihr wie man MultipartEntity und Json verknüpfen kann? Also per MultipartEntity Json Daten übertragen?

Antworten
Stefan S.
  • Forum-Beiträge: 560

18.10.2012, 13:50:41 via Website

Simon S.
Ok danke für die Info, ja es ist mysql...

Ja der Fehler, der hat mich in Wahnsinn getrieben...Man lernt täglich dazu :)

Wisst Ihr wie man MultipartEntity und Json verknüpfen kann? Also per MultipartEntity Json Daten übertragen?

Da muss ich passen.

Antworten