<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      網易云音樂本地數據庫的歌單列表導出,一個不丟,支持1000首以上

      主要代碼,kotlin寫的

      package fuck
      
      import com.google.gson.Gson
      import java.io.File
      import java.sql.Connection
      import java.sql.DriverManager
      import java.sql.Statement
      
      fun main(args: Array<String>) {
          if (args.size < 2) {
              println("Usage: java -jar xxx.jar dbFilePath outputPath")
              return
          }
      
          val dbFilePath = args[0]
          val savePath = args[1]
      
          initDB(dbFilePath)
      
          getPlayLists()?.forEach { playLists ->
              getSonsByPid("${playLists.id}")?.forEach {
                  val fromJson = Gson().fromJson<JsonRootBean>(it, JsonRootBean::class.java)
                  var arts = ""
                  for (line in fromJson.artists) {
                      arts += line.name + ","
                  }
                  val path = "$savePath${playLists.name.replace("/", "-")}.txt"
                  File(savePath).mkdirs()
                  File(path).appendText(fromJson.name + " - " + arts + "\n")
              }
          }
      
          closeDB()
          println("導出完畢")
      }
      
      var c: Connection? = null
      var stmt: Statement? = null
      
      fun initDB(dbFilePath: String) {
          Class.forName("org.sqlite.JDBC")
          c = DriverManager.getConnection("jdbc:sqlite:$dbFilePath")
          stmt = c?.createStatement()
          println("Opened database successfully")
      }
      
      fun getPlayLists(): List<PlayListBean>? {
          val rs = stmt?.executeQuery("SELECT playlist FROM web_playlist;") ?: return null
      
          val pids = mutableListOf<PlayListBean>()
          while (rs.next()) {
              pids.add(Gson().fromJson(rs.getString(1), PlayListBean::class.java))
          }
          return pids
      }
      
      fun getSonsByPid(pid: String): List<String>? {
          val sql = "SELECT track from web_track WHERE tid in " +
                  "(SELECT tid from web_playlist_track WHERE pid = '$pid');"
          val songs = mutableListOf<String>()
          val rs = stmt?.executeQuery(sql) ?: return null
          while (rs.next()) {
              songs.add(rs.getString(1))
          }
          return songs
      }
      
      fun closeDB() {
          stmt?.close()
          c?.close()
      }

       

      倉庫地址

      https://github.com/xirtam-ch/NeteaseMusicDBExport

      posted @ 2020-03-25 09:41  帶狗狗帶  Views(1643)  Comments(2)    收藏  舉報
      主站蜘蛛池模板: 精品无码国产自产拍在线观看蜜| 平江县| 久久精品国产亚洲av热一区| 国内不卡不区二区三区| 久久综合九色综合97伊人| 亚洲精品区午夜亚洲精品区| 日韩精品三区二区三区| AV老司机AV天堂| 中文字幕天天躁日日躁狠狠躁免费| 狠狠色狠狠综合久久| 亚洲精品日韩在线丰满| 久久国产精品波多野结衣| 亚洲中文字幕无码专区| 国产啪视频免费观看视频| 亚洲区一区二区三区视频| 成熟了的熟妇毛茸茸| 亚洲精品入口一区二区乱| 亚洲欧美偷国产日韩| 牲欲强的熟妇农村老妇女视频| 国产午夜精品理论大片| 亚洲欧洲av人一区二区| 天堂在线最新版在线天堂| 成人亚洲av免费在线| 淮阳县| 久久这里都是精品一区| 久青草久青草视频在线观看| 免费国产一级特黄aa大片在线| 亚洲综合一区二区精品导航| 免费乱理伦片在线观看| 2019国产精品青青草原| 国产精品小一区二区三区| 午夜福利影院不卡影院| 久久99精品国产99久久6尤物| 国产免费高清69式视频在线观看 | 少妇真人直播免费视频| 中文文精品字幕一区二区| 国产乱妇乱子视频在播放| 五月天天天综合精品无码| 麻豆麻豆麻豆麻豆麻豆麻豆| 国产日韩精品欧美一区灰| 午夜夜福利一区二区三区|