powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно вставлять и извлекать данные
20 сообщений из 20, страница 1 из 1
Как правильно вставлять и извлекать данные
    #34717966
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большая строка,очень большая,как мне ее вставить в базу в поле с типом BLOB,а потом как извлеч из базы и преобразовать все обратно в строку
Спасибо
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719237
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поможет кто-то?
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719389
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работа с BLOB обсуждалось миллион раз. пользуйся поиском
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719495
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю так:

Код: plaintext
1.
HtmBlob blob= new  HtmBlob("тут передаю очень большую строку");
pst.setBlob( 7 ,blob);
Вот код класса HtmBlob:
Код: plaintext
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.
 class  HtmBlob  implements  Blob{
 String html;

    HtmBlob(String h){
      html=h;
    }


   public   long  length()  throws  SQLException {
      return  html.length();
   }



    public   byte [] getBytes( long  pos,  int  length)  throws  SQLException {
        
        return  html.getBytes();
        
    }


     public  InputStream getBinaryStream()  throws  SQLException {
          throw   new  SQLException();
     }


      public   long  position( byte  pattern[],  long  start)  throws  SQLException {
      throw   new  UnsupportedOperationException();
   }

    public   long  position(Blob pattern,  long  start)  throws  SQLException {
      throw   new  UnsupportedOperationException();
   }


    public  OutputStream setBinaryStream( long  pos)  throws  SQLException {
     throw   new  UnsupportedOperationException();
  }


   public   int  setBytes( long  pos,  byte [] bytes)  throws  SQLException {
 throw   new  UnsupportedOperationException();
}

 public   int  setBytes( long  pos,  byte [] bytes,  int  offset,  int  len)  throws  SQLException {
 throw   new  UnsupportedOperationException();
}

 public   void  truncate( long  len)  throws  SQLException {
    throw   new  UnsupportedOperationException();
 }

}
в результате пишет:
Код: plaintext
1.
java.lang.ClassCastException
	at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java: 2098 )
и указывает,что ошибка произошла на строке
Код: plaintext
pst.setBlob( 7 ,blob);
есть подозрения что я не правильно описала класс HtmBlob,подскажите как нужно делать,спасибо
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719577
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз база - Oracle, так возьми его реализацию Blob'а, для его создания есть метод BLOB.createTemporary().
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719656
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Раз база - Oracle, так возьми его реализацию Blob'а, для его создания есть метод BLOB.createTemporary().
Posted via ActualForum NNTP Server 1.4
а можно пример пожалуйста,и куда мне мою строку передать
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719688
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделала так:
Код: plaintext
1.
2.
3.
4.
 
    oracle.sql.BLOB blod=oracle.sql.BLOB.createTemporary(con,false,oracle.sql.BLOB.DURATION_SESSION);
              blod.setBytes(str.getBytes());
              pst.setBlob( 7 , blod);
вылетела ошибка:
Код: plaintext
java.sql.SQLException: ORA- 24813 : нельзя отправить или получить неподдерживаемый LOB
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34719714
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй второй параметр в BLOB.createTemporary() установить в true. И еще, какая версия базы и
драйверов? /topic/440063&pg=2#4280505
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720382
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Попробуй второй параметр в BLOB.createTemporary() установить в true. И еще, какая версия базы и
драйверов? /topic/440063&pg=2#4280505
Posted via ActualForum NNTP Server 1.4
Поставила тру, ничего не помагает,а вот информация про драйвер:

Java version: 1.4.2_11
Database : Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production
JDBC Driver : Oracle JDBC driver 9.2.0.5.0
Url : file:/C:/File_for_project/OracleDriverNew/ojdbc14.jar!/oracle/jdbc/driver/OracleConnection.class
помогите пожалуйста
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720460
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Возьми последние драйвера, от 10g:

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html

и замени оттуда свой ojdbc14.jar по указанному тобой пути. Попробуй сызнова, не получится - покажи
весь код, что делаешь.

2. Тебе нужно строку сохранять именно в виде BLOB'а? Не CLOB'а?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720516
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
1. Возьми последние драйвера, от 10g:

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html

