1.导入Oracle.ManagedDataAccess.dll
在Assets目录下创建文件夹Plugins,将Oracle.ManagedDataAccess.dll文件放入Plugins文件夹。Oracle.ManagedDataAccess.dll下载:
链接:https://pan.baidu.com/s/1MQtZPyo9A2tupOldri6VMg?pwd=38na
提取码:38na
2.连接Oracle
2.1创建连接使用的命令字符串
private string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=你的IP)(PORT=1521))" + "(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=system; Password=密码;";
具体根据自己的Oracle进行修改
2.2连接Oracle
OracleConnection connection;
connection = new OracleConnection(connectionString);
try
{
connection.Open(); //打开数据库
Debug.Log("Oracle连接成功");
}
catch (OracleException ex)
{
Debug.LogError("Oracle Error: " + ex.Message);
}
连接成功后,会在Console窗口显示出“Oracle连接成功”
3.读取数据
3.1编辑读取指令
string sql = "select * from 表名";
3.2执行命令
OracleCommand cmd = new OracleCommand(sql,connection);
OracleDataReader dr = null;
try
{
dr = cmd.ExecuteReader();
while (reader. Read())
{
string columnValue = reader.GetString(reader.GetOrdinal("ColumnName"));
Debug.Log("Column Value: " + columnValue);
}
}
catch (OracleException e)
{
Debug.Log(e);
}
4.写入数据
我写入的是点云数据,列为:x,y,z,r,g,b,类型均为NUMBER类型
void InsertData(OracleConnection connection,float x1,float y1,float z1,float r1,float g1,float b1)
{
string sql = "insert into pointcloud_3(x,y,z,r,g,b) values(:x1,:y1,:z1,:r1,:g1,:b1)";
using (OracleCommand command = new OracleCommand(sql, connection))
{
command.Parameters.Add(":x1", OracleDbType.Decimal).Value = (decimal)x1;
command.Parameters.Add(":y1", OracleDbType.Decimal).Value = (decimal)y1;
command.Parameters.Add(":z1", OracleDbType.Decimal).Value = (decimal)z1;
command.Parameters.Add(":r1", OracleDbType.Decimal).Value = (decimal)r1;
command.Parameters.Add(":g1", OracleDbType.Decimal).Value = (decimal)g1;
command.Parameters.Add(":b1", OracleDbType.Decimal).Value = (decimal)b1;
command.ExecuteNonQuery();
}
}
但是,通过Unity给Oracle写入数据,只适合数据量小的情况下,数据量如果很大,使用Unity就会很慢,怎么办呢,另有方法:
如果数据存在txt文件中,则可以数据之间可用逗号分隔开,数据按行分隔开,第一行为你要导入数据库表的列名,例如:
创建一个文件夹,我这里命名为sql
将存有数据的txt文件放入该文件夹,然后创建一个.ctl文件,我这里名为为insert.ctl,写入命令:
load data
characterset utf8
INFILE 'D:/sql/data0.txt'
Append into table pointcloud_4
fields terminated by ","
(
x,y,z,r,g,b
)
第三行为txt数据文件位置,第四行最后为表名,第五行最后的逗号表示按逗号分隔,然后下面就是数据要导入的列名。
完成之后,打开终端,导航到sql文件夹,输入指令:
sqlldr 用户名/密码@实例名 control=insert.ctl
可参考:Oracle中使用CTL文件实现快速数据导入(oracle中ctl文件)-数据运维技术 (dbs724.com)