CC++连接oracle 数据库,把数据库的用户名,密码等先加密到一个文件中,然后再解密出来供连接数据库使用

CC++连接oracle 数据库,把数据库的用户名,密码等先加密到一个文件中,然后再解密出来供连接数据库使用,第1张

可以自己写个加解密模块,应付老师的话采用简单的加解密算法就行了,比如特定位置插入字符、移位、加减等等,也可以用别人写好的商用加解密算法,数据库里面保存加密后的内容,需要解密时调用你对应的解密算法就OK了

1、配置ODBC数据源。

2、使用SQL函数进行连接。

对于1、配置数据源,配置完以后就可以编程 *** 作数据库了。

对于2、使用SQL函数进行连接,参考代码如下:

#include<windowsh>

#include<sqlh>

#include<sqlexth>

void main()

{

HENV henv; //环境句柄

HDBC hdbc; //数据源句柄

HSTMT hstmt; //执行语句句柄

unsigned char datasource[]="数据源名称"; //即源中设置的源名称

unsigned char user[]= "用户名"; //数据库的帐户名

unsigned char pwd[]= "密码"; //数据库的密码

unsigned char search[]="select xm from stu where xh=0";

SQLRETURN retcode; //记录各SQL函数的返回情况

// 分配环境句柄

retcode= SQLAllocEnv(&henv); // 等介于 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL

, &henv);

// 设置ODBC环境版本号为30

retcode= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void)SQL_OV_ODBC3, 0);

// 分配连接句柄

retcode= SQLAllocConnect(henv,&hdbc); // 等介于 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

//设置连接属性,登录超时为rgbValue秒(可以没有)

// SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0);

//直接连接数据源

// 如果是windows身份验证,第二、三参数可以是

,也可以是任何字串

//SQL_NTS 即 "

retcode= SQLConnect(hdbc,datasource, SQL_NTS, user, SQL_NTS , pwd, SQL_NTS );

//分配语句句柄

retcode= SQLAllocStmt(hdbc,&hstmt); // 等介于 SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

//直接执行查询语句

retcode=SQLExecDirect(hstmt,search,SQL_NTS);

//将数据缓冲区绑定数据库中的相应字段(i是查询结果集列号,queryData是绑定缓冲区,BUFF_LENGTH是缓冲区长度)

SQLBindCol(hstmt, i, SQL_C_CHAR, queryData[i-1], BUFF_LENGTH, 0);

//遍历结果集到相应缓冲区 queryData

SQLFetch(hstmt);

/

对遍历结果的相关 *** 作,如显示等

/

//注意释放顺序,否则会造成未知错误!

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

}

楼主您好

1在动手先代码之前,我们先把环境配置妥善。先从安装了Oracle的数据库服务器中,找到

Oracle安装目录,然后将该目录下的jdbc\lib\classes12jar文件拷贝到WEB发布服务器的某个目录。假设就直接放在C:\根目录下吧,然后把该路径添加到„系统--高级--环境变量‟

中变量名为„CLASSPATH‟的值中,如:

D:\Program Files\SQLLIB\java\db2javazip;D:\Program

Files\SQLLIB\java\runtimezip;c:classes12jar;

也就是让java能够找到这个包。

2

1注册加载驱动

驱动名:DRIVER="oraclejdbcdriverOracleDriver";

ClassforName("驱动类名");

3

2获得连接

数据库地址: URL="jdbc:oracle:thin:@127001:1521:ORCL";

Connection conn = DriverManagergetConnection(数据库地址,用户名,密码);

Systemoutprintln("连接成功");

4

3创建Statement对象

Statement

类的主要是用于执行静态 SQL 语句并返回它所生成结果的对象。通过Connection 对象的

createStatement()方法可以创建一个Statement对象。例如:Statement statament =

connectioncreateStatement(); 具体示例创建Statement对象

Statement statamentMySQL =connectMySQLcreateStatement();

新版本

Driver={Microsoft ODBC for Oracle};Server=myServerAddress;Uid=myUsername;Pwd=myPassword;

旧版本

Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServerworld;Uid=myUsername;Pwd=myPassword;

