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] + "\');"