⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 Oracle调用接口
💻 CPP
字号:
#include "_p.h"
#include <crtdbg.h>

#include "../oralib/oralib.h"

using namespace oralib;
using namespace std;

int main (void)
{
	try
	{
		connection cn ("ora1", "thesis", "thesis");
		cn.execute ("create table a (id numeric, name varchar2 (10))");

		cn.execute ("insert into a (id, name) values (1, 'aaa')");
		cn.execute ("insert into a (id, name) values (2, 'aba')");
		cn.execute ("insert into a (id, name) values (3, 'aac')");
		cn.execute ("insert into a (id, name) values (4, 'ada')");
		cn.execute ("insert into a (id, name) values (5, 'aae')");

 	statement &st = *cn.prepare (
		"begin :result := package_name.function_name ("
			":param1, :param2, :param3); end;");
	st.bind (":param1", DT_TYPE) = param1_value;
	st.bind (":param2", DT_TYPE) = param2_value;
	st.bind (":param3", DT_TYPE) = param3_value;
	st.bind (":result", DT_TYPE);
	st.execute ();
		// use st [":result"] here
	st.release ();

		cn.execute ("drop table a");
		cn.close ();
	}
	catch (oralib::error &e)
	{
		std::cout << e.details ();
	}
	return (0);
}



int main1 (void)
{
	_CrtSetDbgFlag (
		_CRTDBG_ALLOC_MEM_DF |
		//_CRTDBG_CHECK_ALWAYS_DF |
		//_CRTDBG_DELAY_FREE_MEM_DF |
		_CRTDBG_LEAK_CHECK_DF);

	try
	{
		oralib::connection c ("ora1", "thesis", "thesis");

		oralib::statement &s1 = *c.prepare ("insert into a values (:p)");
		oralib::statement &s2 = *c.prepare ("insert into b values (:s1)");
		oralib::statement &s3 = *c.prepare ("insert into c values (:p)");

		oralib::parameter &p1 = s1.bind (":p", oralib::DT_NUMBER);
		oralib::parameter &p2 = s2.bind (":s1");
		oralib::parameter &p3 = s3.bind (":p", oralib::DT_TEXT);

		p2 = _T ("Hello, World!");
		p3 = _T ("Hello, World!");

		putch ('.');
		for (int i=0; i<1; ++i, p1 = (long) i)
		{
			s1.execute ();
			s2.execute ();
			s3.execute ();
		}
		s3.release ();
		s2.release ();
		s1.release ();

		putch ('.');
		oralib::resultset	&rs = *c.select ("select * from b");
		while (!rs.eod ())
		{
			++rs;
		}
		rs.release ();

		putch ('.');
		c.execute ("delete from a");
		c.execute ("delete from b");
		c.execute ("delete from c");

		putch ('.');
		c.commit ();
		c.close ();
	}
	catch (oralib::error &e)
	{
		std::cout << e.details ();
	}
	
	return (0);
}



