import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ServerController {
	
	Socket sock = null;
	DataOutputStream dos;
	DataInputStream dis;
	//읽기버퍼
	byte[] 	rbuff = new byte[1024];	
	int 	rbuff_cnt =0;
	//연결된 클라이언트 아이피
	String sip =  null;
	String packet = "";
	private Thread recvQThread;
	
	public ServerController() {
		//서버소켓 생성
		recvQThread = new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					ServerSocket serversock = new ServerSocket(8081);
					//무한 루프로 클라이언트의 요청을 반복적으로 처리
					while(true) {
						Socket sock = serversock.accept();
						sip = sock.getInetAddress().toString();
						System.out.println("[클라이언트 IP '" + sip + "' 접속됨 ]");
						
						tcpSockServer_read(sock);
					}
				} catch(IOException e) {
					e.printStackTrace();
				}
			}
		});
		recvQThread.start();
	}
	
	public void tcpSockServer_read(Socket sock) {
		try {
			try {
				// 클라이언트와 문자열 통신을 위한 스트림 생정
				dis = new DataInputStream(sock.getInputStream());
				while(true) {
					//Thread.sleep(1);
					rbuff_cnt = dis.read(rbuff);
					
					int i;
					String data = "";
					for (i = 0; i < rbuff_cnt; i++) {
						data += String.format("0x%02X", rbuff[i]).replace("0x", "");
					}
					System.out.println("data : "+ data);
				}
			} finally {
				dis.close();
				dos.close();
				sock.close();
			}
		} catch(IOException e) {
			System.out.println("클라이언트 IP '" + sip + "' 접속종료");
		}
	}
	
	public static void main(String[] args) {
		new ServerController();
	}
}

'개발 > JAVA' 카테고리의 다른 글

Java 자바 UNIX Timestamp 변환 timestamp to date String  (0) 2023.04.20
byte Array to  (0) 2023.04.20
[Java] Byte Reverse  (0) 2023.04.20
myBatis selectone null 처리  (0) 2017.11.21
Spring VO 객제 복사 하기  (0) 2017.08.04
public String getTimestampToDate(String timestampStr){
    long timestamp = Long.parseLong(timestampStr);
    Date date = new java.util.Date(timestamp*1000L); 
    SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    sdf.setTimeZone(java.util.TimeZone.getTimeZone("GMT+9")); 
    String formattedDate = sdf.format(date);
    return formattedDate;
}

출처 : https://aljjabaegi.tistory.com/460#Java_%EC%9E%90%EB%B0%94_UNIX_Timestamp_%EB%B3%80%ED%99%98_timestamp_to_date_String

'개발 > JAVA' 카테고리의 다른 글

[Java] TCP Server Thread로 만들기  (0) 2023.04.20
byte Array to  (0) 2023.04.20
[Java] Byte Reverse  (0) 2023.04.20
myBatis selectone null 처리  (0) 2017.11.21
Spring VO 객제 복사 하기  (0) 2017.08.04
public short byteArrayToShort(byte[] bytes) {
    bytes = reverse(bytes);
    return ByteBuffer.wrap(bytes).getShort();
}

public int byteArrayToInt(byte[] bytes) {
    bytes = reverse(bytes);
    return ByteBuffer.wrap(bytes).getInt();
}

public long byteArrayToLong(byte[] bytes) {
    bytes = reverse(bytes);
    return ByteBuffer.wrap(bytes).getLong();
}

public float byteArrayToFloat(byte[] bytes) {
    bytes = reverse(bytes);
    return ByteBuffer.wrap(bytes).getFloat();
}

public double byteArrayToDouble(byte[] bytes) {
    bytes = reverse(bytes);
    ByteBuffer buffer = ByteBuffer.wrap(bytes);
    return buffer.getDouble();
}

public byte[] reverse(byte[] objects) {
    byte[] temp = new byte[objects.length];
    for (int left = 0, right = objects.length - 1; left <= right; left++, right--) {
        temp[left]=objects[right];
        temp[right]=objects[left];
    }
    return temp;
}

'개발 > JAVA' 카테고리의 다른 글

[Java] TCP Server Thread로 만들기  (0) 2023.04.20
Java 자바 UNIX Timestamp 변환 timestamp to date String  (0) 2023.04.20
[Java] Byte Reverse  (0) 2023.04.20
myBatis selectone null 처리  (0) 2017.11.21
Spring VO 객제 복사 하기  (0) 2017.08.04
public byte[] reverse(byte[] objects) {
    byte[] temp = new byte[objects.length];
    for (int left = 0, right = objects.length - 1; left <= right; left++, right--) {
        temp[left]=objects[right];
        temp[right]=objects[left];
    }
    return temp;
}
 
