日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySql+Socket 完成数据库的增查Demo

發(fā)布時(shí)間:2024/1/17 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql+Socket 完成数据库的增查Demo 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? ?需求: 利用MySql數(shù)據(jù)庫(kù)結(jié)合前端技術(shù)完成用戶的注冊(cè)(要求不使用Web服務(wù)技術(shù)),所以 Demo采用Socket技術(shù)實(shí)現(xiàn)Web通信.

第一部分:數(shù)據(jù)庫(kù)創(chuàng)建

數(shù)據(jù)庫(kù)采用mysql 5.7.18, 數(shù)據(jù)庫(kù)名稱為MyUser, 內(nèi)部有一張表 user.字段有 Id,UserName,Psd,Tel

?

第二部分:數(shù)據(jù)庫(kù)連接與Socket通信

創(chuàng)建控制臺(tái)程序(服務(wù)端程序),添加以下類

1 MySqlHelper

?建立MySqlHelper 類,用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作

public class MysqlHelper{//數(shù)據(jù)庫(kù)連接字符串 public static string Conn = "Database='Myuser';Data Source='localhost';User Id='root';Password='';charset='utf8'"; //XXX的為修改項(xiàng)public static void SetConn(string UserName = "root", string Password="", string IP= "localhost", string Database="Myuser"){Conn = "datasource=" + IP + ";username=" + UserName + ";password=" + Password + ";database=" + Database + ";charset=utf8";}/// <summary> /// 給定連接的數(shù)據(jù)庫(kù)用假設(shè)參數(shù)執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集) /// </summary> /// <param name="connectionString">一個(gè)有效的連接字符串</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>執(zhí)行命令所影響的行數(shù)</returns> public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){MySqlCommand cmd = new MySqlCommand();using (MySqlConnection conn = new MySqlConnection(connectionString)){PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;}}/// <summary> /// 用現(xiàn)有的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集) /// </summary> /// <param name="connection">一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>執(zhí)行命令所影響的行數(shù)</returns> public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){MySqlCommand cmd = new MySqlCommand();PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);int val = cmd.ExecuteNonQuery();//cmd.Parameters.Clear();return val;}/// <summary> ///使用現(xiàn)有的SQL事務(wù)執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集) /// </summary> /// <remarks> ///舉例: /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// </remarks> /// <param name="trans">一個(gè)現(xiàn)有的事務(wù)</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>執(zhí)行命令所影響的行數(shù)</returns> public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){MySqlCommand cmd = new MySqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;}/// <summary> /// 用執(zhí)行的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)返回?cái)?shù)據(jù)集的sql命令 /// </summary> /// <remarks> /// 舉例: /// MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// </remarks> /// <param name="connectionString">一個(gè)有效的連接字符串</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>包含結(jié)果的讀取器</returns> public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){//創(chuàng)建一個(gè)MySqlCommand對(duì)象 MySqlCommand cmd = new MySqlCommand();//創(chuàng)建一個(gè)MySqlConnection對(duì)象 MySqlConnection conn = new MySqlConnection(connectionString);//在這里我們用一個(gè)try/catch結(jié)構(gòu)執(zhí)行sql文本命令/存儲(chǔ)過(guò)程,因?yàn)槿绻@個(gè)方法產(chǎn)生一個(gè)異常我們要關(guān)閉連接,因?yàn)闆](méi)有讀取器存在, //因此commandBehaviour.CloseConnection 就不會(huì)執(zhí)行 try{//調(diào)用 PrepareCommand 方法,對(duì) MySqlCommand 對(duì)象設(shè)置參數(shù) PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);//調(diào)用 MySqlCommand 的 ExecuteReader 方法 MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);//清除參數(shù) cmd.Parameters.Clear();return reader;}catch{//關(guān)閉連接,拋出異常 conn.Close();throw;}}/// <summary> /// 返回DataSet /// </summary> /// <param name="connectionString">一個(gè)有效的連接字符串</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns></returns> public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){//創(chuàng)建一個(gè)MySqlCommand對(duì)象 MySqlCommand cmd = new MySqlCommand();//創(chuàng)建一個(gè)MySqlConnection對(duì)象 MySqlConnection conn = new MySqlConnection(connectionString);//在這里我們用一個(gè)try/catch結(jié)構(gòu)執(zhí)行sql文本命令/存儲(chǔ)過(guò)程,因?yàn)槿绻@個(gè)方法產(chǎn)生一個(gè)異常我們要關(guān)閉連接,因?yàn)闆](méi)有讀取器存在,try{//調(diào)用 PrepareCommand 方法,對(duì) MySqlCommand 對(duì)象設(shè)置參數(shù) PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);//調(diào)用 MySqlCommand 的 ExecuteReader 方法 MySqlDataAdapter adapter = new MySqlDataAdapter();adapter.SelectCommand = cmd;DataSet ds = new DataSet();adapter.Fill(ds);//清除參數(shù) cmd.Parameters.Clear();conn.Close();return ds;}catch (Exception e){throw e;}}public static DataTable GetDataTable(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){//創(chuàng)建一個(gè)MySqlCommand對(duì)象 MySqlCommand cmd = new MySqlCommand();//創(chuàng)建一個(gè)MySqlConnection對(duì)象 MySqlConnection conn = new MySqlConnection(connectionString);//在這里我們用一個(gè)try/catch結(jié)構(gòu)執(zhí)行sql文本命令/存儲(chǔ)過(guò)程,因?yàn)槿绻@個(gè)方法產(chǎn)生一個(gè)異常我們要關(guān)閉連接,因?yàn)闆](méi)有讀取器存在,try{//調(diào)用 PrepareCommand 方法,對(duì) MySqlCommand 對(duì)象設(shè)置參數(shù) PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);//調(diào)用 MySqlCommand 的 ExecuteReader 方法 MySqlDataAdapter adapter = new MySqlDataAdapter();adapter.SelectCommand = cmd;DataTable ds = new DataTable();adapter.Fill(ds);//清除參數(shù) cmd.Parameters.Clear();conn.Close();return ds;}catch (Exception e){throw e;}}/// <summary> /// 用指定的數(shù)據(jù)庫(kù)連接字符串執(zhí)行一個(gè)命令并返回一個(gè)數(shù)據(jù)集的第一列 /// </summary> /// <remarks> ///例如: /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// </remarks> ///<param name="connectionString">一個(gè)有效的連接字符串</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>用 Convert.To{Type}把類型轉(zhuǎn)換為想要的 </returns> public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){MySqlCommand cmd = new MySqlCommand();using (MySqlConnection connection = new MySqlConnection(connectionString)){PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;}}/// <summary> /// 用指定的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)命令并返回一個(gè)數(shù)據(jù)集的第一列 /// </summary> /// <remarks> /// 例如: /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// </remarks> /// <param name="connection">一個(gè)存在的數(shù)據(jù)庫(kù)連接</param> /// <param name="cmdType">命令類型(存儲(chǔ)過(guò)程, 文本, 等等)</param> /// <param name="cmdText">存儲(chǔ)過(guò)程名稱或者sql命令語(yǔ)句</param> /// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param> /// <returns>用 Convert.To{Type}把類型轉(zhuǎn)換為想要的 </returns> public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters){MySqlCommand cmd = new MySqlCommand();PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;}/// <summary> /// 準(zhǔn)備執(zhí)行一個(gè)命令 /// </summary> /// <param name="cmd">sql命令</param> /// <param name="conn">OleDb連接</param> /// <param name="trans">OleDb事務(wù)</param> /// <param name="cmdType">命令類型例如 存儲(chǔ)過(guò)程或者文本</param> /// <param name="cmdText">命令文本,例如:Select * from Products</param> /// <param name="cmdParms">執(zhí)行命令的參數(shù)</param> private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms){if (conn.State != ConnectionState.Open)conn.Open();cmd.Connection = conn;cmd.CommandText = cmdText;if (trans != null)cmd.Transaction = trans;cmd.CommandType = cmdType;if (cmdParms != null){foreach (MySqlParameter parm in cmdParms)cmd.Parameters.Add(parm);}}}

  

2,User類與UserHelper類

建立用戶類User與用戶操作類UserHelper

User

public class User{public int Id { get; set; }public string UserName { get; set; }public string Psd { get; set; }public string PhoneNum { get; set; }}

  

UserHelper

public class UserHelper{/// <summary>/// 獲取用戶列表/// </summary>/// <param name="cmdText"></param>/// <returns></returns>public static List<User> GetUsers(){var cmdText = "select * from Users";var data = MysqlHelper.GetDataSet(MysqlHelper.Conn, System.Data.CommandType.Text, cmdText, new MySql.Data.MySqlClient.MySqlParameter());List<User> userList = new List<User>();foreach (DataRow row in data.Tables[0].Rows){User user = new User();user.Id = int.Parse(row[0].ToString());user.UserName=(row[1].ToString());user.Psd=(row[2].ToString());user.PhoneNum=(row[3].ToString());userList.Add(user);}return userList;}/// <summary>/// 根據(jù)姓名查找用戶/// </summary>/// <param name="name"></param>/// <returns></returns>public static User GetUserByName(string name){var cmdText = "select * from Users Where UserName=?name";var pars = new MySql.Data.MySqlClient.MySqlParameter("?name", name);var data = MysqlHelper.GetDataSet(MysqlHelper.Conn, System.Data.CommandType.Text, cmdText, pars);User user = new User();if (data.Tables.Count == 0){return null;}if (data.Tables[0].Rows.Count != 1){return null;}foreach (DataRow row in data.Tables[0].Rows){ user.Id = int.Parse(row[0].ToString());user.UserName = (row[1].ToString());user.Psd = (row[2].ToString());user.PhoneNum = (row[3].ToString());;}return user;}/// <summary>/// 添加用戶/// </summary>/// <param name="user"></param>/// <returns></returns>public static bool AddUser(User user){var sqlInsert = "insert into Users(UserName,Psd,Tel) values" +"('" + user.UserName + "','" + user.Psd + "','" + user.PhoneNum + "')"; var parms = new MySqlParameter();var data = MysqlHelper.ExecuteNonQuery(MysqlHelper.Conn, System.Data.CommandType.Text, sqlInsert, parms);return data>0;}}

  

3 Socket

網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket.socket本質(zhì)是編程接口(API),對(duì)TCP/IP的封裝,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開(kāi)發(fā)所用的接口,這就是Socket編程接口;

利用Socket技術(shù),可以捕捉Http請(qǐng)求,獲取數(shù)據(jù).構(gòu)建SocketHelper類,獲取前端頁(yè)面請(qǐng)求.默認(rèn)Socket 端口為8086

public class SocketHelper{static Socket m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);/// <summary>/// Socket初始化 /// </summary>public static bool Init(){try{m_socket.Bind(new IPEndPoint(IPAddress.Any, 8086));m_socket.Listen(100);m_socket.BeginAccept(new AsyncCallback(OnAccept), m_socket);Console.WriteLine("開(kāi)啟Socket服務(wù)成功!!");Console.Read();return true;}catch (Exception ){Console.WriteLine("開(kāi)啟Socket服務(wù)失敗!!,請(qǐng)檢查網(wǎng)絡(luò),端口8086是否被占用!!!");Console.Read();return false;}}public static void Route(string path, Dictionary<string, string> param, Socket response){if (param.Count == 1){try{var userName = param["userName"];var searUser = UserHelper.GetUserByName(userName);if (searUser != null){HomePage(response, "該用戶名已經(jīng)被占用!!");Console.WriteLine("** - **");Console.WriteLine("用戶名" + userName + "被占用");Console.WriteLine("");HomePage(response, "no");}else{HomePage(response, "ok");}}catch (Exception e){HomePage(response, e.Message);Console.WriteLine("** - **");Console.WriteLine("發(fā)生錯(cuò)誤,錯(cuò)誤原因?yàn)?#34; + e.Message);Console.WriteLine("");}return;}else if (param.Count == 3) {try{User user = new User();user.UserName = param["userName"];user.Psd = param["psd"];user.PhoneNum = param["phoneNum"];var isSuccess = UserHelper.AddUser(user);if (isSuccess){HomePage(response, "ok");Console.WriteLine("** - **");Console.WriteLine("用戶名為" + user.UserName + "已添加到數(shù)據(jù)庫(kù)!!");Console.WriteLine("");}else{HomePage(response, "no");Console.WriteLine("** - **");Console.WriteLine("用戶名為" + user.UserName + "添加到數(shù)據(jù)庫(kù)失敗!!");Console.WriteLine("");}}catch (Exception e){HomePage(response, e.Message);Console.WriteLine("** - **");Console.WriteLine("發(fā)生錯(cuò)誤,錯(cuò)誤原因?yàn)?#34; + e.Message);Console.WriteLine("");}}else{HomePage(response, "參數(shù)錯(cuò)誤!!");Console.WriteLine("** - **");Console.WriteLine("參數(shù)錯(cuò)誤" );Console.WriteLine("");}return;}public static void OnAccept(IAsyncResult ar){try{Socket socket = ar.AsyncState as Socket;Socket new_client = socket.EndAccept(ar);socket.BeginAccept(new AsyncCallback(OnAccept), socket);byte[] recv_buffer = new byte[1024 * 640];int real_recv = new_client.Receive(recv_buffer);string recv_request = Encoding.UTF8.GetString(recv_buffer, 0, real_recv);Console.WriteLine(recv_request);Resolve(recv_request, new_client);}catch{}}public static void Resolve(string request, Socket response){string[] strs = request.Split(new string[] { "\r\n" }, StringSplitOptions.None);if (strs.Length > 0){string[] items = strs[0].Split(' ');Dictionary<string, string> param = new Dictionary<string, string>();if (strs.Contains("")){string post_data = strs[strs.Length - 1];if (post_data != ""){string[] post_datas = post_data.Split('&');foreach (string s in post_datas){param.Add(s.Split('=')[0], s.Split('=')[1]);}}}Route(items[1], param, response);}}public static void HomePage(Socket response,string result){string statusline = "HTTP/1.1 200 OK\r\n";byte[] statusline_to_bytes = Encoding.UTF8.GetBytes(statusline);string content = result;byte[] content_to_bytes = Encoding.UTF8.GetBytes(content);string header = string.Format("Access-Control-Allow-Origin:*\r\nContent-Type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n", content_to_bytes.Length);byte[] header_to_bytes = Encoding.UTF8.GetBytes(header);response.Send(statusline_to_bytes);response.Send(header_to_bytes);response.Send(new byte[] { (byte)'\r', (byte)'\n' });response.Send(content_to_bytes);response.Close();}}

  

第三部分 前端頁(yè)面與Ajax請(qǐng)求

?前端頁(yè)面設(shè)計(jì)為:

ajax請(qǐng)求代碼:

$('.red_button').click(function () {if (user_Boolean && password_Boolean && varconfirm_Boolean && Mobile_Boolean == true) {$.ajax({type: 'POST',url: 'http://127.0.0.1:8086/',data: {'userName':$('#userName').val(),'psd': $('#psd').val(),'phoneNum': $('#phoneNum').val()},success: function (data) {if (data == "ok") {alert("注冊(cè)成功!!")} else {alert("data");}}});} else {alert("請(qǐng)完善信息");} });

?

至此,程序完成.運(yùn)行程序進(jìn)行驗(yàn)證.

1:啟動(dòng)服務(wù)端程序

?

?

2:啟動(dòng)前端頁(yè)面,進(jìn)行數(shù)據(jù)填寫(xiě)

3 添加結(jié)果

?

? ? 至此 ,Demo功能完成。之前沒(méi)有試過(guò)利用Socket技術(shù)完成Ajax請(qǐng)求,這次也算是一次嘗試,偶爾看到這個(gè)程序,以防以后需要 做個(gè)筆記..

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/hlx-blogs/p/9575190.html

總結(jié)

以上是生活随笔為你收集整理的MySql+Socket 完成数据库的增查Demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。