Dies ist ein Memo, also hab keine Angst.
Es gibt vier Spalten (horizontale Achse): `ID (automatisch generiert)`
, Kategorie```,
Kapitel```,
Passwort```. Der Dateiname lautet
ProjectList.db``` und der Tabellenname lautet
`` PROJECT_INFO```
SampleDatabaseHelper
public class SampleDatabaseHelper extends SQLiteOpenHelper {
// Reference
private static final String TAG = "SampleDatabaseHelper";
//Tabellenname
private static final String TABLE_PROJECT = "PROJECT_INFO";
//Säule
public static final String ID = "_id";
public static final String CATEGORY = "category";
public static final String CHAPTER = "chapter";
public static final String PASSWORD = "password";
//Alle Spalten
private final String[] PROJECT_COLUMNS = { CATEGORY, CHAPTER, PASSWORD };
//SQlite-Produktionstext
private static final String SQL_CREATE_TABLE_PROJECT = "CREATE TABLE "
+ "`" + TABLE_PROJECT + "` ("
+ "`" + ID + "` INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "`" + CATEGORY + "` TEXT NOT NULL,"
+ "`" + CHAPTER + "` TEXT NOT NULL,"
+ "`" + PASSWORD + "`,"
+ "UNIQUE("
+ "`" + CATEGORY + "`,"
+ "`" + CHAPTER + "`,"
+ "`" + PASSWORD + "`"
+ ")"
+ ");";
//Definition des Dateinamens und der Versionsnummer
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_FILE_NAME = "ProjectList.db";
//Konstrukteur
public SampleDatabaseHelper (Context context) {
super(context, DATABASE_FILE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate (SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(SQL_CREATE_TABLE_PROJECT);
}
@Override
public void onUpgrade (SQLiteDatabase sqLiteDatabase, int i, int i1) { }
}
CREATE TABLE `PROJECT_INFO`(
`_id` INTEGER PRIMARY KEY AUTOINCREMENT,
`category` TEXT NOT NULL,
`chapter` TEXT NOT NULL,
`password`,
UNIQUE(`category`, `chapter`, `password`));
Tabellenname nach CREATE TABLE
. In ()
trennen Sie ,
in der Reihenfolge `Spaltentypregel`
. Zu den Regeln gehören "PRIMARY KEY", der den Primärschlüssel "AUTOINCREMENT" angibt, der beim Hinzufügen einer Zeile automatisch den Wert um 1 generiert, und "NOT NULL", der nicht absolut leer sein darf. Gibt es. Außerdem können die Werte von Spalten, die in "EINZIGARTIG" eingeschlossen sind, nicht dieselbe Kombination wie andere Zeilen sein.
SampleDatabaseHelper
public boolean addProject(final String category, final String chapter, final String password) {
try{
SQLiteDatabase db = getReadableDatabase();
final ContentValues values = new ContentValues(3);
values.put(CATEGORY,category);
values.put(CHAPTER,chapter);
values.put(PASSWORD,password);
long rowID = db.insert(TABLE_PROJECT,null,values);
if (rowID >= 0) {
//Erfolgreiche Registrierung.
return true;
} else {
//Registrierung fehlgeschlagen. In vielen Fällen liegt die Ursache darin, dass der Zustand von UNIQUE abgefangen wird.
return false;
}
} catch (Exception e) {
return false;
}
}
SampleDatabaseHelper
public int deleteProject(String id){
String selection = ID + " = ?";
String[] selectionArgs = { id };
try {
SQLiteDatabase db = getWritableDatabase();
int deletedId = db.delete(TABLE_PROJECT, selection, selectionArgs);
return deletedId;
} catch (Exception e) {}
}
selection
ist eine bedingte Anweisung, mit der SQLite geschrieben wird. In diesem Fall gibt es nur ein ?
, Aber selbst wenn es mehrere ?
Gibt, wird der Inhalt von selectionArgs
nacheinander auf ?
Angewendet.
SampleDatabaseHelper
public List<String[]> getProjectColumns(String category){
String selection = CATEGORY + " = ?";
String[] selectionArgs = { category };
Cursor c = null;
try {
SQLiteDatabase db = getReadableDatabase();
c = db.query(TABLE_PROJECT, PROJECT_COLUMNS, selection, selectionArgs, null, null, null);
List<String[]> list = new ArrayList<>();
while (c.moveToNext()) {
String[] ret = { c.getString(0), c.getString(1), c.getString(2) };
list.add(ret);
}
return list;
}catch (Exception e) {
} finally {
if (c != null) {
try { c.close(); } catch (Exception ex) {}
}
}
return null;
}
Beachten Sie das Konzept der Cursor. Diejenigen, die die Suche treffen, während es viele Spalten gibt, werden markiert und extrahiert. In diesem Zustand ist alles markiert, aber wenn Sie `c.moveToNext ()`
ausführen, bewegt sich der Cursor nur zum obersten der ** extrahierten **. (Wenn Sie es noch einmal tun, wird ** unter den extrahierten ** als nächstes angezeigt.) Sie können dies verwenden, um sicherzustellen, dass der Wert darin enthalten ist.
SampleDatabaseHelper
public String[] getProjectColumns(String id) {
String selection = ID + " = ?";
String[] selectionArgs = { id };
Cursor c = null;
try {
SQLiteDatabase db = getReadableDatabase();
c = db.query(TABLE_PROJECT,PROJECT_COLUMNS, selection, selectionArgs, null, null, null);
if (c.moveToNext()) {
String[] ret = {c.getString(0),c.getString(1),c.getString(2)};
return ret;
}
} catch (Exception e) {
} finally {
if (c != null) {
try { c.close(); } catch (Exception ex) {}
}
}
return null;
}
public boolean updateColumns(String id, String newCategory, String newChapter, String newPassword){
String selection = ID + " = ?";
String[] selectionArgs = { id };
try {
SQLiteDatabase db = getReadableDatabase();
final ContentValues updateValues = new ContentValues(3);
updateValues.put(CATEGORY,newCategory);
updateValues.put(CHAPTER,newChapter);
updateValues.put(PASSWORD,newPassword);
db.update(DATABASE_PROJECT_NAME, updateValues, selection, selectionArgs);
return true;
}catch (Exception e) {
return false;
}
return false;
}
Es ist nur ein Memo. Wenn Sie mir also die Schreibweise sagen, werde ich es korrigieren. Ich habe die Methodenspezifikationen als Unternehmensstandard geschrieben. Obwohl es japanisch ist. Twitter: https://twitter.com/Cyber_Hacnosuke (Bitte folgen Sie mir.) Github: https://github.com/CyberHacnoshuke
Recommended Posts