Jump to content
Unity Insider Forum

SQLLite Rows in der Liste


Kuxii

Recommended Posts

Hey leute, Bastel mir Gerade für mein Hooby eine Art Digitalen Katalog, Die Daten Sätze werden in einer Sql daten Bank Gespeichrt,

Nun mochte ich immer eine Bestimmte anzahl an werten Ausgeben (Wie eine Art Liste) Wie bewekstelle ich das nun am einfachsten?

Hatte an immer 10 "Loks" Gedacht die Angezeigt werden und die anderen wenn man Scrollt, Wenn ich nun eh Schon dabei bin, Wie könnte ich am bessten einen

Bilder Updloader Bauen?^^

Screenshot_1.thumb.png.8eb003e47ed16d10281d6e42f015a19f.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die folgenden SQLs sollten in SQLite funktionieren, um Daten in 10-Schritten zu "fetchen".
(ODER BY usw. habe ich der weggelassen, dies müsstest du noch definieren., damit du immer eine fest definierte Reihenfolge bekommst z.b. ORDER BY rowid ASC)

Die ersten 10 Zeilen der Tabelle abfragen:

SELECT * FROM COMPANY LIMIT 10;

Die nächsten 10-20 Zeilen der Tabelle abfragen:

SELECT * FROM COMPANY LIMIT 10 OFFSET 10;

Die nächsten 20-30 Zeilen der Tabelle abfragen:

SELECT * FROM COMPANY LIMIT 10 OFFSET 20;

usw.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hey, ja das wäre auch eine Möglichkeit, ich dachte mir alles in eine liste und dann für das ui ein prefab das es dann nur "Spawnt".

[System.Serializable]
public class TrainData : System.Object
{
    public string DbBaureihe;
    public string DbFarbe;
    public int DbLokTyp;
    public int DbHersteller;
    public string DbKatalognummer;
    public string DbSeriennummer;
    public string DbKaufdatum;
    public string DbPreis;
    public string DbWartung;
    public string DbAdresse;
    public int DbProtokoll;
    public int DbFahrstufen;
    public string DbDecHersteller;
    public string DbDecID;
    public bool DbRauch;
    public bool DbSound;
    public bool DbROTWEISS;
    public bool DbBeleuchtung;
    public bool DbPandos;
    public bool DbTelex;
    public bool DbElekKupplung;
}

    public List<TrainData> Trains;
    public void GetTrainData()
    {
        SqliteConnection dbConnection = new SqliteConnection("Data Source = " + (Application.dataPath + "/" + "Databases" + "/" + DatabasesName));
        dbConnection.Open();
        try
        {
            SqliteCommand cmd = new SqliteCommand("SELECT * FROM Trains", dbConnection);
            SqliteDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    foreach(TrainData TrainData in Trains)
                    {
                        TrainData.DbBaureihe = reader.GetString(0);
                        TrainData.DbFarbe = reader.GetString(1);
                        TrainData.DbLokTyp = reader.GetInt16(2);
                    }
                }
            }
            reader.Close();
            reader = null;
        }
        catch (SqliteException ex)
        {
            Debug.LogError(ex);
            Debug.Log("Error reading DB");
        }
        dbConnection.Close();
        dbConnection = null;
        Debug.Log("Database reading Done.!");
    }

Aktuell Hatte ich versucht das Alles in eine Große Liste zu Packen, und diese werte dan auf UI-Texten wieder zu geben Er öffnet DB und alles Keine fehler, Jedoch Trägt er nichts in der Liste ein

Screenshot_1.thumb.png.ccdd75587b7a17133a62207526ffb380.png

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

So sollte es gehen:

public List<TrainData> Trains;
    public void GetTrainData()
    {
        Trains = new List<TrainData>(); // HAT GEFEHLT
        SqliteConnection dbConnection = new SqliteConnection("Data Source = " + (Application.dataPath + "/" + "Databases" + "/" + DatabasesName));
        dbConnection.Open();
        try
        {
            SqliteCommand cmd = new SqliteCommand("SELECT * FROM Trains", dbConnection);
            SqliteDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                  TrainData trainData = new TrainData();
                  trainData.DbBaureihe = reader.GetString(0);
                  trainData.DbFarbe = reader.GetString(1);
                  trainData.DbLokTyp = reader.GetInt16(2);
                  Trains.Add(trainData);
                }
            }
            reader.Close();
            reader = null;
        }
        catch (SqliteException ex)
        {
            Debug.LogError(ex);
            Debug.Log("Error reading DB");
        }
        dbConnection.Close();
        dbConnection = null;
        Debug.Log("Database reading Done.!");
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst natürlich auch die ganze Tabelle auf einmal in eine Liste laden (siehe oben) und dann diese Liste in der UI "zerteilen", dies macht man aber nur bei kleineren Datenmengen. Wenn man dann mal so 500000 Sätze in einer Tabelle, sollte man schrittweise "Fetchen", also siehe meine Lösung oben. Man läd dabei Daten aus einer Datenbank beispielsweise in 100er oder 1000er Schritten ... Man kann die beiden Varianten auch Mischen (also man fetched beispielsweise 1000 Zeilen aus der DB und zeigt in der UI in 10er Schritten an)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 35 Minuten schrieb Zer0Cool:

So sollte es gehen:


public List<TrainData> Trains;
    public void GetTrainData()
    {
        Trains = new List<TrainData>(); // HAT GEFEHLT
        SqliteConnection dbConnection = new SqliteConnection("Data Source = " + (Application.dataPath + "/" + "Databases" + "/" + DatabasesName));
        dbConnection.Open();
        try
        {
            SqliteCommand cmd = new SqliteCommand("SELECT * FROM Trains", dbConnection);
            SqliteDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                  TrainData trainData = new TrainData();
                  trainData.DbBaureihe = reader.GetString(0);
                  trainData.DbFarbe = reader.GetString(1);
                  trainData.DbLokTyp = reader.GetInt16(2);
                  Trains.Add(trainData);
                }
            }
            reader.Close();
            reader = null;
        }
        catch (SqliteException ex)
        {
            Debug.LogError(ex);
            Debug.Log("Error reading DB");
        }
        dbConnection.Close();
        dbConnection = null;
        Debug.Log("Database reading Done.!");
    }

 

So geht es leider auch nicht, Setzt die Liste auf 0 Einträge, mit meiner Lösung hatte ich mittlerweile schon alle daten drinn aber immer nur vom Letzten Eintrag :/

EDIT

 

Geht nun Fehler gefunden :P Gut nun noch das UI Basteln und schauen wie ich Die werte Hinzauber DANKE :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kann es nicht testen, habe deinen Code nicht, sollte aber so gehen wie ich es gepostet habe.

Die Liste wird gelöscht ja, so soll es ja auch sein und über die untere Schleife gefüllt.

An dieser Stelle werden die Daten eingelesen und in die Liste geschrieben:

                while (reader.Read())
                {
                  TrainData trainData = new TrainData();
                  trainData.DbBaureihe = reader.GetString(0);
                  trainData.DbFarbe = reader.GetString(1);
                  trainData.DbLokTyp = reader.GetInt16(2);
                  Trains.Add(trainData);
                  print("Daten hinzugefügt :" + trainData.DbBaureihe);
                  print("Daten hinzugefügt :" + trainData.DbFarbe);
                  print("Daten hinzugefügt :" + trainData.DbLokTyp);
                }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...