当前位置: 首页 > 编程日记 > 正文

c#操作oracle的通用类

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using DDTek.Oracle;
using System.Configuration;
namespace Common
{

<summary>
/// OracleHelper 的摘要说明。
/// </summary>
public class OracleHelper
{
protected OracleConnection Connection;
private string connectionString;
public OracleHelper()
{
string connStr;
connStr = System.Configuration.ConfigurationSettings.AppSettings["connStr"].ToString();
connectionString = connStr;
Connection = new OracleConnection(connectionString);
}

#region 带参数的构造函数
/**/
/// <summary>
/// 带参数的构造函数
/// </summary>
/// <param name="ConnString">数据库联接字符串</param>
public OracleHelper(string ConnString)
{
string connStr;
connStr = System.Configuration.ConfigurationSettings.AppSettings[ConnString].ToString();
Connection = new OracleConnection(connStr);
}
#endregion

#region 打开数据库
/**/
/// <summary>
/// 打开数据库
/// </summary>
public void OpenConn()
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
}
#endregion

#region 关闭数据库联接
/**/
/// <summary>
/// 关闭数据库联接
/// </summary>
public void CloseConn()
{
if (Connection.State == ConnectionState.Open)
Connection.Close();
}
#endregion

#region 执行SQL语句,返回数据到DataSet中
/**/
/// <summary>
/// 执行SQL语句,返回数据到DataSet中
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="DataSetName">自定义返回的DataSet表名</param>
/// <returns>返回DataSet</returns>
public DataSet ReturnDataSet(string sql, string DataSetName)
{
DataSet dataSet = new DataSet();
OpenConn();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, Connection);
OraDA.Fill(dataSet, DataSetName);
//CloseConn();
return dataSet;
}
#endregion

#region 执行Sql语句,返回带分页功能的dataset
/**/
/// <summary>
/// 执行Sql语句,返回带分页功能的dataset
/// </summary>
/// <param name="sql">Sql语句</param>
/// <param name="PageSize">每页显示记录数</param>
/// <param name="CurrPageIndex"><当前页/param>
/// <param name="DataSetName">返回dataset表名</param>
/// <returns>返回DataSet</returns>
public DataSet ReturnDataSet(string sql, int PageSize, int CurrPageIndex, string DataSetName)
{
DataSet dataSet = new DataSet();
OpenConn();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, Connection);
OraDA.Fill(dataSet, PageSize * (CurrPageIndex - 1), PageSize, DataSetName);
//CloseConn();
return dataSet;
}
#endregion

#region 执行SQL语句,返回 DataReader,用之前一定要先.read()打开,然后才能读到数据
/**/
/// <summary>
/// 执行SQL语句,返回 DataReader,用之前一定要先.read()打开,然后才能读到数据
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns>返回一个OracleDataReader</returns>
public OracleDataReader ReturnDataReader(String sql)
{
OpenConn();
OracleCommand command = new OracleCommand(sql, Connection);
return command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
#endregion

#region 执行SQL语句,返回记录总数数
/**/
/// <summary>
/// 执行SQL语句,返回记录总数数
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns>返回记录总条数</returns>
public int GetRecordCount(string sql)
{
int recordCount = 0;
OpenConn();
OracleCommand command = new OracleCommand(sql, Connection);
OracleDataReader dataReader = command.ExecuteReader();
while (dataReader.Read())
{
recordCount++;
}
dataReader.Close();
//CloseConn();
return recordCount;
}
#endregion

#region 取当前序列,条件为seq.nextval或seq.currval
/**/
/// <summary>
/// 取当前序列
/// </summary>
/// <param name="seqstr"></param>
/// <param name="table"></param>
/// <returns></returns>
public decimal GetSeq(string seqstr)
{
decimal seqnum = 0;
string sql = "select " + seqstr + " from dual";
OpenConn();
OracleCommand command = new OracleCommand(sql, Connection);
OracleDataReader dataReader = command.ExecuteReader();
if (dataReader.Read())
{
seqnum = decimal.Parse(dataReader[0].ToString());
}
dataReader.Close();
// CloseConn();
return seqnum;
}
#endregion

#region 执行SQL语句,返回所影响的行数
/**/
/// <summary>
/// 执行SQL语句,返回所影响的行数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecuteSQL(string sql)
{
int Cmd = 0;
OpenConn();
OracleCommand command = new OracleCommand(sql, Connection);
try
{
Cmd = command.ExecuteNonQuery();
}
catch
{

}
finally
{
// CloseConn();
}

return Cmd;
}
#endregion

// ===========================================
// ==用hashTable对数据库进行insert,update,del操作,注意此时只能用默认的数据库连接"connstr"==
// ============================================

#region 根据表名及哈稀表自动插入数据库 用法:Insert("test",ht)
public int Insert(string TableName, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleDbType otype;
int size = 0;
int i = 0;

while (et.MoveNext()) // 作哈希表循环
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":" + et.Key.ToString(), otype, size, et.Value.ToString());
Parms[i] = op; // 添加SqlParameter对象
i = i + 1;
}
string str_Sql = GetInsertSqlbyHt(TableName, ht); // 获得插入sql语句
int val = ExecuteNonQuery(str_Sql, Parms);
return val;
}
#endregion

