Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузка класса из БД / 10 сообщений из 10, страница 1 из 1
30.01.2012, 08:25:12
    #37637641
Хороший человек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
Доброго времени суток.

У меня написан загрузчик, с помощью которого пытаюсь загрузить класс из БД. Но увы что-то не идет. Выдает ошибки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Exception in thread main
java.lang.ClassFormatError: org.firebirdsq.jdbc.FBDriver
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at memprg.MyLoader.loadClass(MyLoader.java:174)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at memprg.MyLoader.main(MyLoader.java:193)


Вот мой код. Просьба не судить строго, а указан ошибки и недочеты. За ранее благодарен.

Код: java
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.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
public class MyLoader extends ClassLoader
 

{

 Hashtable cache = new Hashtable();

    public PermissionCollection getPermissions(CodeSource codesource)
    {
        return _perm_collection;
    }

      private PermissionCollection _perm_collection;

    public MyLoader(ClassLoader parent)
    {
        
        super(parent);
            _perm_collection = getClass().getProtectionDomain().getPermissions();
    
    }

    public Object create_object(String class_name)
    {
        Class c;
        try
        {
            c = loadClass(class_name);
        }
        catch (ClassNotFoundException e)
        {
            return null;
        }

        try
        {
            return c.newInstance();
        }
        catch (IllegalAccessException e)
        {
            return null;
        }
        catch (InstantiationException e)
        {
            return null;
        }
    }


    public Object invoke_method(Object obj, String name, Object[] params, Class[] classes) throws Exception
    {
       String class_name = obj.getClass().getName();

        Method m = null;
        try
        {
            m = obj.getClass().getMethod(name, classes);
        }
        catch (NoSuchMethodException e)
        {
            throw new Exception("Error");
        }

        m.setAccessible(true);
        int mods = m.getModifiers();
        if (!Modifier.isPublic(mods))
        {
            throw new Exception("Error");
        }

        try
        {
            return m.invoke(obj, params);
        }
        catch (InvocationTargetException e)
        {
            throw new Exception("Error");
        }
        catch (IllegalAccessException e)
        {
            throw new Exception("Error");
        }
    }
    
    
    private byte loadClassData(String name)[] {
        String ourl = "jdbc:oracle:thin:@//myorcl:1521/orcl";
        Connection ocon = null;   
        byte bt[] = null;
        try{
            String odriver = "oracle.jdbc.OracleDriver";
            Class.forName(odriver).newInstance();
            //пользователь
            ocon = DriverManager.getConnection(ourl, "scott", "tiger");
          
         
           Statement select1 = ocon.createStatement();
           
            ResultSet rs1 = select1
                .executeQuery("select nfile,tg from file_dir where tg=0");
               while (rs1.next()){
                   System.out.println(rs1.getInt(2));
                 }   
               
        }catch(Exception ex){ }        
        
        
        return bt;
    }    
 

    public Class<?> loadClass(String name,boolean resolve) {
               
                 Class c = (Class)cache.get(name);
                 System.out.println(name);                          
                 
                 if (c == null) {
                     byte data[] = loadClassData(name);
                     System.out.println(data.length);
                     c = defineClass(name,data,0, data.length,null);
                    
                     cache.put(name, c);
                 }
                 if (resolve)
                     resolveClass(c);
                 return c;
             }
       
   
    public static void main(String[] args){
        String url = "jdbc:firebirdsql://168.3.5.93:3050/c:\\fb\\fb.fdb?user=user&password=password";
            try{  
            
            MyLoader ld = new MyLoader(ClassLoader.getSystemClassLoader());
                     
              Driver drv = (Driver)ld.loadClass("org.firebirdsq.jdbc.FBDriver").newInstance();
             Connection con = drv.connect(url,null);
             DriverManager.registerDriver(drv);   
              
             Statement select = con.createStatement(); 
            //Проверяем запрос
            ResultSet rs = select
               .executeQuery("select id from table where d in (5,10)");
            while (rs.next()){            
             
             int ow_id = rs.getInt(1);
             
             System.out.println(d+"!!");
             }
             
             rs.close();
    
             
          }catch(Exception e){
             
        }
       }    
    
}
...
Рейтинг: 0 / 0
30.01.2012, 09:32:08
    #37637687
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
у тебя же была такая тема
...
Рейтинг: 0 / 0
30.01.2012, 09:45:37
    #37637698
Хороший человек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
тема была,а проблема осталась
...
Рейтинг: 0 / 0
30.01.2012, 09:53:19
    #37637706
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
Хороший человекjava.lang.ClassFormatError: org.firebirdsq.jdbc.FBDriverскомпилировано под 1.6, выполняется под 1.4
например
...
Рейтинг: 0 / 0
30.01.2012, 10:03:53
    #37637719
Хороший человек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
не эта проблема,
загрузка через идентичный loader, только через URL проходит успешно, что-то с loadClass не то
...
Рейтинг: 0 / 0
30.01.2012, 10:13:26
    #37637738
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
оу
фигасе
посмотрел )
да, не эта
...
Рейтинг: 0 / 0
30.01.2012, 10:19:36
    #37637751
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
Хороший человекне эта проблема,
загрузка через идентичный loader, только через URL проходит успешно, что-то с loadClass не тоС кодировками небось что-то не то. Для проверки сделайте сначала выгрузку из базы в файл, а потом проверьте сможете ли вы загрузить класс из этого файла через обычный URLClassLoader.
В общем идея такова - данные где-то искажаются либо при записи в базу, либо при считывании из нее. Ваша задача понять, где это происходит и почему.
...
Рейтинг: 0 / 0
30.01.2012, 10:56:23
    #37637816
Хороший человек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
Делай выгрузку сначала в файл, потом загружаю URLClassLoader'ом все происходить нормуль:) С кодировкой все порядке.
...
Рейтинг: 0 / 0
30.01.2012, 15:39:00
    #37638368
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
Хороший человек,

а где в этом коде заполнение bt[] ? или я чего не понимаю.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        byte bt[] = null;
        try{
            String odriver = "oracle.jdbc.OracleDriver";
            Class.forName(odriver).newInstance();
            //пользователь
            ocon = DriverManager.getConnection(ourl, "scott", "tiger");
          
         
           Statement select1 = ocon.createStatement();
           
            ResultSet rs1 = select1
                .executeQuery("select nfile,tg from file_dir where tg=0");
               while (rs1.next()){
                   System.out.println(rs1.getInt(2));
                 }   
               
        }catch(Exception ex){ }        
        
        
        return bt;
...
Рейтинг: 0 / 0
30.01.2012, 19:31:40
    #37638876
Хороший человек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка класса из БД
ошибка копирования

заполняю

bt = rs1.getBytes(1);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузка класса из БД / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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