powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найдите 10 отличий
1 сообщений из 1, страница 1 из 1
Найдите 10 отличий
    #39744739
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !
Имею задачу из Kuassi Mensah (Oracle Database Programming Using Java and Web Services)

Java-источник 1–ый объект
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
create or replace and resolve java source named AddressObj as

import java.sql.*;
import java.io.*;
import java.util.Date;
import oracle.sql.*;

public class AddressObj implements SQLData 
{
       String sql_type ="address_t";
       public String street1;
       public String street2;
       public String city;
       public int zip;

       public AddressObj() 
       {
       
       }

       public AddressObj(String sql_type, String street1, String street2, String city, int zip)
       {
              this.sql_type = sql_type;
              this.street1= street1;
              this.street2= street2;
              this.city= city;
              this.zip= zip;
       }

       public String getSQLTypeName() throws SQLException
       {
              return sql_type;
       }

       public void readSQL(SQLInput stream, String typeName)
       throws SQLException
       {
              sql_type = typeName;
              SQLInput istream = (SQLInput) stream;
              street1 = istream.readString();
              street2 = istream.readString();
              city = istream.readString();
              zip = istream.readInt();
       }

       public void writeSQL(SQLOutput stream)
       throws SQLException
       {
              SQLOutput ostream = (SQLOutput) stream;
              ostream.writeString (street1);
              ostream.writeString (street2);
              ostream.writeString(city);
              ostream.writeInt(zip);
       }
}



Java-источник 2–ый объект
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
create or replace and resolve java source named PersonObj as

import java.sql.*;
import java.io.*;
import java.util.Date;
import oracle.sql.*;

public class PersonObj implements SQLData 
{
       String sql_type = "person_t";
       public String name;
       public int age;
       public AddressObj addrObj;

       public PersonObj() 
       {
       
       }

       public PersonObj(String sql_type, String name, int age, AddressObj addrObj)
       {
              this.sql_type = sql_type;
              this.name = name;
              this.age = age;
              this.addrObj = addrObj;
       }

       public String getSQLTypeName() throws SQLException
       {
              return sql_type;
       }

       public void readSQL(SQLInput stream, String typeName)
       throws SQLException
       {
              sql_type = typeName;
              SQLInput istream = (SQLInput) stream;
              name = istream.readString();
              age = istream.readInt();
              addrObj = (AddressObj) istream.readObject();
       }

       public void writeSQL(SQLOutput stream)
       throws SQLException
       {
              SQLOutput ostream = (SQLOutput) stream;
              ostream.writeString (name);
              ostream.writeInt (age);
              ostream.writeObject(addrObj);
       }
}



Java – источник иниц. запуск объект
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
create or replace and resolve java source named SQLJ_Objetc as

import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.sql.*;
import oracle.jdbc.*;
import java.math.*;

public class SQLJ_Object
{

       public static PersonObj getPersonObj(int id)
       throws SQLException
       {
              OracleConnection oconn =(OracleConnection)DriverManager.getConnection("jdbc:oracle:kprb:");
              java.util.Dictionary map =(java.util.Dictionary) (oconn.getTypeMap());
              Statement stmt = oconn.createStatement();
              try
              {
                        map.put("person_t" ,Class.forName("PersonObj" ));
                        map.put("address_t",Class.forName("AddressObj"));
                        oconn.setTypeMap((Map)map);
                        oconn.commit();
              }catch(Exception e)
              {
                        throw new SQLException(e.getMessage());
              }
              PersonObj pobj = null;
              PreparedStatement ps =oconn.prepareStatement("SELECT adtcol1 from PersonObjTab where id = ?");
              ps.setInt(1,id);
              OracleResultSet ors =(OracleResultSet)
              ps.executeQuery();
              java.util.Hashtable ht = new java.util.Hashtable();
              try
              {
                        ht.put("person_t" ,Class.forName("PersonObj" ));
                        ht.put("address_t",Class.forName("AddressObj"));
              }
              catch(Exception e)
              {
                        throw new SQLException(e.getMessage());
              }
              while(ors.next())
              {
                        oconn.commit();
                        pobj =(PersonObj)ors.getObject(1,(Map)ht);
              }
              ps.close();
              oconn.close();
              stmt.close();

              PersonObj pobj1 = null;
              pobj1 = new PersonObj("person_t","Name",25,new AddressObj("address_t","City","street1","street2",10));
              // return pobj1

              return pobj;
       }
       
