Christian Helbig
- Forum-Beiträge: 3
26.10.2011, 00:06:25 via Website
26.10.2011 00:06:25 via Website
Hallo zusammen,
ich erhalte eine NullpointerException beim Versuch, einen Cursor über eine query-Abfrage zu erhalten.
Ich vermute, dass die Datenbank noch garnicht existiert. Laut JavaDoc wird diese zwar beim Erstaufruf erzeugt, aber so richtig sicher bin ich mir da auch nicht.
Inzwischen sehe ich den Wald vor lauter Bäumen nicht mehr. Kann mir bitte jemand sagen, wo der Fehler liegt? Ich komm nicht drauf...
Tools.java
DBConnect.java
Vielen Dank schonmal für alle Tipps.
Bye, Christian.
ich erhalte eine NullpointerException beim Versuch, einen Cursor über eine query-Abfrage zu erhalten.
Ich vermute, dass die Datenbank noch garnicht existiert. Laut JavaDoc wird diese zwar beim Erstaufruf erzeugt, aber so richtig sicher bin ich mir da auch nicht.
Inzwischen sehe ich den Wald vor lauter Bäumen nicht mehr. Kann mir bitte jemand sagen, wo der Fehler liegt? Ich komm nicht drauf...
Tools.java
1package bonussphere.softlevel.de;
2
3import bonussphere.softlevel.de.DBConnect.BiboTbl;
4import android.app.Activity;
5import android.app.AlertDialog;
6import android.database.Cursor;
7import android.database.sqlite.SQLiteStatement;
8
9public class Tools extends Activity{
10 DBConnect db = null;
11
12 public Tools() {
13 db = new DBConnect(this);
14 }
15
16 /**
17 * Erzeugt ein Meldungsfenster
18 *
19 * @param type Art der Nachricht (error = Fehler)
20 * @param text Zusatztext (z.B. Fehlertext)
21 */
22 public void showAlert(String type, String text) {
23 if (type == "error") {
24 AlertDialog.Builder msg = new AlertDialog.Builder(null);
25 msg.setMessage("Fehler\n\n" + text + "\nModul: " + super.toString())
26 .setPositiveButton("OK", null);
27 return;
28 }
29
30 if (type == "info") {
31 AlertDialog.Builder msg = new AlertDialog.Builder(null);
32 msg.setMessage("Information\n\n" + text + "\nModul: " + super.toString())
33 .setPositiveButton("OK", null);
34 return;
35 }
36 }
37
38 /**
39 * Wandelt einen String in eine Floatzahl um.
40 * Im Fehlerfall wird 0 zurückgegeben.
41 *
42 * @param preis Die umzuwandelnde Zahl.
43 * @return
44 */
45 public float StringToFloat(String preis) {
46 float preisF = 0F;
47
48 try {
49 preisF = Float.parseFloat(preis);
50 }
51 catch (NumberFormatException nfe) {
52 preisF = 0F;
53 }
54
55 return preisF;
56 }
57
58 /**
59 * Fügt einen neuen Benutzer hinzu, wenn dieser noch nicht vorhanden ist
60 * oder aktualisiert ihn, wenn er bereits vorhanden ist.
61 *
62 * @param db Datenbankinstanz
63 * @param bibo Bibliographiebezeichnung
64 * @param username Benutzername
65 * @param password Kennwort
66 * @return True, wenn der Schreibvorgang erfolgreich war. False wenn nicht.
67 */
68 public boolean setLogin(String biboname, String username, String password) {
69 SQLiteStatement stmt = null;
70 boolean erg = false;
71
72 try {
73 if (getUsername(biboname).length() == 0)
74 stmt = db.getWritableDatabase().compileStatement(BiboTbl.STMT_FULL_INSERT);
75 else
76 stmt = db.getWritableDatabase().compileStatement(BiboTbl.STMT_FULL_UPDATE);
77
78 stmt.bindString(1, biboname);
79 stmt.bindString(2, username);
80 stmt.bindString(3, password);
81
82 erg = stmt.executeInsert() != -1 ? true : false;
83 }
84 catch (Exception e) {
85 erg = false;
86 }
87 finally {
88 stmt.close();
89 }
90
91 return erg;
92 }
93
94 /**
95 * Gibt den Benutzernamen zurück, der zur angegebenen Bibliographiebezeichnung gehört.
96 *
97 * @param db Datenbankinstanz
98 * @param bibo Bibliographiebezeichnung
99 * @return Benutzername als String
100 */
101 public String getUsername(String biboname) {
102 Cursor cur = null;
103 String ergebnis = "";
104
105 try {
106 Hier ist der Cursor. Der ist Null und schmeißt eine NullPointerException
107 cur = db.getReadableDatabase().query(BiboTbl.TABLE_NAME,
108 new String[] {"username"},
109 "bibo = ",
110 new String[] {biboname},
111 null,
112 null,
113 null,
114 "1");
115
116 cur.moveToFirst();
117 ergebnis = cur.getString(0);
118 }
119 catch (Exception e) {
120 // TODO: handle exception
121 }
122 finally {
123 cur.close();
124 }
125
126 return ergebnis;
127 }
128
129 /**
130 * Gibt das Kennwort zurück, das zur angegebenen Bibliographiebezeichnung gehört.
131 *
132 * @param db Datenbankinstanz
133 * @param bibo Bibliographiebezeichnung
134 * @return Kennwort als String
135 */
136 public String getPassword(String biboname) {
137 Cursor cur = null;
138 String ergebnis = "";
139
140 try {
141 cur = db.getReadableDatabase().query(BiboTbl.TABLE_NAME,
142 new String[] {"password"},
143 "bibo = ",
144 new String[] {biboname},
145 null,
146 null,
147 null,
148 "1");
149 cur.moveToFirst();
150 ergebnis = cur.getString(0);
151 }
152 finally {
153 cur.close();
154 }
155
156 return ergebnis;
157 }
158
159 protected void finalize() {
160 if (db != null)
161 db.close();
162 }
163}
2
3import bonussphere.softlevel.de.DBConnect.BiboTbl;
4import android.app.Activity;
5import android.app.AlertDialog;
6import android.database.Cursor;
7import android.database.sqlite.SQLiteStatement;
8
9public class Tools extends Activity{
10 DBConnect db = null;
11
12 public Tools() {
13 db = new DBConnect(this);
14 }
15
16 /**
17 * Erzeugt ein Meldungsfenster
18 *
19 * @param type Art der Nachricht (error = Fehler)
20 * @param text Zusatztext (z.B. Fehlertext)
21 */
22 public void showAlert(String type, String text) {
23 if (type == "error") {
24 AlertDialog.Builder msg = new AlertDialog.Builder(null);
25 msg.setMessage("Fehler\n\n" + text + "\nModul: " + super.toString())
26 .setPositiveButton("OK", null);
27 return;
28 }
29
30 if (type == "info") {
31 AlertDialog.Builder msg = new AlertDialog.Builder(null);
32 msg.setMessage("Information\n\n" + text + "\nModul: " + super.toString())
33 .setPositiveButton("OK", null);
34 return;
35 }
36 }
37
38 /**
39 * Wandelt einen String in eine Floatzahl um.
40 * Im Fehlerfall wird 0 zurückgegeben.
41 *
42 * @param preis Die umzuwandelnde Zahl.
43 * @return
44 */
45 public float StringToFloat(String preis) {
46 float preisF = 0F;
47
48 try {
49 preisF = Float.parseFloat(preis);
50 }
51 catch (NumberFormatException nfe) {
52 preisF = 0F;
53 }
54
55 return preisF;
56 }
57
58 /**
59 * Fügt einen neuen Benutzer hinzu, wenn dieser noch nicht vorhanden ist
60 * oder aktualisiert ihn, wenn er bereits vorhanden ist.
61 *
62 * @param db Datenbankinstanz
63 * @param bibo Bibliographiebezeichnung
64 * @param username Benutzername
65 * @param password Kennwort
66 * @return True, wenn der Schreibvorgang erfolgreich war. False wenn nicht.
67 */
68 public boolean setLogin(String biboname, String username, String password) {
69 SQLiteStatement stmt = null;
70 boolean erg = false;
71
72 try {
73 if (getUsername(biboname).length() == 0)
74 stmt = db.getWritableDatabase().compileStatement(BiboTbl.STMT_FULL_INSERT);
75 else
76 stmt = db.getWritableDatabase().compileStatement(BiboTbl.STMT_FULL_UPDATE);
77
78 stmt.bindString(1, biboname);
79 stmt.bindString(2, username);
80 stmt.bindString(3, password);
81
82 erg = stmt.executeInsert() != -1 ? true : false;
83 }
84 catch (Exception e) {
85 erg = false;
86 }
87 finally {
88 stmt.close();
89 }
90
91 return erg;
92 }
93
94 /**
95 * Gibt den Benutzernamen zurück, der zur angegebenen Bibliographiebezeichnung gehört.
96 *
97 * @param db Datenbankinstanz
98 * @param bibo Bibliographiebezeichnung
99 * @return Benutzername als String
100 */
101 public String getUsername(String biboname) {
102 Cursor cur = null;
103 String ergebnis = "";
104
105 try {
106 Hier ist der Cursor. Der ist Null und schmeißt eine NullPointerException
107 cur = db.getReadableDatabase().query(BiboTbl.TABLE_NAME,
108 new String[] {"username"},
109 "bibo = ",
110 new String[] {biboname},
111 null,
112 null,
113 null,
114 "1");
115
116 cur.moveToFirst();
117 ergebnis = cur.getString(0);
118 }
119 catch (Exception e) {
120 // TODO: handle exception
121 }
122 finally {
123 cur.close();
124 }
125
126 return ergebnis;
127 }
128
129 /**
130 * Gibt das Kennwort zurück, das zur angegebenen Bibliographiebezeichnung gehört.
131 *
132 * @param db Datenbankinstanz
133 * @param bibo Bibliographiebezeichnung
134 * @return Kennwort als String
135 */
136 public String getPassword(String biboname) {
137 Cursor cur = null;
138 String ergebnis = "";
139
140 try {
141 cur = db.getReadableDatabase().query(BiboTbl.TABLE_NAME,
142 new String[] {"password"},
143 "bibo = ",
144 new String[] {biboname},
145 null,
146 null,
147 null,
148 "1");
149 cur.moveToFirst();
150 ergebnis = cur.getString(0);
151 }
152 finally {
153 cur.close();
154 }
155
156 return ergebnis;
157 }
158
159 protected void finalize() {
160 if (db != null)
161 db.close();
162 }
163}
DBConnect.java
1package bonussphere.softlevel.de;
2
3import android.content.Context;
4import android.database.sqlite.SQLiteDatabase;
5import android.database.sqlite.SQLiteOpenHelper;
6
7public class DBConnect extends SQLiteOpenHelper{
8
9 private static final String DATENBANK_NAME = "bonussphere.db";
10 private static final int DATENBANK_VERSION = 1;
11
12 /**
13 * Stellt die Datenbankverbindung her.
14 *
15 * @param context Besitzerklasse dieser Datenbankverbindung.
16 */
17 public DBConnect(Context context) {
18 super(context, DATENBANK_NAME, null, DATENBANK_VERSION);
19 }
20
21 @Override
22 public void onCreate(SQLiteDatabase db) {
23 db.execSQL(BiboTbl.SQL_CREATE);
24 }
25
26 @Override
27 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
28 db.execSQL("DROP TABLE IF EXISTS " + BiboTbl.TABLE_NAME);
29 onCreate(db);
30 }
31
32 public interface BiboTbl {
33 String ID = "_id";
34 String BIBO = "biboname";
35 String USERNAME = "username";
36 String PASSWORD = "password";
37 String TABLE_NAME = "bibologin";
38
39 String SQL_CREATE = "CREATE TABLE IF NOT EXISTS bibologin (" +
40 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
41 "biboname TEXT NOT NULL," +
42 "username TEXT NOT NULL," +
43 "password TEXT NOT NULL" +
44 ");";
45
46 String STMT_FULL_INSERT = "INSERT INTO bibo (biboname, username,ziel) VALUES (?, ?,?)";
47 String STMT_FULL_UPDATE = "UPDATE bibo SET biboname = ?, username = ?, password = ?)";
48 }
49}
2
3import android.content.Context;
4import android.database.sqlite.SQLiteDatabase;
5import android.database.sqlite.SQLiteOpenHelper;
6
7public class DBConnect extends SQLiteOpenHelper{
8
9 private static final String DATENBANK_NAME = "bonussphere.db";
10 private static final int DATENBANK_VERSION = 1;
11
12 /**
13 * Stellt die Datenbankverbindung her.
14 *
15 * @param context Besitzerklasse dieser Datenbankverbindung.
16 */
17 public DBConnect(Context context) {
18 super(context, DATENBANK_NAME, null, DATENBANK_VERSION);
19 }
20
21 @Override
22 public void onCreate(SQLiteDatabase db) {
23 db.execSQL(BiboTbl.SQL_CREATE);
24 }
25
26 @Override
27 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
28 db.execSQL("DROP TABLE IF EXISTS " + BiboTbl.TABLE_NAME);
29 onCreate(db);
30 }
31
32 public interface BiboTbl {
33 String ID = "_id";
34 String BIBO = "biboname";
35 String USERNAME = "username";
36 String PASSWORD = "password";
37 String TABLE_NAME = "bibologin";
38
39 String SQL_CREATE = "CREATE TABLE IF NOT EXISTS bibologin (" +
40 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
41 "biboname TEXT NOT NULL," +
42 "username TEXT NOT NULL," +
43 "password TEXT NOT NULL" +
44 ");";
45
46 String STMT_FULL_INSERT = "INSERT INTO bibo (biboname, username,ziel) VALUES (?, ?,?)";
47 String STMT_FULL_UPDATE = "UPDATE bibo SET biboname = ?, username = ?, password = ?)";
48 }
49}
Vielen Dank schonmal für alle Tipps.
Bye, Christian.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.