336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

java 프로그램 구현시에 오라클의 프로시저에서 예외를 발생시킨 후 코드와 메시지를 전달하는 방법이다.

RAISE_APPLICATION_ERROR(에러코드, 에러구문);

에러코드는 -20000 에서 -20999 사이의 값을 입력한다.

프로시저 생성

create or replace raise_test(P_IN IN VARCHAR2, P_OUT OUT VARCHAR2) IS

V_OUT VARCHAR2(1000);

BEGIN

     BEGIN
          --ERROR 발생코드
     EXCEPTION
          WHEN OTHERS THEN
           ROLLBACK;
            RAISE_APPLICATION_ERROR(-20000, SQLERRM);
     END;

END;
/

JAVA 코드

try{
// 데이터베이스 드라이버를 로드 Class.forName("oracle.jdbc.driver.OracleDriver");
// Connection 객체 생성
Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe","SCOTT","TIGER");
// 프로시저를 실행할 수 있는 Statement 객체 생성
CallableStatement cstmt = con.prepareCall("{call raise_test(?,?)}");
cstmt.setString(1, "값1");
// ?에 값 바인딩
cstmt.setString(2, "값2");
// 프로시저 실행
cstmt.executeQuery();
// 사용다한 객체 닫기
cstmt.close();
con.close();
} catch(Exception e){ System.out.println(e.getMessage()); e.printStackTrace();
}

'Programming > java' 카테고리의 다른 글

오라클 ORDER SIBLINGS BY  (0) 2022.02.08
자바 워터마크 java watermark  (0) 2020.03.29
오라클 두 날짜, 시간 사이를 초단위로 환산하기  (0) 2017.10.22
jdk 1.8 다운로드  (0) 2017.05.19
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오라클 쿼리 작성시에 CONNECT BY 구문을 사용할때가 있다.
이때 정렬은 ORDER BY 구문으로 처리가 안된다.
ORDER SIBLINGS BY 구문으로 처리해야한다.

SELECT *
  FRIM DEPT_INFO
START WITH DEPT_LVL = 1
CONNECT BY PRIOR DEPT_CD = UPPER_DEPT_CD
ORDER SIBLINGS DEPT_NM ASC

위 쿼리는 부서의 레벨은 1레벨부터 시작하고
부서전체를 트리로 보여주되,
최고상위 부서부터 하위부서이고,
레벨이 같으면 부서명으로 정렬한다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

html 본문을 수정했음에도 js 및 css 파일이 갱신되지않아 브라우저에서 변경되어진 정보가 제대로 표현되지 않을때가 있다.

브라우저의 캐싱은 url 기준으로 동일한 url 이 요청되어졌는지를 확인합니다.

캐시를 사용하는 목적은 빠른 화면 처리속도를 높일 수 있다.
하지만 수정된 내용이 반영되지 않은 화면이라면 이야기가 달라진다.

캐시를 사용하지 않기위해 다음과 같이 처리한다.

1. 메타테그
cache-control
no-cache : 캐시를 사용하기전에 재검증을 위한 요청을 강제한다.
no-store : 클라이언트의 요청, 서버의 응답등을 일제 저장하지 않는다.
must-revalidate : 캐시를 사용하기전에 반드시 만료된 것인지를 검증한다.

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" >

2. expires
리소스가 validate 하지 않다고 판단할 시간을 설정함
유효하지 않은 날짜 포맷과 같은경우 리소스가 만료되었음을 의미한다.

<meta http-equiv="expires" content="0">

3. HTTP 1.0버전에서 HTTP 1.1의 cache-control 헤더와 같은 기능을 함

<meta http-equiv="pragma" content="no-cache">

4. 수정한 파일의 이름을 변경한다.

temp.js 를 수정했다면 temp2.js 이렇게 수정한다.
(html 해당 js 의 link 정보도 수정)

이 방법은 파일명을 수정시마다 바꿔야하므로 귀찮고도 번거롭다.

수정한 파일의 링크정보에 쿼리스트링을 붙인다.

as-is
<script type="text/javascript" src="temp.js">
<link rel="stylesheet" type="text/css" href="temp.css">

to-be
<script type="text/javascript" src="temp.js?ver=1.0">
<link rel="stylesheet" type="text/css" href="temp.css?ver=1.0">

만약 jstl을 사용한다면
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<jsp:useBean id="now" class="java.util.Date" />
<fmt:formateDate value="${now}" pattern="yyyyMMddHHmmss" var="nowss"/>

<script type="text/javascript" src="temp.js?ver=${nowss}">
<link rel="stylesheet" type="text/css" href="temp.css?ver=${nowss}">

'Programming > javascript' 카테고리의 다른 글

javascript substring  (0) 2017.11.04
javascript v8 엔진  (0) 2017.04.26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

java로 구현한 watermark 샘플코드


package org.watermark;


import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.awt.GradientPaint;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.RenderingHints;

import java.awt.Shape;

import java.awt.font.GlyphVector;

import java.awt.geom.AffineTransform;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;