OLE DB, OleDbConnection (NET)

标准连接

此连接字符串适用了微软的驱动。

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;

受信连接

Provider=msdaora;Data Source=MyOracleDB;Persist Security Info=False;Integrated Security=Yes;

标准连接

由Oracle提供的驱动。

Provider=OraOLEDBOracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;

受信连接

Provider=OraOLEDBOracle;Data Source=MyOracleDB;OSAuthent=1;

OracleDataAccessClientOracleConnection

Data Source=TORCL;User Id=myUsername;Password=myPassword;

标准安全连接

Data Source=TORCL;Integrated Security=SSPI;

使用ODPNET而不使用tnsnamesora

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;

OracleConnection, Oracle Data Provider, ODPNET, SystemDataOracleClientOracleConnection

标准

Data Source=MyOracleDB;Integrated Security=yes;

用于8i RC3及以后的版本

指定用户名和密码

Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;Integrated Security=no;

用于8i RC3及以后的版本

忽略tnsnamesora

另一种不需要使用DSN的连接方式。

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));uid=myUsername;pwd=myPassword;

使用上面的连接字符串可能会导致Visual Studio报告错误,如果您在使用中出现了这些问题,请使用下面的这种连接方式。

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;

使用连接池

如果连接池服务程序找不到已经存在的连接池,它将根据连接字符串创建一个新的池,否则将循环使用池中已存在的连接。

Data Source=myOracleDB;User Id=myUsername;Password=myPassword;Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;Incr Pool Size=5;Decr Pool Size=2;

Windows身份验证

Data Source=myOracleDB;User Id=/;

特权连接

使用SYSDBA

Data Source=myOracleDB;User Id=SYS;Password=SYS;DBA Privilege=SYSDBA;

特权连接

使用SYSOPER

Data Source=myOracleDB;User Id=SYS;Password=SYS;DBA Privilege=SYSOPER;

复制

密码过期处理过程

当使用一个连接字符串连接数据库后,出现“密码已过期”的错误时,请执行OpenWithNewPassword命令来提供新密码。

Data Source=myOracleDB;User Id=myUsername;Password=myPassword;

oConnOpenWithNewPassword(sTheNewPassword);

Proxy验证

Data Source=myOracleDB;User Id=myUsername;Password=myPassword;Proxy User Id=pUserId;Proxy Password=pPassword;

Core Labs OraDirect (NET)

User ID=myUsername;Password=myPassword;Host=ora;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;

MS Data Shape

Provider=MSDataShape1;Persist Security Info=False;Data Provider=MSDAORA;Data Source=orac;User Id=myUsername;Password=myPassword;

15分钟。

根据百度百科资料显示,Oracle19c是一个长期的版本,进行Oracle19c的安装时此过程较慢,正常情况15分钟左右,此时连接Linux服务的SSH工具可能断联。

Oracle数据库可在本地环境和云端提供市场领先的性能、可扩展性、可靠性和安全性。当下最新的长期支持版Oracle19c拥有超高水平的版本稳定性。

假如 C 可以连接 B 。 B 可以连接 A 的话

那么,在 B 上面,创建一个 A 的链接数据库, 让C 通过 B 上面的 链接,访问A

一个简单的例子如下:

SQL> CREATE DATABASE LINK mydblink

2 CONNECT TO test IDENTIFIED BY test123

3 USING '(DESCRIPTION =

4 (ADDRESS_LIST =

5 (ADDRESS = (PROTOCOL = TCP)(HOST = 1921681210)(PORT = 1521)))

6 (CONNECT_DATA = (SERVICE_NAME = orcl)

7 )

8 )';

Database link created

SQL> select count(1) from user_tables@mydblink;

COUNT(1)

----------

6

注意:如果创建全局dblink,必须使用systm或sys用户,在database前加public。

第一种情况:

若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了。不过要注意环境变量%ORACLE_HOME%/network/admin/是否设置。

第二种情况:

本机未安装oracle服务器,也未安装oracle客户端。但是安装了pl sql development、toad sql development、sql navigator等管理数据库的工具。在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。

这种情况下,本人以pl sql development远程连接ORACLE服务端数据库为例:

