powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузка класса из БД
10 сообщений из 10, страница 1 из 1
Загрузка класса из БД
    #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
Загрузка класса из БД
    #37637687
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя же была такая тема
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637698
Фотография Хороший человек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тема была,а проблема осталась
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637706
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший человекjava.lang.ClassFormatError: org.firebirdsq.jdbc.FBDriverскомпилировано под 1.6, выполняется под 1.4
например
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637719
Фотография Хороший человек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не эта проблема,
загрузка через идентичный loader, только через URL проходит успешно, что-то с loadClass не то
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637738
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оу
фигасе
посмотрел )
да, не эта
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637751
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший человекне эта проблема,
загрузка через идентичный loader, только через URL проходит успешно, что-то с loadClass не тоС кодировками небось что-то не то. Для проверки сделайте сначала выгрузку из базы в файл, а потом проверьте сможете ли вы загрузить класс из этого файла через обычный URLClassLoader.
В общем идея такова - данные где-то искажаются либо при записи в базу, либо при считывании из нее. Ваша задача понять, где это происходит и почему.
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #37637816
Фотография Хороший человек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делай выгрузку сначала в файл, потом загружаю URLClassLoader'ом все происходить нормуль:) С кодировкой все порядке.
...
Рейтинг: 0 / 0
Загрузка класса из БД
    #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
Загрузка класса из БД
    #37638876
Фотография Хороший человек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка копирования

заполняю

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


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