и замени оттуда свой ojdbc14.jar по указанному тобой пути. Попробуй сызнова, не получится - покажи
весь код, что делаешь.

2. Тебе нужно строку сохранять именно в виде BLOB'а? Не CLOB'а?
Posted via ActualForum NNTP Server 1.4
можно и в клобе,мне все-равно,лиж бы работало
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720623
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
 import  oracle.sql.CLOB;

 import  java.io.OutputStream;
 import  java.io.OutputStreamWriter;
 import  java.sql.*;

 public   class  ClobTest {

    private   static   final  String USERNAME = "hall";

    private   static   final  String PASSWORD = "h";

    private   static   final  String SERVER = "jdbc:oracle:thin:@<host>:<port>:<SERVICE_NAME>";

    private   static   final  String RESOURCE =
     "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ.йцукенгшщзхъфывапролджэячсмитьбю" +
       "QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?qwertyuiop[]asdfghjkl;'zxcvbnm,.";

    public   static   void  main(String args[])
      throws  Exception {

     Connection con =  null ;
     Clob clob;
     Statement st =  null ;
     PreparedStatement pst =  null ;
     ResultSet rs =  null ;
      try  {
       DriverManager.registerDriver( new  oracle.jdbc.OracleDriver());
       con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);

       clob = CLOB.createTemporary(con, true, CLOB.DURATION_SESSION);

       clob.setString( 1 , RESOURCE);

       st = con.createStatement();
        try  {
         st.execute("drop table TEST_LOB");
       }  catch  (SQLException e) {}

       st.execute("create table TEST_LOB (cdata clob)");

       pst = con.prepareStatement("insert into TEST_LOB (cdata) values (?)");
       pst.setClob( 1 , clob);
       pst.execute();

       rs = st.executeQuery("select cdata from TEST_LOB where rownum = 1");
        if  (rs.next()) {
         Clob clob2 = rs.getClob("cdata");
         String sClob2 = clob.getSubString( 1 , ( int )clob2.length());
         System.out.println(sClob2);
       }
     }  finally  {
        if  (rs !=  null ) { rs.close(); }
        if  (pst !=  null ) { pst.close(); }
        if  (st !=  null ) { st.close(); }
        if  (con !=  null ) { con.close(); }
     }
   }
}

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720724
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что там в RESOURCE написано,у меня какие-то каракули
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720731
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ну да,это ж строка которую я вставляю,сорри
щас буду пробовать
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720743
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь написало java.sql.SQLException: Не поддерживаемая функция
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720776
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT wrote:

> А теперь написало java.sql.SQLException: Не поддерживаемая функция

Драйвер поменяла, он у тебя от 10-ки? Проверь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720783
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov wrote:
>
> Драйвер поменяла, он у тебя от 10-ки? Проверь.
>

В драйверах от Oracle 9i можно сделать так:

Код: plaintext
1.
2.
//clob.setString(1, RESOURCE);
((CLOB)clob).putString( 1 , RESOURCE);

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720829
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АЛИЛУЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ!!!!!!!!!!!!!!!!!
Спасибо Denis Popov ты настоящий мастер
УРАААААААААА!!!!
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34720867
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT wrote:

> АЛИЛУЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ!!!!!!!!!!!!!!!!!

Вообще-то заглядывай сюда:

http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/toc.htm

http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/index.html
...
Рейтинг: 0 / 0
Как правильно вставлять и извлекать данные
    #34721311
livan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поздравления !.
Если говорить не только о CLOB & BLOB, а скорей о технологии чтения-записи данных -
лучше перейти на iBatis, Spring, Hibernate. Я использую iBatis & Spring.Там есть типы clob, blob
которые позволяют просто читать и писать данные в-из таких типов полей.
Кроме этого Spring позволит тебе менять *свойства транзакции* для
get, insert & update методов, а также создавать dao структуры, привязывать различные dao
к различным db вендорам одновременно. Создавать приложения не зависящие кодом от производителя sql server. Очень интересная тема - Aspect oriented programming.
ПОсмотри примеры, книги.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно вставлять и извлекать данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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