1、在安装oracle服务器的机器上搜索下列文件:

ocidll

ocijdbc10dll

ociw32dll

orannzsbb10dll

oraocci10dll

oraociei10dll

sqlnetora

tnsnamesora

classes12jar

ojdbc14jar

把这些找到的文件复制放到一个文件夹,如 oraclient,将此文件夹复制到客户端机器上。如放置路径为 D:oraclient。

2、配置tnsnamesora,修改其中的数据库连接串。

oracledata = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192168058)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = oracledata) )

其中,oracledata是要连接的服务名;HOST = 192168058,是服务器IP地址;PORT = 1521是端口号。

3、添加第一个环境变量,名为TNS_ADMIN,值为tnsnamesora文件所在路径(如:D:oraclient,特别是重装后或其它 *** 作,忘了TNS_ADMIN变量,plsql登陆就会报无法解析指定的连接标识符),这是为了能够找到上面说的tnsnamesora。这步是最重要的。

添加第二个环境变量(可有可无):“NLS_LANG = SIMPLIFIED CHINESE_CHINAZHS16GBK”,(AMERICAN_AMERICAUS7ASCII 是ASCII编码类型,其它类型可自己到服务器看一下或网上查找一下)(本步骤暂时要做对,如果编码不对,会产生乱码)。

4、下载并安装PL SQL Developer配置应用:

打开PL SQL Developer,登入界面点取消,进入后选择菜单栏 tools->preferences->connection :

Oracle Home=D:oracleclient OCI library=D:oracleclientocidll

5、再次打开plsql则会在database中有oracledata 选项输入用户名密码就可以登陆。

第三种情况:

本机未安装ORACLE服务器,但是安装了oracle客户端,也安装了pl sql development、toad sql development、sql navigator等管理数据库的工具。在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。

这种情况下,本人以pl sql development远程连接oracle服务端数据库为例:

1、打开oracle客户端中的net manager,配置要远程连接的数据库名、IP地址等,如果net manager中没有要远程连接的数据库名,则新建即可。

2、其他步骤与第二种情况中的2---5相同。

第四种情况:

本机未安装oracle服务器,也未安装pl sql development、toad sql development、sql navigator等管理数据库的工具,但是安装了oracle客户端。在虚拟机或者另一台电脑上安装了ORACLE服务器,也就是虚拟机或者另一台电脑此时作为服务器。

这种情况下,本人以oracle客户端中的sqlplus远程连接oracle服务端数据库为例:

1、打开oracle客户端中的net manager,配置要远程连接的数据库名、IP地址等,如果net manager中没有要远程连接的数据库名,则新建即可。

2、同第二种情况中的步骤二。

3、同第二种情况中的步骤三。

4、打开sqlplus:

(1)如果用sys用户登入,则用户名:sys 密码:xxxxxx 主机字符串:要连接的数据库名 as sysdba,登入即可。

(2)如果用其他用户登入,则用户名:xxx 密码:xxxxxx 主机字符串:要连接的数据库名,登入即可。

注意事项:

1、服务器端和客户端防火墙需要关闭;

2、我们经常会遇到***服务无法启动,那么需要打开Net Configuration Assistant修复,或者新建***服务。

3、数据库密码如果忘了怎么办?按照以下方法修改密码即可:

开始-->运行-->cmd

输入 :sqlplus /nolog 回车

输入 :connect / as sysdba 回车

用户解锁 : alter user system account unlock 回车

修改密码:alter user system identified by manager

4、怎样判断数据库是运行在归档模式下还是运行在非归档模式下?

进入dbastudio,历程--〉数据库---〉归档查看。

5、另外,如果本机和别的机子均安装了oracle服务器端,那么本机如果要连接别的机子,就必须修改tnsnamesora

以上就是关于C/C++连接oracle 数据库,把数据库的用户名,密码等先加密到一个文件中,然后再解密出来供连接数据库使用全部的内容,包括:C/C++连接oracle 数据库,把数据库的用户名,密码等先加密到一个文件中,然后再解密出来供连接数据库使用、c语言怎样连接数据库、如何使用JDBC连接oracle数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9409988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存