Unity连接Oracle、读取、写入数据,大批量给Oracle写入数据

3 篇文章 0 订阅

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)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值