import javax.imageio.ImageIO;


public class WaterMarkUtil3 {


    


public static void main(String[] args) {

    String strWText = "ABCDABCDABCDABCDABCDABCDABCD";

        // create graphics context and enable anti-aliasing

   

    try {

    File sourceImageFile = new File("d:/test.jpg");

    File destImageFile = new File("d:/testwater01.jpg");

    BufferedImage sourceImage = ImageIO.read(sourceImageFile);

    Graphics2D g2d = (Graphics2D) sourceImage.getGraphics();

   

        //Graphics2D g2d = original.createGraphics();

        g2d.scale(1, 1);

        g2d.addRenderingHints(

                new RenderingHints(RenderingHints.KEY_ANTIALIASING,

                                   RenderingHints.VALUE_ANTIALIAS_ON));

        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,

                             RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        // create watermark text shape for rendering

        Font font = new Font(Font.SANS_SERIF, Font.PLAIN, 18);

        GlyphVector fontGV = font.createGlyphVector(g2d.getFontRenderContext(), strWText);

        Rectangle size = fontGV.getPixelBounds(g2d.getFontRenderContext(), 0, 0);

        

        

        

        Shape textShape = fontGV.getOutline();

        //double textWidth = size.getWidth();         

        double textWidth = size.getWidth();

        

        //double textHeight = size.getHeight();

        double textHeight = size.getHeight()*3; // 텍스트 간격이다.

        //AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI / 4d);

        AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI / 5d);

        Shape rotatedText = rotate45.createTransformedShape(textShape);

        // use a gradient that repeats 4 times

        g2d.setPaint(new GradientPaint(0, 0,

                            new Color(0f, 0f, 0f, 0.1f),

                            sourceImage.getWidth() / 2, sourceImage.getHeight() / 2,

                            new Color(0f, 0f, 0f, 0.1f)));

                            //new Color(1f, 1f, 1f, 0.1f)));

        //g2d.setStroke(new BasicStroke(0.5f));

        g2d.setStroke(new BasicStroke(1f));

        // step in y direction is calc'ed using pythagoras + 5 pixel padding

        //double yStep = Math.sqrt(textWidth * textWidth / 2) + 2;

        double yStep = Math.sqrt(textWidth * textWidth / 2); //

        

        System.out.println("yStep : " + yStep);

        // step over image rendering watermark text

        //for (double x = -textHeight * 3; x < sourceImage.getWidth(); x += (textHeight * 3)) {

         

        for (double x = -textHeight; x < sourceImage.getWidth()/2; x += textHeight) {

       

            double y = -yStep;

                        

            for (; y < sourceImage.getHeight(); y += yStep) {

                g2d.draw(rotatedText);

                g2d.fill(rotatedText);

                g2d.translate(0, yStep);

            }

            

            g2d.translate(textHeight * 3, -(y + yStep));

        }

        

            ImageIO.write(sourceImage, "jpg", destImageFile);

            g2d.dispose();

     

            System.out.println("The tex watermark is added to the image.");         

        

        } catch (IOException ex) {

            System.err.println(ex);

        }

    }


}



샘플로 제작된 이미지



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

substring은 문자열을 자르는 함수입니다. 



- 문법 -

string.substring( 자르기 시작위치, 자르기 종료위치 )

자르기 시작위치 와 자르기 종료위치로 문자열에서 잘라낼 부분의 처음과 끝을 지정합니다.



- 예제 -

var str = 'ABCDEFG';

alert( str.substring( 1, 4 ) );

BCD 가 보일것입니다.

'Programming > javascript' 카테고리의 다른 글

[html] js, css 파일 캐시 방지  (0) 2021.11.12
javascript v8 엔진  (0) 2017.04.26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

비교하려는 대상의 타입이 보통은 varchar2 또는 char 타입으로 설정되어 있을것입니다.

계산을 하려면 to_date 로 컨버팅을 해야합니다.


SELECT ABS((TO_DATE('큰날짜', 'YYYYMMDDHH24MISS')-(TO_DATE('작은날짜', 'YYYYMMDDHH24MISS')))) *24 *60 *60 FROM DUAL 


이렇게 간단하게 구할 수 있겠네요.

ABS 는 절대값으로 만드는것이구요. 

TO_DATE 함수를 이용해서 더하기 빼기 (+, -) 연산을 하면 일단위로 값이 리턴됩니다.

그 값을 초단위로 환산하기위해서 *24*60*60 해줍니다. 

그러면 초단위로 환산됩니다.


감사합니다.

'Programming > java' 카테고리의 다른 글

오라클:oracle 사용자정의오류 RAISE_APPLICATION_ERROR  (0) 2022.02.08
오라클 ORDER SIBLINGS BY  (0) 2022.02.08
자바 워터마크 java watermark  (0) 2020.03.29
jdk 1.8 다운로드  (0) 2017.05.19
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이클립스 및 웹 기타 JAVA 어플리케이션 개발시 반드시 필요한 JDK 8 다운로드 링크입니다.