#if	0
void	main1 (void)
{
	oralib::connection	c;
	int	i;
	DWORD	ticks;
	const int ITERS = 100;
	const int SLEEP = 100;
	const char *server = "ora1";
	const char *login = "thesis";
	const char *password = "thesis";

	_CrtSetDbgFlag (
		_CRTDBG_ALLOC_MEM_DF |
		//_CRTDBG_CHECK_ALWAYS_DF |
		//_CRTDBG_DELAY_FREE_MEM_DF |
		_CRTDBG_LEAK_CHECK_DF);

	try
	{
		c.open (server, login, password);

		// select test
		oralib::resultset &r = *c.select (
			"select OBJECT_NAME, OBJECT_TYPE, TIMESTAMP, STATUS from OBJ");
		oralib::column &c1 = r [1], &c2 = r [2], &c3 = r [3], &c4 = r [4];
		while (!r.eod ())
		{
			_tprintf (_T ("%-18s %-18s %-20s %s\n"),
				(oralib::Pstr) c1,
				c2.as_string (),
				c3.as_string (),
				c4.as_string ());
			r.next ();
		}
		c1.release (); c2.release (); c3.release (); c4.release ();
		r.release ();

		// pl/sql block test
		oralib::statement &s = *c.prepare (
			"declare n numeric; begin n := 4; :n1 := n; end;");
		oralib::parameter &p = s.bind (":n1") = (long) 5;
		wprintf (L"n1 were = %d\n", (long) p);
		s.execute ();
		wprintf (L"n1 goes = %d\n", (long) s [1]);
		p.release ();
		s.release ();

		c.execute ("create table test_table ( s varchar2(50), n numeric, d date )");
		
		s = *c.prepare ("insert into test_table (s, n, d) values (:s1, :n1, :d1)");
		s.bind (":s1") = "Hello, World!";
		s.bind (":n1") = (long) 12345;
		s.bind (":d1") = oralib::datetime (1, oralib::jan, 2001);
		s.execute ();
		s.release ();

		r = *c.select ("select * from test_table");
		oralib::datetime dt = r [3];
		_tprintf (_T ("%s %d %d-%d-%d\n"),
			(oralib::Pstr) r [1],
			(long) r [2],
			(int) dt.day (), (int) dt.mon (), (int) dt.year ());
		r.release ();

		c.execute ("drop table test_table");

		c.close ();
	}
	catch (oralib::error &e)
	{
		e.display ();
	}

	try
	{
		c.open (server, login, password);

		/* simple select test */
		oralib::resultset &r = *c.select ("select TNAME from TAB");
		do
			_putts (r ["TNAME"]);
		while (r.next ());
		r.release ();

		/* insert test # 2 */
		ticks = GetTickCount ();
		for (i=0; i<ITERS; i++)
		{
			char	sz [100];
			sprintf (sz, "insert into a values (-%d)", i);
			c.execute (sz);
		}
		c.commit ();
		std::cout << "insert # 2 Ticks: " << (GetTickCount () - ticks) << "\n";

		std::cout << "sleeping for " << SLEEP / 1000.0 << " seconds...";
		Sleep (SLEEP);
		std::cout << " ok\n";

		/* insert test # 1 */
		ticks = GetTickCount ();
		oralib::statement &s = *c.prepare ("insert into a values (:in1)");
		s.bind (":in1");
		for (i=0; i<ITERS; i++)
		{
			s [":in1"] = (long) i;
			s.execute ();
		}
		s.release ();
		c.commit ();
		std::cout << "insert # 1 Ticks: " << (GetTickCount () - ticks) << "\n";

		std::cout << "sleeping for " << SLEEP / 1000.0 << " seconds...";
		Sleep (SLEEP);
		std::cout << " ok\n";

		/* select test */
		ticks = GetTickCount ();
		s = *c.prepare ("select N from A where N > :in1");
		s.bind (":in1");
		for (i=0; i<ITERS; i++)
		{
			if (i % 10 == 0) std::cout << ".";

			s [":in1"] = (long) i;
			oralib::resultset &r = *s.select ();

			while (r.next ())
				;

			r.release ();
		}
		s.release ();
		std::cout << "select Ticks: " << (GetTickCount () - ticks) << "\n";

		/* truncate */
		std::cout << "truncating table...";
		c.execute ("truncate table a");
		std::cout << " ok\n";

		c.close ();
	}
	catch (oralib::error &e)
	{
		e.display ();
	}

#if	0
	try
	{
		c.open ("ora1", "thesis", "thesis");
		
		c.execute ("create table a ( b numeric )");
		c.execute ("alter table a add constraint a_a primary key (b)");
		c.execute ("declare b numeric; begin select -1 into b from dual; insert into a values (b); end;");
		c.execute ("delete from a");
		c.execute ("drop table a");

		try
		{
			/* execute statement */
			oralib::statement	*s = NULL;
			s = c.prepare ("begin select -1 into :n from dual; end;");
			s->bind (":n");
			s->execute ();
			s->release ();
		}
		catch (oralib::error &e)
		{
			puts ("--- error executing the statement ---");
			e.display ();
		}

		try
		{
			/* execute statement */
			oralib::statement	*s = NULL;
			s = c.prepare ("begin open :c for select -1 from dual; end;");
			s->bind (":c");
			s->execute ();
			s->release ();
		}
		catch (oralib::error &e)
		{
			puts ("--- error executing the statement ---");
			e.display ();
		}

		oralib::resultset *r = c.select ("select -1 from dual");
		r->release ();

		r = c.select ("select * from bb");
		r->release ();

		c.close ();
	}
	catch (oralib::error &e)
	{
		puts ("--- error opening the connection ---");
		e.display ();
	}
#endif

	return;
}

#endif




#if	0
void	cdemo81 (void)
{
	oralib::connection cn;

	try
	{
		// connect
		cn.open ("ora1", "thesis", "thesis");

		// retrieve the current maximum employee number
		oralib::resultset &rs = *cn.select ("SELECT NVL(MAX(empno), 0) FROM emp");
		sword empno = (sword) (long) rs [1];
		rs.release ();

		// prepare both statements for execution
		oralib::statement &st_insert = *cn.prepare (
			"INSERT INTO emp(empno, ename, job, sal, deptno) "
			"VALUES (:nEmpno, :sEname, :sJob, :nSal, :nDeptno)");
		
		oralib::statement &st_dep_name = *cn.prepare (
			"SELECT dname FROM dept WHERE deptno = :nDeptno");

		// bind named variables
		st_insert.bind (":nEmpno");
		st_insert.bind (":sEname");
		st_insert.bind (":sJob");
		st_insert.bind (":nSal");
		st_insert.bind (":nDeptno");
		st_dep_name.bind (":nDeptno");

		while (true)
		{
			oralib::String ename, ejob, dept;
			sword esal, deptno;

			// get information
			std::cout << _T ("\nEnter employee name (or Ctrl+Z, Enter to EXIT): ");
			std::cin >> ename;
			if (ename.length () == 0) break;
			std::cout << _T ("Enter employee job: ");
			std::cin >> ejob;
			std::cout << _T ("Enter employee salary: ");
			std::cin >> esal;

			// ask for department and verify that exists
			bool found = false;
			do
			{
				std::cout << _T ("Enter employee dept: ");
				std::cin >> deptno;
				st_dep_name [1] = (long) deptno;
				oralib::resultset &rs = *st_dep_name.select ();
				found = !rs.eod ();
				if (found)
					dept = rs [1].as_string ();
				else
					std::cout << _T ("The dept you entered doesn't exist.\n");
				rs.release ();
			}
			while (!found);

			// insert an employee record
			st_insert [":sEname"] = ename.c_str ();
			st_insert [":sJob"] = ejob.c_str ();
			st_insert [":nSal"] = (long) esal;
			st_insert [":nDeptno"] = (long) deptno;
			bool succeeded = false;
			do
			{
				st_insert [":nEmpno"] = (long) empno;
				try
				{
					st_insert.execute ();
					cn.commit ();
					succeeded = true;
				}
				catch (oralib::error& /* e */)
				{
					empno += 10;
				}
			}
			while (!succeeded);

			std::cout << ename << _T (" added to the ") << dept <<
				_T (" department as employee number ") << empno;
		}

		st_insert.release ();
		st_dep_name.release ();
		cn.close ();
	}
	catch (oralib::error &e)
	{
		std::cout << e.details ();
	}
}
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -