Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно вставлять и извлекать данные / 20 сообщений из 20, страница 1 из 1
09.08.2007, 17:38:55
    #34717966
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
Есть большая строка,очень большая,как мне ее вставить в базу в поле с типом BLOB,а потом как извлеч из базы и преобразовать все обратно в строку
Спасибо
...
Рейтинг: 0 / 0
10.08.2007, 11:28:28
    #34719237
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
поможет кто-то?
...
Рейтинг: 0 / 0
10.08.2007, 12:02:36
    #34719389
Juga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
работа с BLOB обсуждалось миллион раз. пользуйся поиском
...
Рейтинг: 0 / 0
10.08.2007, 12:26:07
    #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
10.08.2007, 12:44:42
    #34719577
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
Раз база - Oracle, так возьми его реализацию Blob'а, для его создания есть метод BLOB.createTemporary().
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.08.2007, 13:00:21
    #34719656
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
Denis Popov
Раз база - Oracle, так возьми его реализацию Blob'а, для его создания есть метод BLOB.createTemporary().
Posted via ActualForum NNTP Server 1.4
а можно пример пожалуйста,и куда мне мою строку передать
...
Рейтинг: 0 / 0
10.08.2007, 13:11:07
    #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
10.08.2007, 13:17:13
    #34719714
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
Попробуй второй параметр в BLOB.createTemporary() установить в true. И еще, какая версия базы и
драйверов? /topic/440063&pg=2#4280505
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.08.2007, 15:56:55
    #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
10.08.2007, 16:14:30
    #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
10.08.2007, 16:24:58
    #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
10.08.2007, 16:54:09
    #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
10.08.2007, 17:23:17
    #34720724
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
а что там в RESOURCE написано,у меня какие-то каракули
...
Рейтинг: 0 / 0
10.08.2007, 17:25:04
    #34720731
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
а ну да,это ж строка которую я вставляю,сорри
щас буду пробовать
...
Рейтинг: 0 / 0
10.08.2007, 17:30:14
    #34720743
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
А теперь написало java.sql.SQLException: Не поддерживаемая функция
...
Рейтинг: 0 / 0
10.08.2007, 17:42:34
    #34720776
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
JulT wrote:

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

Драйвер поменяла, он у тебя от 10-ки? Проверь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.08.2007, 17:45:38
    #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
10.08.2007, 18:00:31
    #34720829
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вставлять и извлекать данные
АЛИЛУЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ!!!!!!!!!!!!!!!!!
Спасибо Denis Popov ты настоящий мастер
УРАААААААААА!!!!
...
Рейтинг: 0 / 0
10.08.2007, 18:14:09
    #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
10.08.2007, 23:21:04
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно вставлять и извлекать данные / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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