아래의 사이트에서 다운로드 가능합니다. (JAVA 8)


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



위 주소로 이동하여 빨간색으로 표시해둔 부분을 체크하시고 OS 버전에 맞는 JDK 를 다운로드 하시기 바랍니다.


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

일반적으로 javascript 용어는 웹페이지를 개발할때 사용하는 언어라는 인식이 대부분이다.

그렇지만 구글이(google) 크롬(Chrome)에 이식한 V8 이라는 javascript 를 이식하며 관심이 더 많아졌다.

위키디피아 백과사전 에서는 다음과 같이 설명하고 있다.


V8 자바스크립트 엔진(V8 JavaScript Engine)은 구글에서 개발된 오픈 소스 JIT 가상 머신형식의 자바스크립트 엔진이며 구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있다. V8로 줄여 불리기도 하며, 현재 라스 백이 책임 프로그래머이다. ECMAScript(ECMA - 262) 3rd Edition 규격의 C++로 작성되었으며, 독립적으로 실행이 가능하다. 또한 C++로 작성된 응용 프로그램의 일부로 작동할 수 있다.

V8은 자바스크립트를 바이트코드(bytecode)로 컴파일하거나 인터프리트(interpret)하는 대신 실행하기 전 직접적인 기계어(x86, ARM, 또는 MIPS)로 컴파일(compile)하여 성능을 향상시켰다. 추가적인 속도향상을 위해 인라인 캐싱(inline caching)과 같은 최적화 기법을 적용하였다.


구글 개발사이트에는 다음과 같이 설명을 하고 있다.

V8 is Google's open source high-performance JavaScript engine, written in C++ and used in Google Chrome, the open source browser from Google. It implements ECMAScript as specified in ECMA-262, and runs on Windows XP or later, Mac OS X 10.5+, and Linux systems that use IA-32, ARM or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.

V8은 C ++로 작성되었으며 Google의 오픈 소스 브라우저 인 Google 크롬에 사용되는 Google의 오픈 소스 고성능 JavaScript 엔진입니다. ECMA-262에 명시된대로 ECMAScript를 구현하며 Windows XP 이상, Mac OS X 10.5 이상 및 IA-32, ARM 또는 MIPS 프로세서를 사용하는 Linux 시스템에서 실행됩니다. V8은 독립형으로 실행되거나 모든 C ++ 응용 프로그램에 내장 될 수 있습니다.


V8 compiles and executes JavaScript source code, handles memory allocation for objects, and garbage collects objects it no longer needs. V8's stop-the-world, generational, accurate garbage collector is one of the keys to V8's performance. You can learn about this and other performance aspects in V8 Design Elements.

V8은 자바 스크립트 소스 코드를 컴파일 및 실행하고 객체에 대한 메모리 할당을 처리하며 더 이상 필요없는 객체를 가비지 수집합니다. V8의 세계에서 멈추고 세대 간 정확한 가비지 컬렉터는 V8의 성능을 좌우하는 열쇠 중 하나입니다. V8 디자인 요소 에서이 기능 및 기타 성능 측면에 대해 배울 수 있습니다 .


JavaScript is most commonly used for client-side scripting in a browser, being used to manipulate Document Object Model (DOM) objects for example. The DOM is not, however, typically provided by the JavaScript engine but instead by a browser. The same is true of V8—Google Chrome provides the DOM. V8 does however provide all the data types, operators, objects and functions specified in the ECMA standard.

JavaScript는 브라우저에서 클라이언트 측 스크립팅에 가장 일반적으로 사용되며 예를 들어 DOM (Document Object Model) 객체를 조작하는 데 사용됩니다. 그러나 DOM은 일반적으로 자바 스크립트 엔진에 의해 제공되는 것이 아니라 브라우저에 의해 제공됩니다. V8에 대해서도 마찬가지입니다. Google 크롬은 DOM을 제공합니다. 그러나 V8은 ECMA 표준에 지정된 모든 데이터 유형, 연산자, 객체 및 기능을 제공합니다.


V8 enables any C++ application to expose its own objects and functions to JavaScript code. It's up to you to decide on the objects and functions you would like to expose to JavaScript. There are many examples of applications that do this, for example: Adobe Flash and the Dashboard Widgets in Apple's Mac OS X and Yahoo! Widgets.

V8을 사용하면 모든 C ++ 응용 프로그램이 자체 객체와 함수를 JavaScript 코드에 표시 할 수 있습니다. 자바 스크립트에 표시하려는 객체와 함수는 사용자가 결정해야합니다. 이를 수행하는 애플리케이션의 예가 많이 있습니다 (예 : Adobe Flash 및 Apple Mac OS X 및 Yahoo! 위젯의 대시 보드 위젯).


개발자의 경우 javascript 와 크롬이 사용하는 javascript 엔진에 대해서 조금은 알아야하지 않을까 합니다.


'Programming > javascript' 카테고리의 다른 글

[html] js, css 파일 캐시 방지  (0) 2021.11.12
javascript substring  (0) 2017.11.04

+ Recent posts