2018.03.12 10:15

[ColdFusion] DSN 없이 DB에 접속하는 방법

//Load the database driver using java class loader
classLoader = createObject("java", "java.lang.Class");
classLoader.forName("com.mysql.jdbc.Driver");

//Create a driver manager instance
driverManager = createObject("java","java sql.DriverManager");

//Create the connection to the DB
connection = driverManager.getConnection("jdbc:mysql://localhost:3306/demodb?user=demouser&password=demopass");

//Create a connection statement and run our query string
statement = connection.createStatement();
resultSet = statement.ExecuteQuery("SELECT * FROM testtable");

//Convert the resultset into a coldfusion query object
queryObj = createObject("java", "coldfusion sql.QueryTable").init(resultSet);

//Close the connection
connection.Close();
Trackback 0 Comment 0
2017.12.26 09:31

Java class 의 static 메소드 호출 방법

CreateObject 를 할때 init를 하지말고 생성 후 호출


systemObject = createObject("java", "java.lang.System");
writeOutput(systemObject.currentTimeMillis());
Trackback 0 Comment 0
2017.10.27 10:12

콜드퓨전(Coldfusion) 메모

1. 숫자만

변수 = rereplaceNoCase(변수, "[^0-9]", "", "ALL");


2. Base64, encode/decode

strBase64Value = ToBase64( strValue ); //encode
strNewValue = ToString( ToBinary( strBase64Value ) ); //decode


3. CFHTTP 사용 시 주의

- http method를 DELETE로 보내는 경우 규격에 정해진대로 body 내용을 알아서 지워버린다. ㅡㅡ;;

- 301, 302 redirect가 있다면 이동 후의 결과를 리턴한다. POST로 전송해도 redirect가 되면 GET으로 바뀐

  결과를 리턴하니 혼동이 될 수 있다.  원치 않는 경우 redirect = false 로 설정하자.


4. Adobe CFC Generator 버그

필드타입이 ntext 인 경우 타입이 정의되있지 않아 오류발생함

/Adobe CFC Generator/handlers/framework/ORMManager.cfc 562라인쯤

아래 내용으로 고침

public String function getPreferredORMType(sqlType)
        {
           var Types = createobject("java","java.sql.Types");
           var sqlTypeVsJavaType = {};
           sqlTypeVsJavaType.put(Types.TINYINT, "byte");
           sqlTypeVsJavaType.put(Types.SMALLINT, "short");
           sqlTypeVsJavaType.put(Types.INTEGER, "int");
           sqlTypeVsJavaType.put(Types.BIGINT, "long");
           sqlTypeVsJavaType.put(Types.REAL, "float");
           sqlTypeVsJavaType.put(Types.FLOAT, "double");
           sqlTypeVsJavaType.put(Types.DOUBLE, "double");
           sqlTypeVsJavaType.put(Types.DECIMAL, "double");
           sqlTypeVsJavaType.put(Types.NUMERIC, "double");
           sqlTypeVsJavaType.put(Types.BIT, "boolean");
           sqlTypeVsJavaType.put(Types.BOOLEAN, "boolean");
           sqlTypeVsJavaType.put(Types.CHAR, "string");
           sqlTypeVsJavaType.put(Types.NCHAR, "string");
           sqlTypeVsJavaType.put(Types.VARCHAR, "string");
           sqlTypeVsJavaType.put(Types.NVARCHAR, "string");
           sqlTypeVsJavaType.put(Types.LONGNVARCHAR, "string");
           sqlTypeVsJavaType.put(Types.LONGVARCHAR, "string");
           sqlTypeVsJavaType.put(Types.LONGVARCHAR, "string");
           sqlTypeVsJavaType.put(Types.BINARY, "byte[]");
           sqlTypeVsJavaType.put(Types.VARBINARY, "byte[]");
           sqlTypeVsJavaType.put(Types.LONGVARBINARY, "byte[]");
           sqlTypeVsJavaType.put(Types.DATE, "date");
           sqlTypeVsJavaType.put(Types.TIME, "java.sql.Time");
           sqlTypeVsJavaType.put(Types.TIMESTAMP, "timestamp");
           sqlTypeVsJavaType.put(Types.CLOB, "clob");
           sqlTypeVsJavaType.put(Types.NCLOB, "clob");
           sqlTypeVsJavaType.put(Types.BLOB, "blob");
           sqlTypeVsJavaType.put(Types.ARRAY, "java.sql.Array");
           sqlTypeVsJavaType.put(Types.JAVA_OBJECT, "java.lang.Object");
           var result = sqlTypeVsJavaType.get(sqlType);
           if (isnull(result))
           {
               result = "java.lang.Object";
           }
           return result;
        } 


