将netflix数据导入到mysql

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Text.RegularExpressions;

using MySql.Data.MySqlClient;



namespace DataFromAnywhereToMysql

{

    class Program

    {

        private string ConnStr;

        private MySqlConnection Conn;

        private string Forder;

        public void SetConnStr(string str)

        {

            ConnStr = str;

            //"Database=testcsharp;Data Source=localhost;port=3306;User Id=root;Password=jilichuan;charset=utf8";

        }

        private void SetConn(string s)

        {

            Conn = new MySqlConnection(s);

        }

        public void Init(string connstr,string ForderString)

        {

            SetConnStr(connstr);

            SetConn(ConnStr);

            SetForder(ForderString);

            

        }

        public void SetForder(string str)

        {

            Forder = str;

        }

        public void excute()

        {

            Conn.Open();

            MySqlCommand Comm = new MySqlCommand();

            Comm.Connection = Conn;

            Comm.CommandText = "create table traindata(rateID int not null auto_increment primary key,movieID int, userID int,rate int,rateTime date)";

            Comm.ExecuteNonQuery();

            string[] Files = Directory.GetFiles(Forder);

            int FilesCount = Files.Length;

            for (int i = 0; i < FilesCount; i++)

            {

                FileStream FStream = new FileStream(Files[i], FileMode.Open, FileAccess.Read);

                StreamReader sr = new StreamReader(FStream);

                string record = sr.ReadLine();

                string[] movieID = Regex.Split(record, ":");

                while (record != null)

                {

                    record = sr.ReadLine();

                    if (record == null)

                        break;

                    string[] s = Regex.Split(record, ",");

                    Comm.CommandText = "INSERT traindata(movieID,userID,rate,rateTime) values (" + movieID[0] + "," + s[0] + "," + s[1] + ",\'" + s[2] + "\');";

                    Comm.ExecuteNonQuery();

                }

            }





 

        }

        static void Main(string[] args)

        {

            Program a = new Program();



           a.Init("Database=testcsharp;Data Source=localhost;port=3306;User Id=root;Password=jilichuan;charset=utf8",@"E:\快盘\Datasets\nf_prize_dataset\download\training_set\training_set");

           a.excute();



        }



    }

}

刚才把netflix的数据倒进了数据库,遇到一些编程问题,总结在这里

1,关于C#的文件操作

    IO可分为两种,Reader和Stream,不论java和C#都是这样,Reader是对字符进行操作,Stream是对字节流进行操作。

    本文代码中先由文件路径生成FileStream,就是形成文件字节流,但是字节流只能读字节,很不方便,所以又转化为StreamReader,这个类可以由Stream类型的对象生成。现在我就是用StreamReader对字符进行操作。

2,关于C#使用MySQL

    我是从http://cdn.mysql.com/Downloads/Connector-Net/mysql-connector-net-5.0.8.1-noinstall.zip#mirrors  里面下载mysql-connector-net-5.0.8.1-noinstall.zip,解压后把其中的MySql.Data.dll放到工程文件,然后在工程里把它引用进来。

 后面对MySql的操作都是用这个文件的API来的,它里面有docs,可以参考。

3,获取文件夹下的所有文件

   using system.IO.Text;

   string[] Files = Directory.GetFiles(Forder);

4,mysql操作

   对于建表

   "create table traindata(rateID int not null auto_increment primary key,movieID int, userID int,rate int,rateTime date)"

    类型写在名字后面,主键是primary key。

    插入操作:

    "INSERT traindata(movieID,userID,rate,rateTime) values (" + movieID[0] + "," + s[0] + "," + s[1] + ",\'" + s[2] + "\');"

你可能感兴趣的:(Netflix)