[JAVA] Comme je l'utilise souvent, je note les choses liées à DB sur Android.

introduction

Ceci est un mémo, alors n'ayez pas peur.

1. Héritage, constantes et génération de fichiers DB

Il y a quatre colonnes (axe horizontal): ID (généré automatiquement) `` `,` `` catégorie, `chapitre```,` `mot de passe. Le nom du fichier est `` `` ProjectList.db et le nom de la table est PROJECT_INFO```

SampleDatabaseHelper


public class SampleDatabaseHelper extends SQLiteOpenHelper {
    // Reference
    private static final String TAG = "SampleDatabaseHelper";
    //Nom de la table
    private static final String TABLE_PROJECT = "PROJECT_INFO";
    //colonne
    public static final String ID = "_id";
    public static final String CATEGORY = "category";
    public static final String CHAPTER = "chapter";
    public static final String PASSWORD = "password";

    //Toutes les colonnes
    private final String[] PROJECT_COLUMNS = { CATEGORY, CHAPTER, PASSWORD };
    
    //Texte de production SQlite
    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 + "`"
              + ")"
            + ");";

    //Définition du nom de fichier et du numéro de version
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_FILE_NAME = "ProjectList.db";

    //constructeur
    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) { }
}

[Référence] Commande de création de table SQLite

CREATE TABLE `PROJECT_INFO`(
`_id` INTEGER PRIMARY KEY AUTOINCREMENT,
`category` TEXT NOT NULL,
`chapter` TEXT NOT NULL,
`password`,
UNIQUE(`category`, `chapter`, `password`));

Nom de la table après CREATE TABLE ''. Dans () , séparez '', dans l'ordre de règle de type de colonne ''. Les règles incluent «PRIMARY KEY» qui spécifie la clé primaire, «AUTO INCREMENT» qui incrémente la valeur de 1 lorsqu'une ligne est ajoutée et «NOT NULL» qui ne doit pas être absolument vide. y a-t-il. De plus, la valeur de la colonne incluse dans «UNIQUE» ne peut pas être la même combinaison que les autres lignes.

2. Méthode d'enregistrement

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) {
                //Inscription réussie.
                return true;
            } else {
                //Échec de l'enregistrement. Dans de nombreux cas, la cause est que la condition UNIQUE est interceptée.
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }

3. Supprimer la ligne

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 est une instruction conditionnelle, qui explique comment écrire sqlite. Dans ce cas, il n'y a qu'un seul ? '', Mais même s'il y a plusieurs ? '', Le contenu de selectionArgs est appliqué à ``? '' Un par un.

4. Recherche de lignes

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;
    }

Notez le concept de curseurs. Ceux qui frappent la recherche alors qu'il y a beaucoup de colonnes sont marqués et extraits. Dans cet état, tout est marqué, mais en faisant `` c.moveToNext () '', le curseur se déplace uniquement vers le haut des ** extraits **. (Si vous le faites une fois de plus, ** parmi les extraits ** ira ensuite) Vous pouvez l'utiliser pour vous assurer que la valeur est à l'intérieur.

[Exemple] Rechercher des colonnes par ID

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;
    }

5. Mise à jour de la ligne

    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;
    }

Résumé

C'est juste un mémo, donc si vous me dites l'orthographe, je vais la corriger. J'ai écrit les spécifications de la méthode en tant que norme d'entreprise. Bien que ce soit japonais. Twitter: https://twitter.com/Cyber_Hacnosuke (Veuillez me suivre.) Github: https://github.com/CyberHacnoshuke

Recommended Posts

Comme je l'utilise souvent, je note les choses liées à DB sur Android.
[Java débutant] J'ai une compréhension un peu plus approfondie de "Il est temps d'utiliser le nouveau", alors prenez note
Notez les arguments de mot-clé Ruby
J'ai créé une application de calculatrice sur Android
Je voulais faire un diaporama du fond d'écran car l'image de l'écran de verrouillage de Windows 10 est magnifique
J'ai essayé d'exécuter une application d'accès à la base de données sur IKS + Db2 sur IBM Cloud (6. Préparation de l'application d'accès à la base de données (java))
clone de kintone? J'étais assez accro au lancement de l'extension OSS WebDB avec Lightsail + Docker, alors prenez-en note.
Je veux utiliser NetBeans sur Mac → Je peux l'utiliser!
J'ai lu le code lisible, alors prends note
[Android Studio] Je souhaite utiliser une bibliothèque Maven sur Android
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
Une note gênante lorsque vous essayez d'utiliser nginx avec des conteneurs distants de vscode
J'ai été inspiré par l'article destiné aux nouveaux arrivants, alors prenez-en note pour ne pas oublier votre intention initiale