2025-07-21 18:36:09 +08:00
|
|
|
using System.Data;
|
2025-04-07 16:54:10 +08:00
|
|
|
using DualScreenDemo;
|
|
|
|
namespace DBObj
|
|
|
|
{
|
2025-07-28 16:22:24 +08:00
|
|
|
public class SQLManager
|
2025-04-07 16:54:10 +08:00
|
|
|
{
|
2025-08-01 16:37:33 +08:00
|
|
|
//private MyDB db = new MyDB();
|
2025-07-21 18:36:09 +08:00
|
|
|
public List<SongData> FavoriteSongs { get; private set; }
|
2025-04-23 11:46:55 +08:00
|
|
|
//public bool IsUserLoggedIn { get; set; }
|
|
|
|
//public string UserPhoneNumber { get; set; }
|
2025-07-28 16:22:24 +08:00
|
|
|
public SQLManager()
|
2025-04-07 16:54:10 +08:00
|
|
|
{
|
|
|
|
FavoriteSongs = new List<SongData>();
|
|
|
|
}
|
2025-04-22 15:25:58 +08:00
|
|
|
/*
|
2025-04-07 16:54:10 +08:00
|
|
|
public void AddNewUser(string phoneNumber)
|
|
|
|
{
|
2025-05-21 10:29:18 +08:00
|
|
|
|
2025-04-10 11:54:12 +08:00
|
|
|
string databasePath = Path.Combine(Application.StartupPath, "db", databaseFileName);
|
2025-04-07 16:54:10 +08:00
|
|
|
string connectionString = String.Format("Data Source={0};Version=3;", databasePath);
|
|
|
|
|
|
|
|
using (var connection = new SQLiteConnection(connectionString))
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
connection.Open();
|
|
|
|
|
|
|
|
|
|
|
|
string checkTableSql = "SELECT name FROM sqlite_master WHERE type='table' AND name='FavoriteSongs';";
|
|
|
|
using (var checkCommand = new SQLiteCommand(checkTableSql, connection))
|
|
|
|
{
|
|
|
|
var result = checkCommand.ExecuteScalar();
|
|
|
|
if (result == null)
|
|
|
|
{
|
|
|
|
throw new Exception("Table 'FavoriteSongs' does not exist.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
string sql = "INSERT INTO FavoriteSongs (PhoneNumber, SongNumber) VALUES (@PhoneNumber, @SongNumber)";
|
|
|
|
using (var command = new SQLiteCommand(sql, connection))
|
|
|
|
{
|
|
|
|
command.Parameters.AddWithValue("@PhoneNumber", phoneNumber);
|
|
|
|
command.Parameters.AddWithValue("@SongNumber", "000000");
|
|
|
|
command.ExecuteNonQuery();
|
|
|
|
}
|
|
|
|
connection.Close();
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
Console.WriteLine("Failed to add new user to SQLite database: " + ex.Message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2025-04-23 11:46:55 +08:00
|
|
|
*/
|
2025-07-28 16:22:24 +08:00
|
|
|
public List<SongData> SearchNewSongs()
|
|
|
|
{
|
2025-08-04 11:08:40 +08:00
|
|
|
string query = $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY add_date DESC LIMIT 1000;";
|
2025-07-28 16:22:24 +08:00
|
|
|
return select_Mysql(query);
|
2025-04-23 11:46:55 +08:00
|
|
|
}
|
2025-08-01 16:37:33 +08:00
|
|
|
public List<SongData> SearchHotSongs()
|
|
|
|
{
|
2025-08-04 11:08:40 +08:00
|
|
|
string query = $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY song_counts DESC LIMIT 1000;";
|
2025-07-28 16:22:24 +08:00
|
|
|
return select_Mysql(query);
|
2025-04-07 16:54:10 +08:00
|
|
|
}
|
|
|
|
public List<SongData> SearchSongsBySinger(string keyword)
|
|
|
|
{
|
2025-05-19 14:27:48 +08:00
|
|
|
Console.WriteLine("keyword : " + keyword);
|
2025-04-07 16:54:10 +08:00
|
|
|
var keywordLower = keyword.ToLower();
|
2025-05-28 11:04:03 +08:00
|
|
|
string query = $"SELECT * FROM song_library_cache WHERE artistA LIKE '%{keywordLower}%' OR artistB LIKE'%{keywordLower}%'ORDER BY song_counts DESC;";
|
2025-07-28 16:22:24 +08:00
|
|
|
return select_Mysql(query);
|
2025-04-07 16:54:10 +08:00
|
|
|
}
|
|
|
|
public List<SongData> SearchSongsByName(string keyword)
|
|
|
|
{
|
2025-08-08 18:00:47 +08:00
|
|
|
//string query = $"SELECT * FROM song_library_cache WHERE LOWER(song_name) LIKE CONCAT('%', LOWER('{keyword}'), '%') ORDER BY song_name DESC;";
|
|
|
|
string query = $"SELECT * FROM song_library_cache WHERE song_name LIKE '%{keyword}%' ORDER BY song_name DESC;";
|
2025-07-28 16:22:24 +08:00
|
|
|
return select_Mysql(query);
|
2025-08-01 16:37:33 +08:00
|
|
|
}
|
2025-04-07 16:54:10 +08:00
|
|
|
public SongData SearchSongByNumber(string songNumber)
|
|
|
|
{
|
2025-08-01 16:37:33 +08:00
|
|
|
List<SongData> searchResults = new List<SongData>();
|
2025-05-28 11:04:03 +08:00
|
|
|
string query = $"SELECT * FROM song_library_cache WHERE song_id = '{songNumber}';";
|
2025-08-01 16:37:33 +08:00
|
|
|
using (var db = new MyDB())
|
|
|
|
{
|
|
|
|
if (db.open(query, null))
|
|
|
|
{
|
|
|
|
if (db.recordCount() != 0)
|
|
|
|
{
|
|
|
|
searchResults.Add(newSongData( db ));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return searchResults.FirstOrDefault();
|
2025-04-07 16:54:10 +08:00
|
|
|
}
|
2025-08-01 16:37:33 +08:00
|
|
|
private List<SongData> select_Mysql(string query)
|
2025-07-21 18:36:09 +08:00
|
|
|
{
|
|
|
|
List<SongData> searchResults = new List<SongData>();
|
|
|
|
Console.WriteLine(query);
|
2025-07-28 16:22:24 +08:00
|
|
|
using (var db = new MyDB())
|
2025-07-21 18:36:09 +08:00
|
|
|
{
|
2025-08-01 16:37:33 +08:00
|
|
|
if (db.open(query, null))
|
|
|
|
{
|
2025-08-22 10:31:25 +08:00
|
|
|
while (!db.eof())
|
2025-08-01 16:37:33 +08:00
|
|
|
{
|
2025-08-22 10:31:25 +08:00
|
|
|
searchResults.Add(newSongData(db));
|
|
|
|
db.moveNext();
|
2025-07-28 16:22:24 +08:00
|
|
|
}
|
2025-07-21 18:36:09 +08:00
|
|
|
}
|
2025-08-01 16:37:33 +08:00
|
|
|
|
2025-07-21 18:36:09 +08:00
|
|
|
Console.WriteLine($"查詢到 {searchResults.Count} 筆資料。");
|
|
|
|
}
|
|
|
|
|
|
|
|
return searchResults;
|
|
|
|
}
|
2025-08-01 16:37:33 +08:00
|
|
|
private SongData newSongData(MyDB db) {
|
|
|
|
return new SongData(
|
|
|
|
db.Field<string>("song_id") ?? "",
|
|
|
|
db.Field<string>("song_name") ?? "",
|
|
|
|
db.Field<string>("artistA") ?? "",
|
|
|
|
db.Field<string>("artistB") ?? "",
|
|
|
|
db.Field<string>("song_filename") ?? "",
|
|
|
|
db.Field<string>("artistA_simplified") ?? "",
|
|
|
|
db.Field<string>("artistB_simplified") ?? "",
|
|
|
|
db.Field<string>("song_simplified")?? "",
|
2025-08-13 09:51:11 +08:00
|
|
|
db.Field<int>("vocal"),
|
|
|
|
db.Field<int>("db_change"),
|
|
|
|
db.Field<string>("situation")
|
2025-08-01 16:37:33 +08:00
|
|
|
);
|
|
|
|
}
|
2025-04-07 16:54:10 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|