//전체
$('#tbodyList input[type=checkbox]').length;
//체크된것만
$('#tbodyList input[type=checkbox]:checked').length;
//체크안된것만
$('#tbodyList input[type=checkbox]:not(:checked)').length;


화면 전체에 체크박스를 체크하고싶으면 #tbodyList 제거하면 됩니다.
myBatis에서 selectone으로 검색시 결과값이 없는데 int절에 넣고 싶을때가 있을것이다. int절에 넣을때 nullpointerException 오류가 발생하게 된다.
 
//service
int testCnt = testDAO.selectTestCnt(testVO);
//mapper

//dao
public int selectTestCnt(TestVO testVO) {
	return ((Integer) sqlSession.selectOne(NAMESPACE + "selectTestCnt", testVO)).intValue();
}
service 단에서 nullpointerException 오류 발생 이럴때는..........이렇게 해보세요~~!!!
//int testCnt = testDAO.selectTestCnt(testVO);
//dao
public int selectTestCnt(TestVO testVO) {
	return sqlSession.selectOne(NAMESPACE + "selectTestCnt", testVO;
}
//service
Integer testCnt = testDAO.selectTestCnt(testVO);
testCnt = testCnt == null ? 0 : testCnt;

'개발 > JAVA' 카테고리의 다른 글

byte Array to  (0) 2023.04.20
[Java] Byte Reverse  (0) 2023.04.20
Spring VO 객제 복사 하기  (0) 2017.08.04
java 인코딩 깨질때 [한글 인코딩 오류] 체크  (0) 2017.07.21
Java split 사용법  (0) 2017.04.05

와스를 올리다 보면 가끔씩 Out Of Memory Error를 만날때가 있습니다.


최근 나는 Jrebel 을 적용 시키니 Out Of Memory Error가 발생하였습니다.


이럴때는 간단하게 해결 할 방법이 있습니다.



서버 설정에서 VM arguments : 에 저 빨간 부분처럼 추가해주면 됩니다.


-XX:MaxPermSize=128M -Xms256m -Xmx256m


이클립스에서 잡을수 있는 최대 메모리를 설정해주면 간단히 문제가 해결됩니다.

'개발' 카테고리의 다른 글

이클립스 탭 스페이스 (eclipse tab to space)  (0) 2017.09.06
[JAVA] JDK, JRE, JVM 기본 개념 정리  (0) 2017.09.06
API 란 무엇인가?  (0) 2017.09.06
servlet 개념 [서블릿 개념]  (0) 2017.09.05
Spring 4.0 달라진점  (0) 2017.09.05

@I_DC_CD                         VARCHAR(10)

,@I_NOT_FLAG                      CHAR(1)                        = NULL


2개의 값을 받아서  @I_NOT_FLAG  이 변수를 조건에 걸고 싶을때

if ( ISNULL(@I_NOT_FLAG, 'N') = 'N' ) {

M.DC_CD = ISNULL(@I_DC_CD, M.DC_CD)

] else if ( ISNULL(@I_NOT_FLAG, 'N') = 'Y' ) {

M.DC_CD != ISNULL(@I_DC_CD, M.DC_CD)

}


위 내용대로 짜고 싶다면 아래처럼 하면된다


AND (((ISNULL(@I_NOT_FLAG, 'N') = 'N')AND( M.DC_CD = ISNULL(@I_DC_CD, M.DC_CD) ))

OR((ISNULL(@I_NOT_FLAG, 'N') = 'Y')AND( M.DC_CD != ISNULL(@I_DC_CD, M.DC_CD) )))


AND ( ((조건) AND (결과)) or ((조건) AND (결과)) )


복잡해 보이지만 잘 보면 쉬워요^^



'개발 > DB' 카테고리의 다른 글

[MS-SQL] mssql 소수점 연산 방법  (0) 2017.09.11
MSSQL Cursor(커서) 란?  (0) 2017.09.08
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

MSSQL 소수점 계산방법


DECLARE @S_COUNT           AS NUMERIC(18,3)

DECLARE @I_TEST1              AS NUMERIC(18,2)  = 7.00

DECLARE @I_TEST2              AS INT  = 90


SET @S_COUNT = @I_TEST1 * (convert(float,@I_TEST2)/100)

--@I_TEST1 *(@I_TEST2/100)



PRINT @S_COUNT


주석처리한것 처럼 @I_TEST1 *(@I_TEST2/100) 했을경우 (@I_TEST2/100)


계산을 하는 경우 0.000 으로 나옴니다.


담는 변수가 일반 INT가 아니라 NUMBERIC이라 그런듯 합니다.


위에처럼 float으로 처리하던지 아니면


SET @S_COUNT = @I_TEST1 *(convert(decimal(13,3),@I_TEST2)/100)


이렇게 decimal을 사용해서 계산해도 됩니다.


'개발 > DB' 카테고리의 다른 글

ms msql where절 if문 쓰기  (0) 2017.10.30
MSSQL Cursor(커서) 란?  (0) 2017.09.08
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

* MSSQL Cursor(커서) 란?

- 일반적으로 Sql 문 사용 시 결과에 대해서 집합(Table 형태)으로 반환을 합니다.

커서는 이러한 결과 집합을 한 행씩 처리 할 수 있도록 합니다.

 


1. Cursor(커서) 생성 하기


-- Cursor 생성 구문 --


DECLARE test_cursor [ INSENSITIVE ] [ SCROLL ] CURSOR FOR SELECT * FROM temptables

OPEN test_cursor

FETCH NEXT FROM test_cursor


CLOSE test_cursor

DEALLOCATE test_cursor



- 위의 SQL 문을 한줄 씩 살펴 보겠습니다.

+ DECLARE test_cursor CURSOR FOR SELECT * FROM temptables

-> DECLARE 으로 CURSOR 을 선언하는 부분 입니다.

여기서 FOR 구문 뒤에 CURSOR 에 삽입 시켜줄 SELECT 구문을 적용하면 됩니다.


+ OPEN test_cursor

-> 생성된 test_cursor 을 사용하기 위해 OPEN 을 시켜줍니다.

OPEN 은 SELECT 결과 집합을 채우는 역할을 합니다.

* 커서는 사용전에 OPEN 을 해주어야 합니다!


+ FETCH NEXT FROM test_cursor

-> 커서 의 값을 한줄 씩 읽어 옵니다.

FETCH 는 CURSOR 가 가지고 있는 결과 집합에서 행을 반환 합니다.

+ CLOSE test_cursor

-> OPEN 된 커서를 닫아 줍니다.

* 커서와 연결 된 결과 집합을 해제 합니다.


+ DEALLOCATE test_cursor

-> 커서가 제거 됩니다. ( 커서 에서 사용된 리소스를 해제합니다. )



쉽게 말하면,

CURSOR FOR 'QUERY' [커서 생성] -> OPEN [커서 사용준비] -> FETCH [커서 사용]

-> CLOSE [커서 사용해제] -> DEALLOCATE [커서 삭제] 를 해주시면 됩니다.



2. Cursor(커서) 주요 명령문 및 Cursor(커서) 관리 Stored Procedure


-- 커서 명령문 --


- FETCH NEXT

: 현재 행 바로 다음의 결과 행을 반환합니다.

커서에 대해 FETCH NEXT가 첫 번째 인출인 경우에는 결과 집합의 첫 번째 행을 반환합니다.


- FETCH PRIOR

: 현재 행 바로 앞의 결과 행을 반환합니다.

커서에 대해 FETCH PRIOR가 첫 번째 인출인 경우에는 행이 반환되지 않으며 커서는 첫 번째 행 앞에 위치하게 됩니다.


- FETCH FIRST

: 커서의 첫 번째 행을 반환합니다.


- FETCH LAST

: 커서의 마지막 행을 반환합니다.



-- 커서 관리 Stored Procedure --


- sp_cursor_list

: 커서 목록과 그 특성을 반환합니다.


- sp_describe_cursor

: 정방향, 스크롤 커서 등의 커서 특성을 설명합니다.


- sp_describe_cursor_columns

: 결과 집합에서 열의 특성을 설명합니다.


- sp_describe_cursor_tables

: 액세스되는 기본 테이블을 설명합니다.



출처: http://infodbbase.tistory.com/34 [Sharing programming information.]

'개발 > DB' 카테고리의 다른 글

ms msql where절 if문 쓰기  (0) 2017.10.30
[MS-SQL] mssql 소수점 연산 방법  (0) 2017.09.11
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

+ Recent posts