       public static void insPersonObj(int id, PersonObj personin, PersonObj[] personout) 
       throws SQLException
       {
              Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:");
              OracleConnection orconn = (OracleConnection)conn;
              PreparedStatement ps = conn.prepareStatement("insert into PersonObjTab values(?,?)");
              java.util.Dictionary map =(java.util.Dictionary)(orconn.getTypeMap());
              try
              {
                       map.put("person_t" ,Class.forName("PersonObj" ));
                       map.put("address_t",Class.forName("AddressObj"));
                       orconn.setTypeMap((Map)map);
              }
              catch(Exception e)
              {
                       throw new SQLException(e.getMessage());
              }
              ps.setInt(1,id);
              ps.setObject(2,personin);
              ps.executeUpdate();
              ps.close();
              PreparedStatement ps1 = conn.prepareStatement("select adtcol1 from PersonObjTab where id = ?");
              ps1.setInt(1,id);
              OracleResultSet ors1 = (OracleResultSet) ps1.executeQuery();
              while(ors1.next())
              {
                       personout[0] = (PersonObj) ors1.getObject(1);
              }
              ors1.close();
              conn.close();
       }
}



PersonObj pobj1 = null;
pobj1 = new PersonObj("person_t","Name",25,new AddressObj("address_t","City","street1","street2",10));
// return pobj1;

Строки кода – ПОКА не содержат логического смысла
Попытаюсь вернуть переменную pobj1 вместо pobj по окончанию задачи

Имею создание PL/SQL типов и таблицы в качестве примера
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE TYPE address_t AS OBJECT 
  EXTERNAL NAME 'AddressObj' 
  LANGUAGE JAVA USING SQLDATA
  (street1 varchar2(25) external name 'street1',
   street2 varchar2(25) external name 'street2',
   city    varchar2(25) external name 'city',
   zip     number       external name 'zip'
  );



Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE OR REPLACE TYPE person_t AS OBJECT 
  EXTERNAL NAME 'PersonObj'
  LANGUAGE JAVA USING SQLDATA
  (name varchar2(25) external name 'name',
   age  number       external name 'age',
   addrObj address_t external name 'addrObj'
  );



Код: plsql
1.
2.
3.
4.
create table PersonObjTab (id number,adtcol1 person_t);
insert into PersonObjTab values(10,person_t('Jack',25,Address_t('10 Embarcadero','Ferry Plazza','San Francisco',93126)));
insert into PersonObjTab values(11,person_t('Bob' ,26,Address_t('12 JrMLK' ,'Alley3','Chicago',1090)));
insert into PersonObjTab values(12,person_t('Doug',27,Address_t('10 Alley1','Alley2','Denvers',1091)));



Создание функции с ссылкой на Java-класс
Код: plsql
1.
2.
3.
4.
5.
create or replace function getPersonObj (id IN number) return person_t
as language java name 'SQLJ_Object.getPersonObj(int) returns PersonObj';

create or replace procedure insPersonObj(id IN number,personin IN person_t,personout IN OUT person_t) 
as language java name 'SQLJ_Object.insPersonObj(int, PersonObj, PersonObj [])';



Запускающий код
Код: plsql
1.
2.
3.
4.
5.
6.
declare
  m4 person_t;
begin
  m4 := getPersonObj(11);
  dbms_output.put_line(' *name is '|| m4.name ||'*age is'||m4.age ||' *street1 is '|| m4.addrObj.street1 ||' *street2 is '||m4.addrObj.street2 || ' *city is '||m4.addrObj.city ||' *zip is '|| m4.addrObj.zip);
end;




Делаю замену вывода переменных в функции getPersonObj pobj=pobj1
Деремирую/ремирую строки
return pobj1;
//return pobj;

Получаю ошибку - скрин приложен в файле

Переменны идентичны по типу, поля объектов заполнены
В чем проблема подскажите пожалуйста.
Спасибо.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найдите 10 отличий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]