-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQLiteDAO.cs
More file actions
343 lines (296 loc) · 14.2 KB
/
Copy pathSQLiteDAO.cs
File metadata and controls
343 lines (296 loc) · 14.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
using Google.Protobuf.Collections;
//using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Mysqlx.Expect.Open.Types.Condition.Types;
using static System.Net.Mime.MediaTypeNames;
using static System.Runtime.InteropServices.JavaScript.JSType;
using String = System.String;
namespace MusicWebPlayer
{
internal class SQLiteDAO
{
private string _connectionString = "Data Source=rolemimusic.db; Version=3;";
public SQLiteDAO(string connectionString)
{
_connectionString = connectionString;
}
public SQLiteConnection CreateConnection()
{
SQLiteConnection sqlite_conn;
// Create a new database connection:
sqlite_conn = new SQLiteConnection("Data Source=rolemimusic.db; Version=3; New = True; Compress = True; ");
// Open the connection:
try
{
sqlite_conn.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return sqlite_conn;
}
public int CreateTables(SQLiteConnection sql_conn)
{
// Create ALBUMS table
/*
CREATE TABLE IF NOT EXISTS ALBUMS (
rowid INTEGER PRIMARY KEY,
ALBUM_TITLE TEXT NOT NULL,
ARTIST TEXT NOT NULL,
YEAR INTEGER NOT NULL,
IMAGE_NAME TEXT NOT NULL,
DESCRIPTION TEXT NOT NULL,
URL TEXT NOT NULL
);
*/
SQLiteCommand sqlite_cmd;
string sqlCreateALBUMSStmt = "PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS ALBUMS (rowid INTEGER PRIMARY KEY, ALBUM_TITLE TEXT NOT NULL UNIQUE, ARTIST TEXT NOT NULL, YEAR INTEGER NOT NULL, IMAGE_NAME TEXT NOT NULL, DESCRIPTION TEXT NOT NULL, URL TEXT NOT NULL)";
sqlite_cmd = sql_conn.CreateCommand();
//sql_conn.Open();
sqlite_cmd.CommandText = sqlCreateALBUMSStmt;
sqlite_cmd.ExecuteNonQuery();
// Create TRACKS table
/*
CREATE TABLE IF NOT EXISTS TRACKS (
rowid INTEGER PRIMARY KEY,
track_title TEXT DEFAULT NULL,
number INTEGER DEFAULT NULL,
video_url TEXT DEFAULT NULL,
lyrics TEXT,
albums_ID INTEGER NOT NULL,
FOREIGN KEY (albums_ID) REFERENCES ALBUMS(rowid)
);
*/
string sqlCreateTRACKSStmt = "PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS TRACKS(rowid INTEGER PRIMARY KEY, track_title TEXT DEFAULT NULL, number TEXT DEFAULT NULL, video_url TEXT DEFAULT NULL, lyrics TEXT, albums_ID INTEGER NOT NULL, FOREIGN KEY (albums_ID) REFERENCES ALBUMS(rowid))";
sqlite_cmd.CommandText = sqlCreateTRACKSStmt;
int returnCode = sqlite_cmd.ExecuteNonQuery();
sql_conn.Close();
return returnCode;
}
public int InsertAlbumData(SQLiteConnection sql_conn, Album newAlbm)
{
SQLiteCommand sqlite_cmd;
sqlite_cmd = sql_conn.CreateCommand();
sql_conn.Open();
sqlite_cmd.CommandText = "INSERT INTO ALBUMS(ALBUM_TITLE, ARTIST, YEAR, IMAGE_NAME, DESCRIPTION, URL) " +
"VALUES (@Title, @Artist, @Year, @ImageURL, @Description, @VideoUrl) ON CONFLICT(ALBUM_TITLE) DO NOTHING";
sqlite_cmd.Parameters.AddWithValue("@Title", newAlbm.SongName);
sqlite_cmd.Parameters.AddWithValue("@Artist", newAlbm.ArtistName);
sqlite_cmd.Parameters.AddWithValue("@Year", newAlbm.ReleaseYear);
sqlite_cmd.Parameters.AddWithValue("@ImageURL", newAlbm.ImageURL);
sqlite_cmd.Parameters.AddWithValue("@Description", newAlbm.Description);
sqlite_cmd.Parameters.AddWithValue("@VideoUrl", newAlbm.PlayURL);
int returnCode = sqlite_cmd.ExecuteNonQuery();
sql_conn.Close() ;
return returnCode;
}
public int InsertSingleAlbum(SQLiteConnection sql_conn, Album album)
{
int insertStatus = 0;
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
string query = "INSERT INTO ALBUMS (ALBUM_TITLE, ARTIST, YEAR, IMAGE_NAME, DESCRIPTION, URL) " +
"VALUES (@Title, @Artist, @Year, @ImageURL, @Description, @VideoUrl) ON CONFLICT(ALBUM_TITLE) DO NOTHING";
using (SQLiteCommand cmd = new SQLiteCommand(query, conn))
{
// Use parameterized queries to safely insert values
cmd.Parameters.AddWithValue("@Title", album.SongName);
cmd.Parameters.AddWithValue("@Artist", album.ArtistName);
cmd.Parameters.AddWithValue("@Year", album.ReleaseYear);
cmd.Parameters.AddWithValue("@ImageURL", album.ImageURL);
cmd.Parameters.AddWithValue("@Description", album.Description);
cmd.Parameters.AddWithValue("@VideoUrl", album.PlayURL);
insertStatus = cmd.ExecuteNonQuery();
}
}
return insertStatus;
}
public int InsertTrackData(SQLiteConnection sql_conn, Track newTr)
{
SQLiteCommand sqlite_cmd;
sqlite_cmd = sql_conn.CreateCommand();
sqlite_cmd.CommandText = "INSERT INTO TRACKS(track_title, number, video_url, lyrics, albums_ID) " +
"VALUES (@TrackName, @TrackNumber, @VideoURL, @Lyrics, @AlbumID)";
sqlite_cmd.Parameters.AddWithValue("@TrackName", newTr.Name);
sqlite_cmd.Parameters.AddWithValue("@TrackNumber", newTr.Number);
sqlite_cmd.Parameters.AddWithValue("@VideoURL", newTr.VideoURL);
sqlite_cmd.Parameters.AddWithValue("@Lyrics", newTr.Lyrics);
sqlite_cmd.Parameters.AddWithValue("@AlbumID", newTr.Albums_ID);
int returnCode = sqlite_cmd.ExecuteNonQuery();
sql_conn.Close() ;
return returnCode;
}
public List<Album> GetAlbumsData()
{
// start with an empty list
List<Album> albums = new List<Album>();
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
string sqlCmdStmt = "SELECT rowid, ALBUM_TITLE, ARTIST, YEAR, IMAGE_NAME, DESCRIPTION, URL FROM ALBUMS";
using (SQLiteCommand cmd = new SQLiteCommand(sqlCmdStmt, conn))
{
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Album album = new Album
{
ID = reader.GetInt32(reader.GetOrdinal("rowid")),
SongName = reader.GetString(reader.GetOrdinal("ALBUM_TITLE")),
ArtistName = reader.GetString(reader.GetOrdinal("ARTIST")),
ReleaseYear = reader.GetInt32(reader.GetOrdinal("YEAR")),
ImageURL = reader.GetString(reader.GetOrdinal("IMAGE_NAME")),
Description = reader.GetString(reader.GetOrdinal("DESCRIPTION")),
PlayURL = reader.GetString(reader.GetOrdinal("URL"))
};
albums.Add(album);
}
}
}
}
return albums;
}
public Album GetAlbumByID(int albumID)
{
Album album = new Album();
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
string sqlCmdStmt = "SELECT rowid, ALBUM_TITLE, ARTIST, YEAR, IMAGE_NAME, DESCRIPTION, URL FROM ALBUMS WHERE rowid = @ALBUMID";
SQLiteCommand cmd = new SQLiteCommand();
cmd.Parameters.AddWithValue("@ALBUMID", albumID);
cmd.CommandText = sqlCmdStmt;
cmd.Connection = conn;
{
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
album.ID = reader.GetInt32(reader.GetOrdinal("rowid"));
album.SongName = reader.GetString(reader.GetOrdinal("ALBUM_TITLE"));
album.ArtistName = reader.GetString(reader.GetOrdinal("ARTIST"));
album.ReleaseYear = reader.GetInt32(reader.GetOrdinal("YEAR"));
album.ImageURL = reader.GetString(reader.GetOrdinal("IMAGE_NAME"));
album.Description = reader.GetString(reader.GetOrdinal("DESCRIPTION"));
album.PlayURL = reader.GetString(reader.GetOrdinal("URL"));
}
}
}
conn.Close();
}
return album;
}
public List<Album> SearchAlbumTitles(String SearchText)
{
// start with an empty list
List<Album> albums = new List<Album>();
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
string sqlCmdStmt = "SELECT rowid, ALBUM_TITLE, ARTIST, YEAR, IMAGE_NAME, DESCRIPTION, URL FROM ALBUMS WHERE ALBUM_TITLE LIKE @searchPatern";
SQLiteCommand cmd = new SQLiteCommand();
cmd.Parameters.AddWithValue("@searchPatern", "%" + SearchText + "%");
cmd.CommandText = sqlCmdStmt;
cmd.Connection = conn;
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Album album = new Album
{
ID = reader.GetInt32(reader.GetOrdinal("rowid")),
SongName = reader.GetString(reader.GetOrdinal("ALBUM_TITLE")),
ArtistName = reader.GetString(reader.GetOrdinal("ARTIST")),
ReleaseYear = reader.GetInt32(reader.GetOrdinal("YEAR")),
ImageURL = reader.GetString(reader.GetOrdinal("IMAGE_NAME")),
Description = reader.GetString(reader.GetOrdinal("DESCRIPTION")),
PlayURL = reader.GetString(reader.GetOrdinal("URL"))
};
albums.Add(album);
}
}
}
return albums;
}
public String getAlbumDescription(string searchAlbumID)
{
String returnDescription = "";
// connect to the SQLite server
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
String sqlCmdStmnt = "SELECT DESCRIPTION FROM ALBUMS WHERE rowid = @searchtext";
SQLiteCommand cmd = new SQLiteCommand(sqlCmdStmnt, conn);
cmd.Parameters.AddWithValue("@searchtext", searchAlbumID);
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
returnDescription = reader.GetString(0).ToString();
}
}
conn.Close();
return returnDescription;
}
}
public String getTrackDescription(string searchTrackNum)
{
String returnDescription = "";
// connect to the SQLite server
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
String sqlCmdStmnt = "SELECT Lyrics FROM TRACKS WHERE Number = @searchtext";
SQLiteCommand cmd = new SQLiteCommand(sqlCmdStmnt, conn);
cmd.Parameters.AddWithValue("@searchtext", searchTrackNum);
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
returnDescription = reader.GetString(0).ToString();
}
}
conn.Close();
return returnDescription;
}
}
public List<Track> getTracksByAlbumID(string albumID)
{
// start with an empty list
List<Track> tracks = new List<Track>();
using (SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
string sqlCmdStmt = "SELECT rowid, track_title, number, video_url, lyrics, albums_ID FROM TRACKS WHERE albums_ID = @albumid";
SQLiteCommand cmd = new SQLiteCommand();
cmd.Parameters.AddWithValue("@albumid", albumID);
cmd.CommandText = sqlCmdStmt;
cmd.Connection = conn;
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Track track = new Track
{
//Number = reader.GetInt32(reader.GetOrdinal("rowid")),
Name = reader.GetString(reader.GetOrdinal("track_title")),
Number = reader.GetString(reader.GetOrdinal("number")),
VideoURL = reader.GetString(reader.GetOrdinal("video_url")),
Lyrics = reader.GetString(reader.GetOrdinal("lyrics")),
Albums_ID = reader.GetInt32(reader.GetOrdinal("albums_ID"))
};
tracks.Add(track);
}
}
}
return tracks;
}
}
}