5. Event Gateway 동작 쓰레드 갯수 확인

sendGatewayMessage() 함수를 사용하여 Event Gateway에 데이타를 보낼때 큐가 꽉차면 false 가 리턴되며 값이 전달되지 않는다.

이런 경우에는 현재 사용중인 큐의 갯수를 알아내서 조절하면서 데이타를 전송해야 한다.

gateway = createObject('java', 'coldfusion.eventgateway.GatewayServices').getGatewayServices();
writeOutput(gateway.getmaxQueueSize()); //최대 큐의 갯수
writeOutput(gateway.getQueueSize()); //현재 사용중인 큐의 갯수


6. query의 특정 컬럼 집계

리스트로 변환 : valueList(query.columnname)

합계 : arraySum(query.columnname)


7. Request 내용 가져오기

콜드퓨전은 form element의 이름을 똑같이 해서 값을 넘기는 경우 리스트 형태로 수신이 된다.

하지만 값이 없는 경우는 무시해버리니 주의해야 한다.


<input name="a" value="1">

<input name="a" value="">

<input name="a" value="3">


위와같이 전송하게되면 보통 1,,3 의 리스트로 전송되는걸 기대하지만 결과는 1,3만 온다.

콜드퓨전 레벨에서는 방법이 없고 java api 에서 지원이 되는

data = getPageContext().getRequest().getParameterMap() 를 사용하자

writeDump(data);


단!! getPageContext().getRequest().getParameterMap()로 가져온 내용은 좀 이상하다!!

struct 는 data.key 형태로 사용이 되지 않는다. 반드시 data['key']로 사용해야 하고.

각 key에 들어있는 array는 cf11용 메소드 방식이 사용되지 않는다 ㅡㅡ;

data['key'].len() -> 오류발생, arraylen(data['key']) 형태로 써야한다.








Trackback 0 Comment 0
2017.10.23 10:58

MsSQL 관련 메모

1. 전체 테이블명

SELECT * FROM information_schema.TABLE_CONSTRAINTS;


2. 전체테이블의 컬럼명

SELECT * FROM information_schema.Columns


3. 테이블별 PK 정보

SELECT * FROM information_schema.KEY_COLUMN_USAGE


4. LAST_INSERT_ID

SELECT SCOPE_IDENTITY() AS last_insert_id;


5. index 목록

SELECT
        TableName = t.name,
        IndexName = ind.name,
        IndexId = ind.index_id,
        ColumnId = ic.index_column_id,
        ColumnName = col.name,
    ind.*,
    ic.*,
    col.*
FROM
sys.indexes ind
INNER JOIN
sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
sys.tables t ON ind.object_id = t.object_id
ORDER BY
    ind.name, t.name, ind.index_id, ic.index_column_id

6. ???

SELECT
    SC.DisplayName,
    SR.SearchCategory,
    CoverageType = STUFF((
         SELECT ',' + SR1.CoverageType
         FROM tblSearchReq SR1 WHERE SR.SearchCategory=SR1.SearchCategory AND SR1.CoverageType <> 'Nationwide'
         GROUP BY SR1.SearchCategory, SR1.CoverageType
         FOR XML PATH(''), TYPE).value('.', 'VARCHAR(100)'), 1, 1, ''
    )
FROM
    SearchCategory SC
    INNER JOIN tblSearchReq SR ON SC.CategoryName=SR.SearchCategory
WHERE
    SR.CoverageType <> 'Nationwide'
GROUP BY
    SC.DisplayName, SR.SearchCategory
ORDER BY
    SC.DisplayName
Trackback 0 Comment 0