#region 根据相关条件对数据库进行更新操作 用法:Update("test","Id=:Id",ht);

public int Update(string TableName, string ht_Where, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleDbType otype;
int size = 0;
int i = 0;
// 作哈希表循环
while (et.MoveNext())
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":" + et.Key.ToString(), otype, size, et.Value.ToString());
Parms[i] = op; // 添加SqlParameter对象
i = i + 1;
}
string str_Sql = GetUpdateSqlbyHt(TableName, ht_Where, ht); // 获得插入sql语句
int val = ExecuteNonQuery(str_Sql, Parms);
return val;
}

public int Update(string TableName, string ht_Where, Hashtable ht,OracleConnection oraConn)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleDbType otype;
int size = 0;
int i = 0;
// 作哈希表循环
while (et.MoveNext())
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":" + et.Key.ToString(), otype, size, et.Value.ToString());
Parms[i] = op; // 添加SqlParameter对象
i = i + 1;
}
string str_Sql = GetUpdateSqlbyHt(TableName, ht_Where, ht); // 获得插入sql语句
int val = ExecuteNonQuery(str_Sql, oraConn, Parms);
return val;
}

#endregion

#region del操作,注意此处条件个数与hash里参数个数应该一致 用法:Del("test","Id=:Id",ht)
public int Del(string TableName, string ht_Where, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleDbType otype;
int i = 0;
int size = 0;
// 作哈希表循环
while (et.MoveNext())
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":" + et.Key.ToString(), et.Value.ToString());
Parms[i] = op; // 添加SqlParameter对象
i = i + 1;
}
string str_Sql = GetDelSqlbyHt(TableName, ht_Where, ht); // 获得删除sql语句
int val = ExecuteNonQuery(str_Sql, Parms);
return val;
}
#endregion

// ===========================================
// ========上面三个操作的内部调用函数==================
// ===========================================

#region 根据哈稀表及表名自动生成相应insert语句(参数类型的)
/**/
/// <summary>
/// 根据哈稀表及表名自动生成相应insert语句
/// </summary>
/// <param name="TableName">要插入的表名</param>
/// <param name="ht">哈稀表</param>
/// <returns>返回sql语句</returns>
public static string GetInsertSqlbyHt(string TableName, Hashtable ht)
{
string str_Sql = "";
int i = 0;
int ht_Count = ht.Count; // 哈希表个数
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
string before = "";
string behide = "";
while (myEnumerator.MoveNext())
{
if (i == 0)
{
before = "(" + myEnumerator.Key;
}
else if (i + 1 == ht_Count)
{
before = before + "," + myEnumerator.Key + ")";
}
else
{
before = before + "," + myEnumerator.Key;
}
i = i + 1;
}
behide = " Values" + before.Replace(",", ",:").Replace("(", "(:");
str_Sql = "Insert into " + TableName + before + behide;
return str_Sql;
}
#endregion

