powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Прочесть CLOB в DB2 (JSP)
9 сообщений из 9, страница 1 из 1
Прочесть CLOB в DB2 (JSP)
    #36508571
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замучился уже. не выводит ничего хоть убей. (пару раз чудом выводило кусок значения, но потом и это сломал.) Имеем поле CLOB в которое запихнули XML -код Нужно прочесть. Вот готовый код JSP.
Всё работает- но ничего не показывает.

-----------------------------------------
<%@page import="java.sql.*,java.sql.Statement,java.sql.Clob,java.util.*, javax.servlet.jsp.*, javax.swing.*, java.sql.Connection, java.sql.DriverManager, java.sql.SQLException,javax.swing.*, java.sql.ResultSet,java.sql.Statement,java.io.*,java.lang.*"%>
<%@ page contentType="text/html; charset=windows-1251" %>
<html>
<head>
</head>
<body bgcolor="#C0DFFD">
<form method="GET" action="vipiska.jsp">
<input type="submit" value="Submit" name="B1" ><BR>

<%
Connection conn = null;
// load the DB2 Driver
try
{
Class.forName("com.ibm.db2.jcc.DB2Driver");
}
catch(ClassNotFoundException se)
{
se.printStackTrace();
System.out.println(se);
}
conn = DriverManager.getConnection
("jdbc:db2://10.10.10.10:50000/baza","user","password");


Statement st = conn.createStatement();


String myQuery = "SELECT TAG_CONTENT FROM TABLE where TAG_ID=1111111";
ResultSet resultSet = st.executeQuery(myQuery);
%>
<%


while (resultSet.next())
{
StringBuffer suggestions = new StringBuffer();
Clob clob = resultSet.getClob("TAG_CONTENT");
Reader clobStream = clob.getCharacterStream();
int nchars = 0;
char[] buffer = new char[10];

while((nchars = clobStream.read(buffer)) != -1) // Read from Clob
suggestions.append(buffer, 0, nchars);
String strXML = suggestions.toString();
%>


<B><%=strXML%></B><BR>
<%

}

// clobStream.close();
resultSet.close();
st.close();
conn.close();

%>
</form >
</body>
</html>

---------------------------------------------------------------

И пустой экран. Что не так? Кому-нить приходилось джавой выдерать из CLOB значения? Если да, то поделитесь примером плиз. Или ткните в ошибку.

Заранее спасибо.
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36508844
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снят в виду ответа на него в форуме java
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36508874
Ivan Ivanich,

"Уж сколько раз твердили миру".
За такой код на сервере приложений я своих подопечных "расстреливаю":
- За явное использование класса драйвера и неиспользование пула соединений.
- За использование JSP в случае, когда нужен чистый сервлет.
- За неиспользование PreparedStatement (ну это по конкретной ситуации).

По сути проблемы. Пример кода.
Код: 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.
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.
package ru.ts.ehabarov.test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.InitialContext;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class UploadInsert
 */
public class SelectXML extends HttpServlet 
{
	private static final long serialVersionUID = 1L;
	private static final String dsName = "java:comp/env/jdbc/SPRAVKIN";
	private static final String sqlSelXml = "SELECT XML_DATA FROM SPRAVKIN.DOC_ARH WHERE ID_SP_DOC=?";
	private DataSource ds = null;
	       
	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException 
	{
		super.init(config);
		// Инициализация ссылки на пул соединений
		try
		{
			InitialContext ic = new InitialContext();
			ds = (DataSource) ic.lookup(dsName);
			ic.close();

		}
		catch (Exception e) 
		{
			throw new ServletException("Error during resource lookup", e);
		}
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String xmlString = null;
		try
		{
			con = ds.getConnection();
			pstmt = con.prepareStatement(sqlSelXml);
			pstmt.setInt( 1 , 123 );
			rs = pstmt.executeQuery();
			if (rs.next())
			{
				xmlString = rs.getString( 1 );
			}
			pstmt.close();
			con.commit();
			con.close();
		} 
		catch (Exception e) 
		{
			try { pstmt.close(); } catch (Exception e1) {}
			try { con.rollback(); } catch (Exception e1) {}
			try { con.close(); } catch (Exception e1) {}
			throw new ServletException(e);
		}
		if (xmlString == null) throw new ServletException("XML Content is NULL");
		response.setContentType("text/xml");
		response.setCharacterEncoding("utf-8");
		response.getWriter().write(xmlString);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		doGet(request, response);
	}
	
	@Override
	public void destroy() 
	{
		super.destroy();
	}

	
}
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36509469
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем не угодило JSP то? И чем не угодил явное использование класса драйвера? Неа, ну вот если отбросить пальцы то чем плох мой пример?
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36509688
Ivan Ivanich,

1. Использование внедренного ява-кода (ака скриптлет) в JSP есть моветон.
Библиотеки тегов специально придумали чтобы избавиться от скриптлетов, ибо в результате код становится нечитабельным и сложно-сопровождаемым. Это не "пальцы", это факты.
2. Работать в обход пула соединений в среде сервера приложений есть не только моветон, но и вредно с т.з. производительности и сопровождения. Что такое пулы соединений и почему они нужны написано практически в любой документации по J2EE-серверам.
Это равносильно тому, что в многоквартирном жилом доме с централизованным отоплением и связью каждый будет в квартире ставить собственную печку-буржуйку и кидать провода до ближайшей линии электропередач. И потом жаловаться что дымно, холодно и в грозу оборудование выгорает.

Если этот пример "только пример", то без разницы конечно.
За использование такого кода в производстве обычно начинают отстрел.
PS: Если включить J2EE защиту, то этот код не будет работать, т.к. в этом режиме приложению классы загружать будет нельзя и исходящие соединения устанавливать тоже будет нельзя.
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36509974
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш пример кода рабочий? Много напильником надо дорабатыввать. Просто мне нужно сделать быстрее, пробовал и с аплетом, но знаний джавы не хватило. вот и решил попроще JSP со скриплетами.

На тех же дельфях мне бы 10 минут хватило. А вот с джавой имею дело редковато. Не хватает времени.
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36510647
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И кстати, где в вашем примере ответ на мой вопрос? Навык работы вижу. Распальцовки вижу. (я своих подопечных "расстреливаю"), а вот чтение поля типа CLOB не вижу.

Мне именно это и было надо:

StringBuffer suggestions = new StringBuffer();
Clob clob = resultSet.getClob("TAG_CONTENT");
Reader clobStream = clob.getCharacterStream();
int nchars = 0;
char[] buffer = new char[10];
while((nchars = clobStream.read(buffer)) != -1) // Read from Clob
suggestions.append(buffer, 0, nchars);
String strXML = suggestions.toString();

а не ваши блестящие владения сервлетами и пулами коннекций.
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36510727
Ivan Ivanich,

Код вообще-то рабочий.
Проверено на DB2 v9.1.0.6, DB2 JCC 3.53.95 и Apache Tomcat 6.0.2.4
CLOB-объект можно читать через метод getString(<num>).
При возврате XML-содержимого в сервлете/JSP этого обычно достаточно. Случай оптимизации для больших CLOB-объектов отдельный разговор.
DDL таблицы:
Код: plaintext
create table spravkin.doc_arh(id_sp_doc integer, XML_DATA CLOB(1M))

Приношу извинения, если тон сообщения оказался слишком резким.
Честное слово уже "стойка" на использование DriverManager в JSP/Cервлетах, и использование JSP не по месту.
...
Рейтинг: 0 / 0
Прочесть CLOB в DB2 (JSP)
    #36510818
Ivan Ivanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Прочесть CLOB в DB2 (JSP)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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