#region 根据表名,where条件,哈稀表自动生成更新语句(参数类型的)
public static string GetUpdateSqlbyHt(string Table, string ht_Where, Hashtable ht)
{
string str_Sql = "";
int i = 0;
int ht_Count = ht.Count; // 哈希表个数
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while (myEnumerator.MoveNext())
{
if (i == 0)
{
if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key + "=:" + myEnumerator.Key).ToLower()) == -1)
{
str_Sql = myEnumerator.Key + "=:" + myEnumerator.Key;
}
}
else
{
if (ht_Where.ToString().ToLower().IndexOf((":" + myEnumerator.Key + " ").ToLower()) == -1)
{
str_Sql = str_Sql + "," + myEnumerator.Key + "=:" + myEnumerator.Key;
}

}
i = i + 1;
}
if (ht_Where == null || ht_Where.Replace(" ", "") == "") // 更新时候没有条件
{
str_Sql = "update " + Table + " set " + str_Sql;
}
else
{
str_Sql = "update " + Table + " set " + str_Sql + " where " + ht_Where;
}
str_Sql = str_Sql.Replace("set ,", "set ").Replace("update ,", "update ");
return str_Sql;
}
#endregion

#region 根据表名,where条件,哈稀表自动生成del语句(参数类型的)
public static string GetDelSqlbyHt(string Table, string ht_Where, Hashtable ht)
{
string str_Sql = "";
int i = 0;

int ht_Count = ht.Count; // 哈希表个数
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while (myEnumerator.MoveNext())
{
if (i == 0)
{
if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key + "=:" + myEnumerator.Key).ToLower()) == -1)
{
str_Sql = myEnumerator.Key + "=:" + myEnumerator.Key;
}
}
else
{
if (ht_Where.ToString().ToLower().IndexOf((":" + myEnumerator.Key + " ").ToLower()) == -1)
{
str_Sql = str_Sql + "," + myEnumerator.Key + "=:" + myEnumerator.Key;
}
}
i = i + 1;
}
if (ht_Where == null || ht_Where.Replace(" ", "") == "") // 更新时候没有条件
{
str_Sql = "Delete " + Table;
}
else
{
str_Sql = "Delete " + Table + " where " + ht_Where;
}
return str_Sql;
}
#endregion

#region 生成oracle参数
/**/
/// <summary>
/// 生成oracle参数
/// </summary>
/// <param name="ParamName">字段名</param>
/// <param name="otype">数据类型</param>
/// <param name="size">数据大小</param>
/// <param name="Value">值</param>
/// <returns></returns>
public static OracleParameter MakeParam(string ParamName, OracleDbType otype, int size, Object Value)
{
OracleParameter para = new OracleParameter(ParamName, Value);
para.OracleDbType = otype;
para.Size = size;
return para;
}
#endregion

#region 生成oracle参数
public static OracleParameter MakeParam(string ParamName, string Value)
{
return new OracleParameter(ParamName, Value);
}
#endregion

#region 根据表结构字段的类型和长度拼装oracle sql语句参数
public static void GetoType(string key, DataTable dt, out OracleDbType otype, out int size)
{

DataView dv = dt.DefaultView;
dv.RowFilter = "column_name='" + key + "'";
string fType = dv[0]["data_type"].ToString().ToUpper();
switch (fType)
{
case "DATE":
otype = OracleDbType.Timestamp;
size = int.Parse(dv[0]["data_length"].ToString());
break;
case "CHAR":
otype = OracleDbType.Char;
size = int.Parse(dv[0]["data_length"].ToString());
break;
case "LONG":
otype = OracleDbType.Double;
size = int.Parse(dv[0]["data_length"].ToString());
break;
case "NVARCHAR2":
otype = OracleDbType.NVarChar;
size = int.Parse(dv[0]["data_length"].ToString());
break;
case "VARCHAR2":
otype = OracleDbType.NVarChar;
size = int.Parse(dv[0]["data_length"].ToString());
break;
default:
otype = OracleDbType.NVarChar;
size = 100;
break;
}
}
#endregion

#region 动态 取表里字段的类型和长度,此处没有动态用到connstr,是默认的!by/文少
public System.Data.DataTable GetTabType(string tabnale)
{
string sql = "select column_name,data_type,data_length from all_tab_columns where table_name='" + tabnale.ToUpper() + "'";
OpenConn();
return (ReturnDataSet(sql, "dv")).Tables[0];
}
#endregion

#region 执行sql语句
public int ExecuteNonQuery(string cmdText, params OracleParameter[] cmdParms)
{
OracleCommand cmd = new OracleCommand();
OpenConn();
cmd.Connection = Connection;
cmd.CommandText = cmdText;
if (cmdParms != null)
{
foreach (OracleParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
// conn.CloseConn();
return val;
}

public int ExecuteNonQuery(string cmdText, OracleConnection oraConn, params OracleParameter[] cmdParms)
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = oraConn;
cmd.CommandText = cmdText;
if (cmdParms != null)
{
foreach (OracleParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
// conn.CloseConn();
return val;
}
#endregion

// ========================================
// =========内部调用函数完=======================
// ========================================
}


}

转载于:https://www.cnblogs.com/zcm123/p/5283712.html

相关文章:

react es6+ 代码优化之路-1

这里集合了一些代码优化的小技巧 在初步接触 es6 和 react 的时候总结的一些让代码跟加简化和可读性更高的写法大部分知识点是自己在平时项目中还不知道总结的&#xff0c;一致的很多优化的点没有写出来&#xff0c;逐步增加中,目的是使用最少的代码&#xff0c;高效的解决问题…

反向ajax实现

英文原文&#xff1a; Reverse Ajax, Part 1: Introduction to Comet在过去的几年中&#xff0c;web开发已经发生了很大的变化。现如今&#xff0c;我们期望的是能够通过web快速、动态地访问应用。在这一新的文章系列中&#xff0c;我们学习如何使用反向Ajax&#xff08;Revers…

ef关联多实体查询_Mybatis基本知识十二:关联关系查询之延迟加载:侵入式延迟加载...

上一篇文章&#xff1a;《Mybatis基本知识十一&#xff1a;关联关系查询之延迟加载策略&#xff1a;直接加载》若文中有纰漏,请多多指正&#xff01;&#xff01;&#xff01;1.前言延续上一章节&#xff0c;本章节主要讲解和演示在关联关系查询中侵入式延迟加载是怎么回事。与…

Java高危漏洞被再度利用 可攻击最新版本服务器

2019独角兽企业重金招聘Python工程师标准>>> 安全研究人员警告称&#xff0c;甲骨文在2013年发布的一个关键 Java 漏洞更新是无效的&#xff0c;黑客可以轻松绕过。这使得此Java高危漏洞可以被再度利用&#xff0c;击运行最新版本 Java 的个人计算机及服务器。甲骨文…

不断演进的 Chrome 安全标识

文 / Chrome Security 产品经理 Emily Schechter 此前&#xff0c;我们曾发布一项提议&#xff0c;建议将所有 HTTP 网页标记为确定 “不安全” 并移除 HTTPS 网页的安全标识。自从我们在 Chrome 中引入安全标识以来&#xff0c;网络上的 HTTPS 使用量迅速增加。今年晚些时候&a…

gcc -E 选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.例子用法:gcc -E hello.c > pianoapan.txtgcc -E hello.c | more慢慢看吧,一个hello word 也要与处理成800行的代码 -E选项&#xff0c;表示让gcc只进行“预处理”就行了。 所谓的预处理&#xff0c;就是…

剑指offer青蛙跳台阶问题

&#xff08;1&#xff09;一只青蛙一次可以跳上 1 级台阶&#xff0c;也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。//递归方式 public static int f(int n) { //参数合法性验证 if (n < 1) { System.out.println("参数必须大于1&#xff01;&quo…

mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...

专注于Java领域优质技术号&#xff0c;欢迎关注作者&#xff1a;李长念一、前言这个问题是今天朋友提出来的&#xff0c;关于查询一个1200w的数据表的总行数&#xff0c;用count(*)的速度一直提不上去。找了很多优化方案&#xff0c;最后另辟蹊径&#xff0c;选择了用explain来…

使用mysql内连接查询年龄_Mysql的连表查询

若一个查询同时涉及到两个以上的表&#xff0c;称为连表查询准备表create table department(id int auto_increment PRIMARY KEY,name varchar(20));departmentcreate table employee(id int primary key auto_increment,name varchar(20),sex enum(male,female) not null defa…

FastDFS安装与使用

安装注意要修改&#xff1a;/etc/fdfs/client.confvim /etc/fdfs/client.confbase_path/home/yuqing/fastdfs 修改为&#xff1a; base_path/home/fastdfstracker_server192.168.209.121:22122 修改为&#xff1a; tracker_server10.201.20.237:22122##include http.conf 修改…

angular组合preact

preact 大小3kb&#xff0c;可以当做angular的一个dom库&#xff0c;而且可以对接使用preact生态系统&#xff0c;react组件修改成preact还是蛮简单的&#xff0c;这样就可以解决angular中用render2操作dom的繁琐问题了!O(∩_∩)O哈哈~&#xff0c;异想天开&#xff0c;动工! t…

大型网站系统架构系列:分布式消息队列(二)

四、JMS消息服务 讲消息队列就不得不提JMS 。JMS&#xff08;JAVA Message Service,java消息服务&#xff09;API是一个消息服务的标准/规范&#xff0c;允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低&#xff0c;消息服务更加可靠以及…

Linux环境编译安装Mysql以及PHP中文乱码解决

mysql安装 5.6以后可能会收费&#xff0c;所以选择5.1以下从台湾中山大学镜像下载1.首先要安装C编译环境 # yum install gcc-c2.下载解压# wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz # tar zxvf mysql-5.1.73.tar.gz # cd mysql-5.1.7…

mysql noinstall_windows mysql noinstall

最近在想做mysql 主,从备份.在一台windows下安装多个mysql server , 发现用安装版的会覆盖前一安装程序,所以就用noinstall版本的mysql server,在此记录下安装过程的步骤.可主,从备份最终没能跑起来........这只是其中方法之一而已windows 下安装mysql-noinstall so easy!!!步骤…

[十九]JavaIO之PipedReader 和 PipedWriter

功能简介还记得PipedInputStream 和 PipedOutputStream么 我们之前是这么说的: 使用管道通信时&#xff0c;必须将PipedOutputStream和PipedInputStream配套使用 大致流程&#xff1a; 我们在线程A中向PipedOutputStream中写入数据&#xff0c;这些数据会自动的发送到与PipedO…

Linux环境HBase安装与使用

原文出自本人另一个Linux博客 http://blog.csdn.net/unix21/article/details/18776073 Linux环境&#xff1a;CentOS6.5 HBase版本&#xff1a;hbase-0.94.16 HBase官网&#xff1a;http://hbase.apache.org 1.下载解压安装文件 # wget http://mirror.bit.edu.cn/apache/hbase/…

Oracle定时执行存储过程

首先查看SQL> show parameter job NAME TYPE VALUE------------------------------------ ----------- ------------------------------job_queue_processes integer 10如果值是 0 需要修改&#xff08;如果为…

mysql8.0取消授权_mysql8创建用户、删除用户、授权、取消授权

注意&#xff0c;以下命令均在数据库mysql中操作use mysql;mysql有密码设置规范,这里修改仅密码长度为4位,仅本次登录有效set global validate_password.policy0;set global validate_password.length4;创建用户格式CREATE USER usernamehost IDENTIFIED WITH mysql_native_pas…

Azure编配器简化有状态无服务器工作流的创建

Azure Durable Functions旨在通过引入编排器function概念来定义更复杂的工作流&#xff0c;以此来扩展无服务器计算范式。如果你曾经想过要使用它们&#xff0c;微软刚刚发布了一个示例&#xff0c;帮助开发人员开始他们的无服务器计算和编排器function之旅。\\Azure Functions…

ZooKeeper集群环境安装与配置

原文&#xff1a;出自本人的Linux博客http://blog.csdn.net/unix21/ ZooKeeper版本&#xff1a;3.4.5 约定&#xff1a;3台虚拟机 前提&#xff1a;需要安装JDK&#xff0c;关于Linux环境JDK安装配置参考我的另一帖Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序ZooKe…

thinkphp5 mysql长连接_tp5(thinkPHP5)框架连接数据库的方法示例

本文实例讲述了thinkPHP5框架连接数据库的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、配置文件目录 tp5applicationdatabase.php通过配置文件来连接。。也可以通过方法链接在控制器里方法链接数据库 &#xff1b;查询时写法 和使用系统的DB类方法略有差异/…

学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

Linux Shell脚本教程&#xff1a;30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/转载于:https://www.cnblogs.com/pegasus923/p/5304025.html

tomcat的startup.bat闪退问题解决

从官网下载一个免安装的tomcat&#xff0c;我把它解压在E盘&#xff0c;配置了环境变量&#xff1a;CATALINA_HOME、CATALINA_BASE、TOMCAT_HOME 为 tomcat的解压路径 进入解压tomcat的bin目录&#xff0c;执行startup.bat&#xff0c;出现闪退。 然后winR 输入cmd 进入解压tom…

使用Netbeans创建java Web项目

&#xfeff;&#xfeff;使用Netbeans创建java Web项目需要先搭建JDK参考&#xff1a; Java开发环境的搭建以及使用eclipse创建项目 Linux环境安装卸载JDK1.安装Tomcat 去官网下载最新的Tomcat:http://tomcat.apache.org/ 目前最新的windows环境的Tomcat是 http://mirrors.hus…

Linux内核设计第五周学习总结 分析system_call中断处理过程

陈巧然原创作品 转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000使用gdb跟踪分析一个系统调用中断处理过程&#xff0c;分析系统调用从system_call开始到iret结束之间的整个过程。 实验过程&#xff1a; 登陆实验楼虚拟机http://w…

mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件

database - 如何在MySQL中收缩/清除ibdata1文件我在localhost中使用MySQL作为在R中执行统计的“查询工具”&#xff0c;也就是说&#xff0c;每次运行R脚本时&#xff0c;我创建一个新数据库(A)&#xff0c;创建一个新表(B)&#xff0c;将数据导入B &#xff0c;提交查询以获得…

MySQL学习----各种字符的长度总结

数字型 类型大小范围&#xff08;有符号&#xff09;范围&#xff08;无符号&#xff09;用途TINYINT1 字节(-128&#xff0c;127)(0&#xff0c;255)小整数值SMALLINT2 字节(-32 768&#xff0c;32 767)(0&#xff0c;65 535)大整数值MEDIUMINT3 字节(-8 388 608&#xff0c;8…

分布式消息队列Kafka集群安装

kafka是LinkedIn开发并开源的一个分布式MQ系统&#xff0c;现在是Apache的一个孵化项目。在它的主页描述kafka为一个高吞吐量的分布式&#xff08;能将消息分散到不同的节点上&#xff09;MQ。在这片博文中&#xff0c;作者简单提到了开发kafka而不选择已有MQ系统的原因。两个原…

[na]pc加入域认证细节

这也是以前好奇,因为学生时候,经常机房上网, 对一些譬如.. 现在看来很low了. 是小作坊式的技术, 真正上不了台面的.扛不住生产的压力. ftp共享计算机统一管理等无盘/网克等特别好奇 计算机组织的两种形式 加入办公网络里有200多台pc,如果各个独立的上网互不干扰. 这种也挺方便,…

react 树形菜单_关于React 使用antd组件递归实现左侧菜单导航树(MenusTree)的示例...

一、菜单组件Demo这里本人采用的是蚂蚁金服(antd)组件库里的{Menu}组件写的一个左侧菜单树的小Demo(整套开发环境是ReactReduxwebpack)import React from react;import { Menu, Icon } from antd;import {WeaScroll} from ecCom;import {bindActionCreators} from redux;import…