자바스크립트 제거하는 정규식
String str=”(function(){ var id=’admin’;});”;
System.out.println(str);
str=str.replaceAll(“\\(function.*\\(\\)\\{.*\\}.*\\);”, “”);
System.out.println(str);
—————————————
(function글자들(){글자들}글자들);
을 제거한다.
좌측괄호 ( 가 \\(
우측괄호 ) 가 \\) 임
당신의 업무력 향상과 칼퇴를 돕는 블로그
자바스크립트 제거하는 정규식
String str=”(function(){ var id=’admin’;});”;
System.out.println(str);
str=str.replaceAll(“\\(function.*\\(\\)\\{.*\\}.*\\);”, “”);
System.out.println(str);
—————————————
(function글자들(){글자들}글자들);
을 제거한다.
좌측괄호 ( 가 \\(
우측괄호 ) 가 \\) 임
자료구조 하이어라키
워드클라우드(wordcloud) 만들기
반드시 UTF-8 로 저장된 txt만 가능하다.

1. R소스
library(wordcloud)
library(KoNLP)
library(RColorBrewer)
f<-file(‘c:/image/word.txt’,encoding=’UTF-8′)
textLines<-readLines(f)
nouns<-sapply(textLines,extractNoun,USE.NAMES=F)
close(f)
png(‘c:/image/plz.png’)
wordcloud<-table(unlist(nouns))
wordcloud(names(wordcloud),freq=wordcloud,scale=c(8,0,5),max.words=150,per=.1,min.freq=2,random.order=F)
dev.off()
System.out.println(“COMPLETE”)
2. 자바소스
public static void imgSave() throws Exception
{
RConnection rc=new RConnection();//Rserver Connection
rc.voidEval(“Sys.setenv=(JAVA_HOME=\”c:/Program Files/Java/jre7\”)”);
rc.voidEval(“library(wordcloud)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“library(RColorBrewer)”);
rc.voidEval(“f<-file(\”c:/image/word.txt\”,encoding=\”UTF-8\”)”);
rc.voidEval(“textLines<-readLines(f)”);
rc.voidEval(“nouns<-sapply(textLines,extractNoun,USE.NAMES=F)”);
rc.voidEval(“close(f)”);
rc.voidEval(“png(\”c:/image/plz.png\”)”);
rc.voidEval(“wordcloud<-table(unlist(nouns))”);
rc.voidEval(“wordcloud(names(wordcloud),freq=wordcloud,scale=c(8,0,5),max.words=150,per=.1,min.freq=2,random.order=F)”);
rc.voidEval(“dev.off()”);
System.out.println(“COMPLETE”);
rc.close();
}
3. 임시 저장(즉각 출력)을 위한 자바소스
2번 소스와 txt 및 png 파일 위치만 다르다. 아래와 같이 메타데이터 안의 경로를 찾아넣어주면 jsp에서 <img src=”word.png”> 로만 불러들일 수 있다.
public static void imgSave() throws Exception
{
RConnection rc=new RConnection();
rc.voidEval(“Sys.setenv(JAVA_HOME=\”c:/Program Files/Java/jre7\”)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“library(RColorBrewer)”);
rc.voidEval(“library(wordcloud)”);
rc.voidEval(“f<-file(\”C:/springDev/springStudy/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringWebProject7/word/word.txt\”,encoding=\”utf-8\”)”);
rc.voidEval(“textLines<-readLines(f)”);
rc.voidEval(“nouns<-sapply(textLines,extractNoun,USE.NAMES=F)”);
rc.voidEval(“close(f)”);
//참고: c:/springDev2/springStudy/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/DiningCodeProject/dlist_detail/image/cloudimg/word.jpg
rc.voidEval(“png(\”C:/springDev/springStudy/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringWebProject7/word/word.png\”)”);
rc.voidEval(“wordcloud<-table(unlist(nouns))”);
rc.voidEval(“pal<-brewer.pal(17,\”Set3\”)”);
rc.voidEval(“pal<-pal[-(1)]”);
rc.voidEval(“windowsFonts(malgun=windowsFont(\”Malgun Gothic\”))”);
rc.voidEval(“wordcloud(names(wordcloud),freq=wordcloud,scale=c(8,0.5),max.words=150,rot.per=.1,min.freq=2,random.order=F, colors=pal, family=\”malgun\”)”);
rc.voidEval(“dev.off()”);
System.out.println(“COMPLETE”);
rc.close();
}
Rserve.exe 시스템 오류: jvm.dll이(가) 없어 프로그램을 시작할 수 없습니다

위와 같은 에러가 날 경우 아래와 같이 해결한다.
바탕화면의 내 PC-속성-고급 시스템 설정-고급 에서 Path라는 이름의 시스템 변수를 편집한다. Path라는 시스템 변수가 존재하지 않으면 새로 생성한다.
여기서 jvm.dll 이 존재하는 파일 경로를 쓰면 된다.
파일이 존재하는 위치가 컴퓨터마다 다른데, 내 컴퓨터의 경우 C:\Program Files\Java\jre7\bin\Server 였다.
이 경우 Path 변수에 C:\Program Files\Java\jre7\bin\Server; 라고 뒤 쪽이나 앞 쪽에 써주면 된다.

R 환경변수 세팅
1. R 환경변수 세팅
바탕화면의 내 PC-속성-고급 시스템 설정-고급 에서 Path라는 이름의 시스템 변수를 편집한다. Path라는 시스템 변수가 존재하지 않으면 새로 생성한다.

1-1. R_HOME
시스템 변수 R_HOME 을 새로 만들고
C:\Program Files\R\R-3.2.0
라고 입력하기
1-2. Path
시스템 변수 Path 를 새로 만들어서 C:\Program Files\Java\jre7\bin\server;C:\Program Files\R\R-3.2.0\bin\x64;C:\Users\sist\Documents\R\win-library\3.2\rJava\jri\x64; 라고 쓰기
(기존에 Path가 있을 경우 기존 경로 뒤에
C:\Program Files\R\R-3.2.0\bin\x64;C:\Users\sist\Documents\R\win-library\3.2\rJava\jri\x64;
를 추가하기)
2. Arguments
자바에서 마우스 우클릭 후 Run As -> Run Configurations 로 들어가기

Arguments 탭에서 VM arguments 에 -Djava.library.path=C:\Users\user\Documents\R\win-library\3.2\rJava\jri\x64 라고 쓰기
3. R_HOME
Environment에 R_HOME 변수를 만들어서 C:\Program Files\R\R-3.2.0 라고 값 쓰기.
4. PATH
Environment에 PATH 변수를 만들어서 C:\Program Files\R\R-3.2.0\bin\x64;C:\Users\sist\Documents\R\win-library\3.2\rJava\jri\x64; 라고 값 넣기.
5. LD_LIBRARY_PATH
Environment에 LD_LIBRARY_PATH 변수를 만들어서C:\Program Files\R\R-3.2.0\bin;C:\Program Files\R\R-3.2.0\library; 라고 값 넣기.
6. cmd 처리
cmd 에서 cd c:\program files\r\r-3.2.0\bin 으로 들어가서,
R.exe CMD Rserve.exe 로 실행하기.
이 때, OK, ready to answer queries 가 나와야 정상작동.
태그제거하는 정규식
str = str.replaceAll(“<(/)?([a-zA-Z]*)(
Java Architecture for XML Pasher (JAXP) Java Architecture for XML Binding (JAXB) csv Comma Separated Value의 약자. 말 그대로 “콤마로 구분된 값”. 자바 변수를 자바스크립트 변수로 넘기기 1. 어레이리스트를 넘기기 <script> 2. 단일 변수 넘기기 <script> R스튜디오 다운로드 http://www.rstudio.com/products/rstudio/download/ 에서 RStudio 0.99.441 – Windows XP/Vista/7/8 다운로드 2. 참고 사이트 http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html SQL 문장 Mongo 쿼리 문장 CREATE TALE USERS (a int, b int) db.createCollection(“mycoll”) 테이블 드랍하기 : db.mycoll.drop(); DB명 통째로 삭제하기: use mydb -> db.dropDatabase(); 라고 쓰기 DB명 안의 테이블(=콜렉션) 전체 보기: show tables, 혹은 show collections INSERT INTO USERS VALUES (3,5) db.users.insert({a:3, b:5}) SELECT a, b FROM USERS db.users.find({}, {a:1, b:1}) SELECT * FROM users db.users.find() SELECT * FROM users WHERE age=33 db.users.find({age:33}) SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1}) SELECT * FROM users WHERE age=33 ORDER BY name db.users.find({age:33}).sort({name:1}) SELECT * FROM users WHERE age>33 db.users.find({‘age’:{$gt:33}}) SELECT * FROM users WHERE age<33 db.users.find({‘age’:{$lt:33}}) SELECT * FROM users WHERE name LIKE“%Joe%” db.users.find({name:/Joe/}) SELECT * FROM users WHERE name LIKE “Joe%” db.users.find({name:/^Joe/}) SELECT * FROM users WHERE age>33 AND age<=40 db.users.find({‘age’:{$gt:33,$lte:40}}) SELECT * FROM users ORDER BY name DESC db.users.find().sort({name:-1}) SELECT * FROM users WHERE a=1 and b=’q’ db.users.find({a:1,b:’q’}) SELECT * FROM users LIMIT 10 SKIP 20 SELECT * FROM users LIMIT 10 SKIP 20 SELECT * FROM users WHERE a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) SELECT * FROM users LIMIT 1 db.users.findOne() SELECT DISTINCT last_name FROM users db.users.distinct(‘last_name’) SELECT COUNT(*y) FROM users db.users.count()
SELECT COUNT(*y) FROM users where AGE > 30 db.users.find({age: {‘$gt’: 30}}).count() SELECT COUNT(AGE) from users db.users.find({age: {‘$exists’: true}}).count()
CREATE INDEX myindexname ON users(name) db.users.ensureIndex({name:1}) CREATE INDEX myindexname ON users(name,ts DESC) db.users.ensureIndex({name:1,ts:-1}) EXPLAIN SELECT * FROM users WHERE z=3 db.users.find({z:3}).explain() UPDATE users SET a=1 WHERE b=’q’ db.users.update({b:’q’}, {$set:{a:1}}, false, true) UPDATE users SET a=a+2 WHERE b=’q’ db.users.update({b:’q’}, {$inc:{a:2}}, false, true) DELETE FROM users WHERE z=“abc” db.users.remove({z:’abc’}); 맵리듀스 두번째 1. 몽고디비 인서트 public static void main(String[] args) { 2. 몽고디비 셀렉트 public static void main(String[] args) { DBCursor cursor=null; 3. 비교연산자로 find (몽고디비의 SELECT WHERE) find({“age”,20}); 하면 여기에 조건을 줄 수 있다. $gt (크다) $gte (크거나 같다) $lte (작거나 가다) $lt (작다) $ne (이콜이 아니다) (eq는 없다. 그냥 쓰는게 eq다) public static void main(String[] args) { DBCursor cursor=null; 4. 패턴으로 find (많은 의문이 남아있음.) public static void main(String[] args) { DBCursor cursor=null; System.out.println(); while(cursor.hasNext()){ 5. $in 과 $nin public static void main(String[] args) { DBCursor cursor=null; 맵리듀스 맵리듀스가 이런거였다니 허망하기 짝이 없다. (1) aaa bbb ccc bbb ccc aaa bbb 로 데이터가 넘어온다면, (2) 맵: 첫째로 (aaa,1) (bbb,1) (ccc,1) (bbb,1) (ccc,1) (aaa,1) (bbb,1) 식으로 바꾼다. 이것을 Map이라고 한다. ※ Map: key와 Value의 쌍으로 이루어진 자료구조 (3) 셔플: 둘째로 (aaa,1,1) (bbb,1,1,1) (ccc,1,1) 식으로 같은 것끼리 모을 수 있다. (4) 리듀스: 마지막으로 (aaa,2) (bbb,3) (ccc,2) 로 바꿀 수 있다. 리듀스이다. ※ Reduce: Map을 줄여나감(Reduce). 갯수를 세거나, 밸류의 총합을 내거나, 평균을 구함. 몽고 DB 인서트 public static void main(String[] args) { 맵 리듀스 public static void main(String[] args) { 제이슨(json) 제이손 라이브러리 1. json-lib-2.4-jdk15.jar1 2. EZmorph 1.0.6 <dependency> 제이슨 입력 public static void main(String[] args) { 제이슨 출력 public static void main(String[] args) { 제이슨 입력 2 public static void main(String[] args) { 제이슨 출력 2 public static void main(String[] args) { JSONArray users=(JSONArray)obj.get(“user”); JSONObject emails=(JSONObject)user.get(“emails”); 구글에서 도서 제이슨 얻어오기 깡패파서기 버젼2 package p1; import java.awt.Robot; import javax.swing.JEditorPane; import org.apache.catalina.ant.FindLeaksTask; import com.sun.java.swing.plaf.windows.resources.windows; public class Main { //한땀한땀 입력::: } } public static void keyPress(String str) throws Exception{ while(true){ hWnd = User32.INSTANCE.FindWindow(“OperationStatusWindow”, null); 깡패파서기 package p1; import java.awt.Robot; import javax.swing.JEditorPane; import org.apache.catalina.ant.FindLeaksTask; import com.sun.java.swing.plaf.windows.resources.windows; public class Main { //한땀한땀 입력::: //str=str.toLowerCase(); //keyPress(str); } } public static void keyPress(String str) throws Exception{ } 마샬, 언마샬 정형화: RDBMX(오라클) 반정형화: XML, JSON, HTML – JAXP (P는 파싱의 약자. DOM,SAX) – JAXB(B는 바인드의 약자. xml과 클래스 연결) 비정형화: txt (정규식) ex) .*VO (뒤의 VO 붙은걸 다 달라) ex) \d{1-3}\\.\d{1-3}\\.\d{1-3}\\.\d{1-3} (ip를 달라) ex) ^{A-Za-z} 알파벳으로 시작(^)한다 ex) ^{A-Za-z}{0-9}$ 알파벳으로 시작(^)해서 정수로 끝나는($) 문자 1. pom.xml <!– jaxb-impl 2.2.11 –> <!– jaxb-core 2.2.11 –> <!– jaxb-api 2.2.11 –> —————————————– <!– json.simple 1.1.1 –> <!– Commons Lang 2.6 –> <!– Oracle JDBC Driver 10.2.0.4.0 –> OJDBC는 다운로드가 안 될 것이다. ———————————————————————————————————— info.java package com.sist.web; import javax.xml.bind.annotation.XmlRootElement; import com.sun.xml.txw2.annotation.XmlAttribute; /* —————————————————————— MainClass.java (마샬) public class MainClass { MainClass.java (언마샬) 언마샬 (xml을 클래스로) public class MainClass { JAXBContext jc=JAXBContext.newInstance(Info.class); UTF8로 단어 변환 query=URLEncoder.encode(str, “UTF-8”); 라고 쓰면 “신촌”이 %EC%8B%A0%EC%B4%8C 가 된다. 자바로 외부프로그램 실행 ProcessBuilder는 외부 프로그램(그림판, 메모장, 인터넷 익스플로러..)를 실행할 수 있게 해준다. 아래 예제는 실행하면 (1)인터넷 익스플로러를 켜서 (2)전체를 복사하고 (3)해당내용을 메모장으로 자동으로 옮겨 붙이는 작업을 수행한다. 단점은 속도가 느리다. import java.awt.Robot; public class Main { try { // Pass List to command method. 자바로 강제키입력 실행하면 강제로 폴더를 새로 열어서 google.com을 키입력하고 엔터키를 누르는 매크로. import java.awt.AWTException; public class Main { //로봇을 생성 } 몽고DB 서버가동 바로가기exe 만들기 자료실용(MultiPartResolver) app.xml <?xml version=”1.0″ encoding=”UTF-8″?> <context:annotation-config></context:annotation-config> web.xml <?xml version=”1.0″ encoding=”UTF-8″?> <servlet> <!– 한글 변환 코드 –> <welcome-file-list> ——————————————————————— 컨트롤러 등록 public class DispatcherServlet extends HttpServlet 매개변수로 Request가 더 이상 넘어오지 않음. (HttpSession 과 매개변수를 써야함) <!– 에러코드 –> <?xml version=”1.0″ encoding=”UTF-8″?> <context:annotation-config></context:annotation-config> @Autowired 위치 * 1-1. class A 서울시에 존재하는 모든 동 가락 IoC 스프링 IoC 컨테이너(Spring Inversion of Control Container) -IoC 1. DL (디펜젼시 룩업) 2. DI (디펜젼시 인젝션) 2-1. 세터 인젝션 2-2. 컨스트럭터 인젝션 2-3. 메소드 인젝션 몽고 DB 기초 1. 몽고 디비 서버 가동 mongodb 폴더 내의 bin 폴더 내에 들어가서 mongod –dbpath c:\mongodb\data 라고 쓰면 됨 2. 몽고 디비 접근(1/2) 몽고 디비 서버를 가동한 상태에서 새로운 cmd 창을 열어서 접근해야 함. mongodb 폴더 내의 bin 폴더에 들어가서 mongo 라고 쓰면 됨. 3. 몽고 DB 접근(2/2) “show dbs” 를 통해 소유한 db목록을 보고, “use db명” 을 통해서 원하는 db에 접근한 후, insert, update, delete 등을 실행할 수 있음. ■ db명을 사용 ■ 데이터를 인서트 ■ 모든 데이터를 읽어옴(SELECT * FROM member) ■ 조건에 맞는 데이터를 읽어옴 (SELECT * FROM member WHERE ~) 4. 자바에서 몽고 DB 접근하기 4-0. app.xml <?xml version=”1.0″ encoding=”UTF-8″?> <bean id=”dao” class=”com.dao.MemberDAO”/> 4-1. 커넥션 (생성자에서 처리) public class MemberDAO { }catch(Exception ex){System.out.println(ex.getMessage());} } 4-2. 셀렉트 (리스트로 받아오기) public List<MemberVO> memberAllData(){ —————————— public static void main(String[] args) { } 4-3. 인서트 public void insert(MemberVO vo){ ————————— public static void main(String[] args) { } 4-4. 검색 public List<MemberVO> memberFindData(String str){ ———————————————————- public static void main(String[] args) { } 4-5. 딜리트 public void delete(int no){ ——————————————– public static void main(String[] args) { ApplicationContext app=new ClassPathXmlApplicationContext(“app.xml”); } 4-6. 카운트 //카운트 dbc.count({no:1}) 로도 쓸 수 있다. 4-7. 업데이트 public void update(MemberVO vo){ ———————————————- public static void main(String[] args) { R 기초 1. 다운로드 R-3.2.0-win.exe 를 다운받아 실행. next, next…를 눌러 디폴트 상태로로 설치 2. R을 실행 > install.packages(‘rJava’) > library(‘rJava’) cf: library(‘패키지명’)으로 로딩해야 함. 그렇지 않으면 쓸 수 없음. > install.packages(‘Rserve’) > library(‘Rserve’) > install.packages(‘googleVis’) > library(‘googleVis’) > install.packages(‘wordcloud’) > library(‘wordcloud’) > install.packages(‘RColorBrewer’) > library(‘RColorBrewer’) > install.packages(‘ggplot2’) > library(‘ggplot2’) 3. 예제들 예제 0) sing<-read.csv(“C:/image/a.csv”, header=TRUE); 라고 쓰고, sing 이라고 쓰면 정상적으로 출력되어야 함. 예제1) wordcloud(sing[,1],sing[,2]) 예제2) pal <- brewer.pal(6,”Dark2″) 예제3) 워드 클라우드를 그림 파일로 만들기 png(“c:/image/b.png”) 예제4) 모션차트 R에서 아래를 Motion=gvisMotionChart(Fruits, ※ 참고사이트: http://cran.r– project.org/web/packages/googleVis/vignettes/googleVis_examples.html 4. R서브 세팅 JavaScript Standard Object Notation 몽고db에서 {no:1, id:2, … } 식으로 쓰인 형태 정형화: RDBMX(오라클) 반정형화: XML, JSON, HTML – JAXP (P는 파싱의 약자. DOM,SAX) – JAXB(B는 바인드의 약자. xml과 클래스 연결) 비정형화: txt Jsoup 예제 package com.sist; import org.jsoup.*; public class MainClass { DI DI: 1) 객체 생성 DTD: Documents Type Definition, 표준문서 포맷으로 XML을 추상화 150518 스프링 1. Bean 배치 -> 클래스를 모아서 관리 -> 클래스 메모리 할당, 소멸 –> (설정) 변수값 설정, 메소드 호출, 매개변수 객체의 생명주기 관리(DI: 디펜전시 인젝션) 2. 반복 코딩에 대한 처리 (공통모듈) : AOP -> 트랜젝션, 보안, 로깅 3. MVC (웹) : JQuery, JSON, WebSocket 4. 테스팅, restful 5. ORM, OXM -> XML 또는 Annotation으로 처리 (릴레이션 매퍼, XML매퍼) 6. Maven (1) DI 스프링 한글 필터 spring filter web.xml <!– =============== Filter Character Encoding =============== –> 스프링2: 값 채우기 맵에 값 채우기 <bean id=”list” class=”com.sist4.SawonList”> list에 값 채우기 멤버변수에 값 채우기 스프링 상식 마틴 파울러: “제어가 역전되었다(ioc -> Inversion Of Control)”, 스프링을 ioc 컨테이너라고 함. 로드 존슨: 스프링의 모체를 고안(클래스에 다른 클래스들을 모아 관리한다). DI: 값을 주입한다 = 의존성을 주입한다. 세터(Setter)를 통해 값을 주입하는 것을 DI 라고 한다. Dependency injection(디펜던시 인젝션, 의존성 주입) 0. 설정파일 설정파일은 xml 또는 어노테이션을 쓴다. 1. DI (가)값을 주입하거나, (나)메소드를 호출하는걸 DI라고 한다. (1) 세터 DI (값 주입. 셋 메소드를 통해 값을 채워준다) <bean id=”hello” class=”com.sist3.Hello”> (2) 메소드 DI (호출. 값 주입이 아니다) (2-1)시작(메모리 할당후) init-method=”메소드명” ex) <bean id=”hello” class=”com.sist3.Hello” init-method=”init”> 드라이버 등록할 때 쓴다. (2-2)종료(메모리 해제후) destroy-method=”메소드명” ex) <bean id=”hello” class=”com.sist3.Hello” destroy-method=”메소드명”> disConnection에 많이 쓴다. (3) 생성자 DI (값 주입) <bean id=”hello” class=”com.sist3.Hello” init-method=”init”> </bean> *** bean을 쓸 때 디폴트값은 singleton 이다. (싱글톤 패턴) <bean id=”hello” class=”com.sist3.Hello” scope=”singleton”> 위와 같이 bean에 메모리를 할당할 때, 주소값을 하나만을 사용한다. 이를 싱글톤 패턴이라고 한다. scope를 쓰지 않으면 디폴트가 싱글폰 패턴이다. 이를 변경하고 싶다면 scope=”prototype” 를 주면 된다. 프로토타입은 클론 명령어와 유사한 것으로, 주소값이 바뀌게 된다. ————————————————————————————————————- 2. AOP 중복적으로 2-1. 보안 2-3. 3. ORM(릴레이션 매퍼 / 관계형 데이터베이스를 연결하는 매퍼 / 마이바티스, 아이바티스, 하이버네이트) ***** OXM(xml 매퍼 / 마샬, 언마샬) ***** tx(트랜잭션) ***** expression: taglib beans는 빈즈 —————– —————————- @Autowired 바로 아래의 객체를 자동으로 주입. 2개 이상일 경우 충돌이 난다. @Resource(name=”sawon”) 복수일 경우 위와 같이 리소스를 써야 한다. spring 4.1.6 jar모음 스프링 4.1.6 올인원(all in one, allinone,all-in-one) 첨부파일 2개를 다운받아 압축풀면 아래와 같이 jar파일들이 나온다(34개). ojdbc6.jar PL/SQL 6: 트리거 예제 –트리거(TRIGGER) 1) 데이터베이스에서 미리 정해놓은 조건을 만족하면 3) BEFORE (PRIMARY KEY), AFTER 5) 삭제 6) 수정 7) 권한 부여 (conn system/tiger) 8) 원래 값은 올드, 새값을 포함하면 NEW CREATE [OR REPLACE] TRIGGER trigger_name timing: BEFORE, AFTER, INSTEAD OF(트리거가 특정 뷰에 대한 DML일 경우) CREATE TABLE 상품(품번 NUMBER,항목 VARCHAR2(20),단가 NUMBER); INSERT INTO 상품 VALUES(100,’새우깡’,900); INSERT INTO 입고 VALUES(100,10,9000); INSERT INTO 재고 VALUES(100,10,9000); COMMIT; —————————————————————————– –새우깡이 입고되었을 때 INSERT INTO 입고 VALUES(100,5,4500); ———————————————————————————— –감자깡이 5개 출고되었을 때 CREATE OR REPLACE TRIGGER p_trigger INSERT INTO 판매 VALUES(200,5,4500); PL/SQL 5: 펑션 예제 PROCEDURE 1) 변수 ELSIF (조건문) THEN IF (조건문) THEN 반복문 FOR 변수명 IN REVERSE low..hi LOOP 3) 매개변수 IN, OUT, INOUT 4) 형식 FUNCTION : 리턴형을 가지고 있는 함수 형식) –펑션예제 1 SELECT DISTINCT deptno,emp_max_sal(deptno) FROM emp; —————————————————————— CREATE OR REPLACE FUNCTION emp_count(s_deptno emp.deptno%TYPE) SELECT DISTINCT deptno,emp_count(deptno) ———————————- SELECT empno,ename,get_dname(empno) FROM emp; –IN: 프로시저에 전달하는 역할 plsql4 화면 출력 기능을 활성화 화면출력 &는 입력값(오라클은 데이터 내에 &를 쓸 수 없다) 으로 쓰면 사용자의 입력값을 받는다. :=는 할당연산자 := 를 쓰면 ‘주소에 값을 집어넣겠다’는 뜻이다. 사용자 정의형 변수 1. 변수 CURSOR 사용법 2) CURSOR 열기 3) 데이터 인출 (FETCH) FOR i IN 1..9 LOOP for문 예제 (CURSOR로 ResultSet 받아오기) SET SERVEROUTPUT ON; DECLARE for문 예제2 정상 FOR문(i++) 거꾸로 가는 FOR문(i–) PL/SQL 3: 셀렉트, 딜리트 예제 –미리 만들어진 프로시저 드랍 –CREATE OR REPLACE를 쓰기 때문에 기존의 프로시저를 드랍하지 않아도 된다. –CREATE OR REPLACE를 쓰는 것은 뷰(VIEW)가 있다. 뷰는 ALTER가 없기 때문이다. –추가(인서트)와 수정(업데이트)를 구분해서 실행해주는 프로시저 –셀렉트하는 프로시저 –삭제하는 프로시저 PL/SQL 2: 조건문, 인서트 예제 단일 조건문 (IF~THEN~END IF;) DECLARE ——————————————————————- 다중 조건문(ELSE IF가 아니라 ELSIF를 사용) DECLARE ——————————————————————- DECLARE ——————————————————————————– 프로시저 형식 CREATE OR REPLACE PROCEDURE(매개변수…) IS 지역변수 BEGIN 구현 END; / 삭제 : DROP PROCEDURE proName; 호출: CALL 프로시저명(매개변수) 프로시저에 들어가는 문법을 ‘PL’이라고 한다. ———————————– 프로시저 준비 CREATE TABLE proEmp 로 테이블을 한 개 복사뜬다. ————————————————————– 프로시저 만들기와 인서트 / –데이터 입력 ———————————————————————– 프로시저 만들기와 인서트2 VARIABLE vename VARCHAR2(20); CALL proEmpShow(7788,:vename,:vjob,:vsal,:vday,:vdeptno); –프로시저는 리턴형이 없기 때문에 주소값과 매개변수를 가지고 처리한다 PL/SQL 1: 문법 프로시저(PL/SQL) 피엘에스큐엘 문법 PL/SQL 1) 오라클에서 제공하는 절차적언어 2) 사용자 정의 함수(문법) : procedure, function 2-1) function : 리턴형이 존재 (셀렉트와 관련) 2-2) procedure: 리턴형이 존재하지 않는 함수 (인서트, 업데이트와 관련) – 여러개의 SQL문장을 동시에 처리할 수 있다 – 반복적으로 수행되는 문장에서 주로 사용(자바의 메소드와 비슷한 역할임) 3) 형식 3-2) 구현부 => SQL 3-3) 예외처리부 =>Exception 4) 변수 선언 방식 또는 –emp테이블의 empno와 동일한 데이터 형으로 선언함 (위의 것은 데이터 형의 크기를 외워야 하므로 주로 아래 것으로 사용함) 4-2) ROW변수 선언 4-3) 사용자 정의변수(RECORD) 선언 TYPE ed IS RECORD( 4-4) 목록처리(CURSOR) 5) 제어문 조건문: 단일, 다중, 선택 5-1) 조건문 다중 선택 5-2) 반복문 예제1) 단일변수 선언/출력 1. sqlplus에서 set serveroutput on 이라고 칠것. 2. ed test 로 아래 내용을 작성 DECLARE vempno emp.empno%TYPE; vename emp.ename%TYPE; vjob emp.job%TYPE; vday emp.hiredate%TYPE; vsal emp.sal%TYPE; BEGIN SELECT empno,ename,job,hiredate,sal INTO vempno,vename,vjob,vday,vsal FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE(‘***** Result *****’); DBMS_OUTPUT.PUT_LINE(‘사번:’||vempno); DBMS_OUTPUT.PUT_LINE(‘이름:’||vename); DBMS_OUTPUT.PUT_LINE(‘직위:’||vjob); DBMS_OUTPUT.PUT_LINE(‘입사일:’||vday); DBMS_OUTPUT.PUT_LINE(‘급여:’||vsal); END; / 3. @test로 실행 예제2) 레코드 변수 선언/출력 DECLARE vemp emp%ROWTYPE; BEGIN SELECT * INTO vemp FROM emp WHERE empno=7900; DBMS_OUTPUT.PUT_LINE(‘***** Result *****’); DBMS_OUTPUT.PUT_LINE(‘사번:’||vemp.empno); DBMS_OUTPUT.PUT_LINE(‘이름:’||vemp.ename); DBMS_OUTPUT.PUT_LINE(‘직위:’||vemp.job); DBMS_OUTPUT.PUT_LINE(‘입사일:’||vemp.hiredate); DBMS_OUTPUT.PUT_LINE(‘급여:’||vemp.sal); END; / 예제3) 사용자 정의 레코드 변수 선언/출력 내가 원하는 형태로 정의할 수 있는게 레코드임. (VO를 만드는 것과 같음) DECLARE TYPE empdeptRecord IS RECORD ( empno emp.empno%TYPE, ename emp.ename%TYPE, job emp.job%TYPE, dname dept.dname%TYPE, loc dept.loc%TYPE ); ed empdeptRecord; BEGIN SELECT empno,ename,job,dname,loc INTO ed FROM emp,dept WHERE emp.deptno=dept.deptno AND empno=7900; DBMS_OUTPUT.PUT_LINE(‘***** Result *****’); DBMS_OUTPUT.PUT_LINE(‘사번:’||ed.empno); DBMS_OUTPUT.PUT_LINE(‘이름:’||ed.ename); DBMS_OUTPUT.PUT_LINE(‘직위:’||ed.job); DBMS_OUTPUT.PUT_LINE(‘부서명:’||ed.dname); DBMS_OUTPUT.PUT_LINE(‘지역:’||ed.loc); END; / 예제4) ACCEPT pno PROMPT ‘사번:’ –자바의 SCANNER와 같다 DECLARE vempno emp.empno%TYPE:=&pno; –주소값을 넘김 vename emp.ename%TYPE; BEGIN SELECT ename INTO vename FROM emp WHERE empno=vempno; DBMS_OUTPUT.PUT_LINE(‘이름:’||vename); END; / /* int *p; int a; p=&a; int b=*p; */ 달력 셀렉트(콤보박스) function ychange(){ function mchange(){ function dchange(){ } function inputmbirth(){ ————————————————————————— <table><tr> 별짓을 해도 안되던 마이바티스 CLOB select 어제와 오늘 거의 10시간은 투자한 것 같다. 오라클 11g와 마이바티스3에서는, String을 CLOB으로 Insert하는데는 문제가 없지만, CLOB을 String으로 Select해올 때 null로 받아오는 문제가 있다. 구글의 미국/중국인들, 한국 프로그래머들을 통해 방법을 찾았지만 우선 11g를 쓰는 사람이 드물어서 환경이 맞지 않았고, 쿼리 사용시 어노테이션이 아닌 xml을 파싱하는 프로그래머가 대다수라 소스 구하기가 힘들었다. 마지막에 찾아낸 바로는 <typeHandlers> 가 정석이지만 되지가 않고, @Results({ @Result(column=”content”,property=”content”,jdbcType=JdbcType.CLOB,javaType=HashMap.class, typeHandler=org.apache.ibatis.type.ClobTypeHandler.class) }) 도 되지 않았다. 결국 CLOB째로 받아다가 처리하는걸로 생각을 바꿨다. ———————————————————————————— 1. Object 형으로 칼럼을 SELECT 해온다. @Select(“SELECT content FROM mvcBoard WHERE no=#{no}”) //content 칼럼을 받는다. 이때 반환형은 Object로 받았다. ————————————————————————————- 2. CLOB을 String으로 변환해주는 클래스를 만든다. package com.board.dao; import oracle.sql.CLOB; public static String extractClob(CLOB clob) throws SQLException { final int length = (int) ((CLOB)clob).length(); ——————————————————————————————- 3. DAO에서 처리한다. public static BoardVO boardContentData(int no){ BoardVO vo=new BoardVO(); //데이터를 저장할 공간을 확보한다(VO). String temp=””; temp=som.extractClob((CLOB)obj); //CLOB을 스트링으로 변환해서 temp변수에 담는다. 마이바티스 어노테이션 이용 list.jsp MyEmpDAO.java package com.dao; import java.io.Reader; import org.apache.ibatis.io.Resources; public class MyEmpDAO { MyMapper.java(인터페이스) package com.dao; import java.util.List; import org.apache.ibatis.annotations.Result; public interface MyMapper { MyEmpVO.java package com.dao; import java.util.Date; public class MyEmpVO { MyDeptVO.java package com.dao; public class MyDeptVO { 스프링 메모들 1 VO: 메모리할당 하지 않는다. DAO: @리포지토리 모델: @컨트롤러 리퀘스트 매핑 결합성 약하게: 클래스 하나 수정하면 다른 하나에 영향 스프링=경량 컨테이너: 관계도가 1개(단순함) 프로시저 : 반복수행(페이지 나누기) Annotation: 사용자 정의 클래스 2 client요청(ex)클릭 -> jsp -> 디스패처 서블릿(doget or dopost) —> 모델 -> config.xml : conn을 가짐(겟 커넥션과 디스 커넥션) board-mapper xml에서, parameterType=”int” 은 set int private static SqlSessionFactory ssf;//ssf이 모든 정보를 갖고 있다. 파싱된 내용을 여기에 넣어줘야 한다. public static List<BoardVO> boardAllData(Map map){ 3 프로퍼티=> 셋 메소드를 의미 타입=> 클래스를 의미 4 자바연결(JDBC) TCP연결 : IP와 Port필요 (ip는 로컬호스트, port는 1521) 1. 드라이버 설치 -> class.forName(OracleDriver) 2. 연결 => Connection (Socket포함) 3. SQL 문장 보내고/받기=> statement (BufferdReader, OutputStream) 4. execute Query(결과값 O) //SELECT ResultSet은 표 모양과 흡사하며, 커서가 맨 마지막에 위치하고 있다. 아래서부터 위로 올라가려면 rs.previous()다. BOF 전까지 읽는다.(Begin Of File) ResultSet을 통째로 보내는게 아니라, 필요한 데이터만을 취해서 가져와야 한다. 그래서 “어레이 리스트”를 쓰는 것이다. count ex)회원가입시 아이디 중복체크 오라클: ‘%A%’ 웹서버도 보내는 부분, 받는 부분, 소켓이 있다. ★★★문제는 구조파악이다. 얘를 왜 쓰냐? 를 깨달아야 한다. 어노테이션: 메소드 구분할 때 쓴다. 컨트롤러(제어하는 클래스), 리포지토리(데이터베이스 연결하는 클래스) SELECT zipcode,sido,gugun,dong,NVL(bunji,’ ‘) 객체 지향 프로그램 마이바티스 셀렉트리스트, 하고 SQL문장을 써주면 SQL문장이 어레이리스트에 쫙 들어옴(SQL 매퍼) 양: 조인< 서브쿼리 조인: 테이블 두개를 합침 1.서브쿼리 ; 페이징에서 나온다 아이디: 프라이머리 키 angular js 개념 var m={name:”aaa”,sex:”bbb”,dept:”ccc”}; 자바스크립트와 몽고디비는 위와 같은 형식으로 되어있다. 몽고디비는 서버측, 자바스크립트는 클라이언트이기 때문에 제이쿼리(jquery) 기초 2 1. core(기본사항), 주로 셀렉터 속성값 가져오기 or 태그와 태그사이값 가져오기 문서에 존재하는 두번째p 값 가져오기 input박스 생성하기 맨 처음 태그 가져오기, 맨 마지막 태그 가져오기 $(function(){ 맨 마지막 바로 전의 태그 가져오기 전전의 태그 가져오기 맨 처음 바로 뒤의 태그 가져오기 클릭하면 특정 태그의 특정 속성(attr) 바꾸기 2. 효과(effect) 보이게 하기 / 안 보이게 하기 $(‘img’).show(3000); ※ 괄호 안에 밀리초를 주면 됨 div의 css 바꾸기, 속성 바꾸기 $(‘div’).css({width:350,height:350,border:”1px solid black”}).attr(‘align’,’center’); jaxp, jaxb
csv
자바 변수를 자바스크립트 변수로 넘기기
<c:forEach var=”vo” items=”list”>
[‘<c:out value=”${vo.goods}”/>’]
</c:forEach>
</script>
var question=”<c:out value=”${member.question}”>”;
var i = “<%=i%>”;</c:out>
</script>R스튜디오 다운로드
1. R스튜디오 다운로드
몽고디비 sql 정리
맵리듀스 두번째
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”);
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“person”);
BasicDBObject obj=new BasicDBObject();
obj.put(“name”, “일”);
obj.put(“sex”, “m”);
obj.put(“age”, 20);
dbc.insert(obj);
obj=new BasicDBObject();
obj.put(“name”, “이”);
obj.put(“sex”, “m”);
obj.put(“age”, 30);
dbc.insert(obj);
obj=new BasicDBObject();
obj.put(“name”, “삼”);
obj.put(“sex”, “w”);
obj.put(“age”, 20);
dbc.insert(obj);
obj=new BasicDBObject();
obj.put(“name”, “사”);
obj.put(“sex”, “m”);
obj.put(“age”, 40);
dbc.insert(obj);
obj=new BasicDBObject();
obj.put(“name”, “오”);
obj.put(“sex”, “m”);
obj.put(“age”, 30);
dbc.insert(obj);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”);
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“person”);
BasicDBObject query=null;
cursor=dbc.find();
System.out.println(“1.COUNT…”);
System.out.println(“result:”+cursor.count());
while(cursor.hasNext()){
System.out.println(cursor.next());
}
cursor.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”);
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“person”);
BasicDBObject query=null;
cursor=dbc.find();
System.out.println(“1.COUNT…”);
System.out.println(“result:”+cursor.count());
System.out.println(“================”);
String[] op={“$gt”,”$lt”,”$lte”,”$gte”,”$ne”};
for(String str:op){
query=new BasicDBObject(“age”,new BasicDBObject(str,20));
cursor=dbc.find(query);
System.out.println(“비교연산자: 값 “+str+” “+20);
System.out.println(“Result: “+cursor.count());
while(cursor.hasNext()){
System.out.println(cursor.next());
}
cursor.close();
}
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”);
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“person”);
BasicDBObject query=null;
cursor=dbc.find();
System.out.println(“전체 갯수:”+cursor.count());
System.out.println(“================”);
Pattern j=Pattern.compile(“일”,Pattern.CASE_INSENSITIVE);
query=new BasicDBObject(“name”,j);
BasicDBObject keys=new BasicDBObject();//조건 세 개 and로 묶기?????????????????
cursor=dbc.find(query,keys);
System.out.println(“result: “+cursor.count());
System.out.println(cursor.next());
}
cursor.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”);
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“person”);
BasicDBObject query=null;
cursor=dbc.find();
System.out.println(“전체 갯수:”+cursor.count());
System.out.println(“================”);
String[] or={“$in”,”$nin”};
int[] age_arr={20,30};
for(int i=0;i<or.length;i++){
query=new BasicDBObject(“age”,new BasicDBObject(or[i],age_arr));
cursor=dbc.find(query);
System.out.println(“결과 갯수: “+cursor.count());
while(cursor.hasNext()){
System.out.println(cursor.next());
}
cursor.close();
}
}catch(Exception ex){System.out.println(ex.getMessage());}
}
맵리듀스
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”); //localhost,27017); 포트번호 27017
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“books”);
BasicDBObject book=new BasicDBObject();
book.put(“name”, “자바의 정석”);
book.put(“pages”, 600);
dbc.insert(book);
book=new BasicDBObject();
book.put(“name”, “삼국지”);
book.put(“pages”, 500);
dbc.insert(book);
book=new BasicDBObject();
book.put(“name”, “초한지”);
book.put(“pages”, 700);
dbc.insert(book);
book=new BasicDBObject();
book.put(“name”, “손자병법”);
book.put(“pages”, 2000);
dbc.insert(book);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
// TODO Auto-generated method stub
try{
MongoClient mc=new MongoClient(“localhost”); //localhost,27017); 포트번호 27017
DB db=mc.getDB(“test”);
DBCollection dbc=db.getCollection(“books”);
String map=”function(){ var category; if(this.pages>=600){category=’Big Books’;} else{category=’Small Books’;} emit(category,{name:this.name});}”;
String reduce=”function(key,values){var sum=0; values.forEach(function(doc){sum+=1;}); return {books:sum}; }”;
MapReduceCommand cmd=new MapReduceCommand(dbc, map, reduce, null, MapReduceCommand.OutputType.INLINE, null);
MapReduceOutput out=dbc.mapReduce(cmd);
for(DBObject o:out.results()){
System.out.println(o.toString());
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}제이슨(json)
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
// TODO Auto-generated method stub
try{
//{변수:값, 변수:값…} JSONObject
// [{},{},{},{}] JSONArray
JSONObject obj=new JSONObject();
obj.put(“name”, “박문수”);
obj.put(“sex”, “남자”);
obj.put(“age”, 30);
FileOutputStream fos=new FileOutputStream(“./info.json”);
fos.write(obj.toJSONString().getBytes(“UTF-8”));//바이트로 변환. 이때 UTF-8을 줘야 한글이 깨지지 않는다
fos.close();
System.out.println(“데이터 저장 완료”);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
//제이슨 파서가 제이슨 번역기다.
JSONParser parser=new JSONParser();
Object obj2=parser.parse(new InputStreamReader(new FileInputStream(“./info.json”),”UTF-8″));
JSONObject jsonObj=(JSONObject)obj;
String name=(String)jsonObj.get(“name”);
String sex=(String)jsonObj.get(“sex”);
Long age=Long.valueOf(jsonObj.get(“age”).toString());
System.out.println(“Name”+name);
System.out.println(“Sex”+sex);
System.out.println(“Age”+age);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
AddressBook ad=createAddressBook();
JSONObject obj=JSONObject.fromObject(JSONSerializer.toJSON(ad));
System.out.println(obj.toString());
FileOutputStream fos=new FileOutputStream(“./address.json”);
fos.write(obj.toString().getBytes(“UTF-8”));
fos.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
}
// TODO Auto-generated method stub
try{
AddressBook ad=createAddressBook();
JSONObject obj=JSONObject.fromObject(JSONSerializer.toJSON(ad));
JSONObject user=(JSONObject)users.get(0);
System.out.println(“Name:”+user.get(“name”));
System.out.println(“Phone:”+user.get(“phone”));
System.out.println(“Address:”+user.get(“Address”));
JSONArray email=(JSONArray)emails.get(“email”);
for(int i=0;i<email.size();i++){
JSONObject temp=(JSONObject)email.get(i);
System.out.println(temp.get(“id”)+” “+temp.get(“emailAddr”));
}
}catch(Exception ex){System.out.println(ex.getMessage());}
}깡패파서기 버젼2
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFileChooser;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinDef.DWORD;
import com.sun.org.apache.xerces.internal.impl.dtd.models.DFAContentModel;
static Robot robot;
public static void main(String[] args) {
ProcessBuilder p=new ProcessBuilder(“notepad.exe”);
WinDef.HWND hWnd;//윈도우 핸들
try{
//로봇 선언
robot=new Robot();
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(“MMdd_hhmmss_”);
String d2=sdf.format(d);
System.out.println(d2);
for(int i=1;i<=2;i++){
//기존의 파일이 있다면 미리 지운다
File f=new File(“c:\\data\\”+d2+”g”+i+”.txt”);
if(f.exists()){System.out.println(“기존 파일을 삭제”);f.delete();}
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);//메모장이 없으므로 널이 나와야 한다
if(hWnd!=null){
System.out.println(“실행 중인 메모장을 종료한 후 다시 시작해주세요”);
return;
}
//메모장을 켠다
p.start();
checkProgress();
//메모장이 켜졌는지 검사
hWnd=null;
while(hWnd==null){
System.out.println(“메모장을 로드 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
if(adminEnd()==true){System.exit(0);}
}
robot.delay(500);
//파일을 연다
CtrlO(0);
//열기 창이 닫혔는지 검사
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
while(hWnd!=null){
System.out.println(“열기 창을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
if(adminEnd()==true){System.exit(0);}
}
robot.delay(200);
String target=”건대입구”;
target=URLEncoder.encode(target,”utf-8″);
String str=”http://cafeblog.search.naver.com/search.naver?where=post&sm=tab_pge&query=”+target+”&st=sim&date_option=0&date_from=&date_to=&dup_remove=1&post_blogurl=&post_blogurl_without=&srchby=all&nso=&ie=utf8&start=”+(i*10-10);
System.out.println(str);
Main m=new Main();
m.setClipboardContents(str);
//str=str.toLowerCase();
//keyPress(str);
//url명을 붙여넣기 해서 엔터친다
CtrlA(200);
Del(200);
CtrlV(200);
Enter();
//열기 창이 닫혔는지 검사
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
while(hWnd!=null){
System.out.println(“열기 창을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
if(adminEnd()==true){System.exit(0);}
}
robot.delay(200);
checkProgress();
robot.delay(200);
//파일 저장 윈도우를 연다
CtrlS(0);
//저장 창이 켜졌는지 검사
hWnd=null;
while(hWnd==null){
System.out.println(“저장 창을 로드 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
if(adminEnd()==true){System.exit(0);}
}
robot.delay(200);
//저장한다
m.setClipboardContents(“c:\\data\\”+d2+”g”+i+”.txt”);
CtrlV(200);
Enter();
//저장 창이 닫혔는지 검사
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
while(hWnd!=null){
System.out.println(“저장 창을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
if(adminEnd()==true){System.exit(0);}
}
robot.delay(200);
checkProgress();
robot.delay(200);
//메모장을 끈다
AltF4(200);
while(!f.exists()){
//파일이 존재하지 않는다면 문제가 생긴 것이다
System.out.println(“파일을 저장중”);
}
while(!f.canRead()){
System.out.println(“대기”);
}
//메모장이 꺼졌는지 검사
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
while(hWnd!=null){
//System.out.println(“메모장을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
}
System.out.println(i+”번째 파일 : “+(i*10-10)+”번째부터 “+(i*10-1)+”까지 세이브됨”);
}//포문 닫힘
}
catch(Exception ex){System.out.println(“에러”+ex.getMessage());}
public void setClipboardContents(String str){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection contents = new StringSelection(str);
clipboard.setContents(contents, null);
for(int i=0;i<str.length();i++){
String mykey=str.substring(i,i+1);
int newkey=mykey.charAt(0);
if(mykey.equals(“:”)){
Colon();
}
else if(mykey.equals(“/”)){
Slash();
}
else if(mykey.equals(“.”)){
Dot();
}
else if(mykey.equals(“?”)){
System.out.println(“d”);
Quest();
}
else if(mykey.equals(“&”)){
Andmark();
}
else if(mykey.equals(“_”)){
Underbar();
}
else if(mykey.equals(“=”)){
Eqmark();
}
else if(mykey.equals(“%”)){
Permark();
}
else if(mykey.equals(“1”)){
num1();
}
else if(mykey.equals(“2”)){
num2();
}
else if(mykey.equals(“3”)){
num3();
}
else if(mykey.equals(“4”)){
num4();
}
else if(mykey.equals(“5”)){
num5();
}
else if(mykey.equals(“6”)){
num6();
}
else if(mykey.equals(“7”)){
num7();
}
else if(mykey.equals(“8”)){
num8();
}
else if(mykey.equals(“9”)){
num9();
}
else if(mykey.equals(“0”)){
num0();
}
else{
PressWhat(newkey);
}
robot.delay(200);
}
Enter();
}
//http://web.mit.edu/gleitz/gizmoball/trunk/api/src-html/gizmoball/SwingKeyboardInput.html
public static void Quest() throws Exception{
// robot.keyPress(63);
// robot.keyRelease(63);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void AltF4(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT);
robot.delay(delay);
}
public static boolean adminEnd(){
boolean bef=false;
//메모장을 끄기전, 혹시 이미 메모장이 꺼졌는지 검사(사용자 강제종료인지)
WinDef.HWND hWnd;//윈도우 핸들
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
if(hWnd==null){
System.out.println(“사용자가 강제종료하였습니다.”);
bef=true;
}
return bef;
}
public static void Andmark() throws Exception{
// robot.keyPress(38);
// robot.keyRelease(38);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void Underbar() throws Exception{
// robot.keyPress(95);
// robot.keyRelease(95);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(45);
robot.keyRelease(45);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void num1() throws Exception{robot.keyPress(KeyEvent.VK_1); robot.keyRelease(KeyEvent.VK_1);}
public static void num2() throws Exception{robot.keyPress(KeyEvent.VK_2); robot.keyRelease(KeyEvent.VK_2);}
public static void num3() throws Exception{robot.keyPress(KeyEvent.VK_3); robot.keyRelease(KeyEvent.VK_3);}
public static void num4() throws Exception{robot.keyPress(KeyEvent.VK_4); robot.keyRelease(KeyEvent.VK_4);}
public static void num5() throws Exception{robot.keyPress(KeyEvent.VK_5); robot.keyRelease(KeyEvent.VK_5);}
public static void num6() throws Exception{robot.keyPress(KeyEvent.VK_6); robot.keyRelease(KeyEvent.VK_6);}
public static void num7() throws Exception{robot.keyPress(KeyEvent.VK_7); robot.keyRelease(KeyEvent.VK_7);}
public static void num8() throws Exception{robot.keyPress(KeyEvent.VK_8); robot.keyRelease(KeyEvent.VK_8);}
public static void num9() throws Exception{robot.keyPress(KeyEvent.VK_9); robot.keyRelease(KeyEvent.VK_9);}
public static void num0() throws Exception{robot.keyPress(KeyEvent.VK_0); robot.keyRelease(KeyEvent.VK_0);}
public static void Permark() throws Exception{
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void Eqmark() throws Exception{
robot.keyPress(61);
robot.keyRelease(61);
}
public static void PressWhat(int nkey) throws Exception{
robot.keyPress(nkey-32);
robot.keyRelease(nkey-32);
}
public static void Enter() throws Exception{
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER); //97을 넣으면 숫자1이 나옴
}
public static void Dot() throws Exception{
robot.keyPress(46);
robot.keyRelease(46);
}
public static void Slash() throws Exception{
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
}
public static void CtrlO(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlY(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlW(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlS(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlV(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlA(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void Del(int delay) throws Exception{
robot.keyPress(127);
robot.keyRelease(127);
robot.delay(delay);
}
public static void Colon() throws Exception{
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void checkProgress(){
//프로그레스 창 검사
WinDef.HWND hWnd=null;//윈도우 핸들;
if(hWnd!=null){
char[] windowText = new char[512];
User32.INSTANCE.GetWindowText(hWnd, windowText, 512);//텍스트 받기
String wText = Native.toString(windowText);
System.out.println(“프로그레스 창이 실행중입니다.”+wText);
if(wText==null || wText.equals(“진행률”)){break;}
}
if(hWnd==null){ break;}
}
}
}
깡패파서기
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.io.File;
import javax.swing.JFileChooser;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
static Robot robot;
public static void main(String[] args) {
ProcessBuilder p=new ProcessBuilder(“notepad.exe”);
WinDef.HWND hWnd;//윈도우 핸들
try{
//로봇 선언
robot=new Robot();
for(int i=1;i<=100;i++){
//기존의 파일이 있다면 미리 지운다
File f=new File(“c:\\data\\g”+i+”.txt”);
if(f.exists()){System.out.println(“기존 파일을 삭제”);f.delete();}
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);//메모장이 없으므로 널이 나와야 한다
if(hWnd!=null){
System.out.println(“실행 중인 메모장을 종료한 후 다시 시작해주세요”);
return;
}
//메모장을 켠다
p.start();
//메모장이 켜졌는지 검사
hWnd=null;
while(hWnd==null){
//System.out.println(“메모장을 로드 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
}
//파일을 연다
CtrlO(0);
//열기 창이 켜졌는지 검사
hWnd=null;
while(hWnd==null){
//System.out.println(“열기 창을 로드 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
}
String target=”신촌”;
String str=”https://www.google.co.kr/search?hl=ko&as_q=”+target+”&as_epq=&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&as_filetype=&as_rights=&start=”+(i*10-10);
Main m=new Main();
m.setClipboardContents(str);
//url명을 붙여넣기 해서 엔터친다
CtrlV(200);
Enter();
//열기 창이 닫혔는지 검사
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
while(hWnd!=null){
//System.out.println(“열기 창을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “열기”);
}
robot.delay(100);
//파일 저장 윈도우를 연다
CtrlS(0);
//저장 창이 켜졌는지 검사
hWnd=null;
while(hWnd==null){
//System.out.println(“저장 창을 로드 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
}
robot.delay(100);
//저장한다
m.setClipboardContents(“c:\\data\\g”+i+”.txt”);
CtrlV(200);
Enter();
//저장 창이 닫혔는지 검사
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
while(hWnd!=null){
System.out.println(“저장 창을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(null, “다른 이름으로 저장”);
}
robot.delay(100);
//메모장을 끈다
AltF4(200);
while(!f.exists()){
//파일이 존재하지 않는다면 문제가 생긴 것이다
System.out.println(“파일을 저장중”);
}
while(!f.canRead()){
System.out.println(“대기”);
}
//메모장이 꺼졌는지 검사
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
while(hWnd!=null){
//System.out.println(“메모장을 닫는 중입니다”);
robot.delay(500);
hWnd = User32.INSTANCE.FindWindow(“Notepad”, null);
}
System.out.println(i+”번째 파일 : “+(i*10-10)+”번째부터 “+(i*10-1)+”까지 세이브됨”);
}//포문 닫힘
}
catch(Exception ex){System.out.println(“에러”+ex.getMessage());}
public void setClipboardContents(String str){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection contents = new StringSelection(str);
clipboard.setContents(contents, null);
for(int i=0;i<str.length();i++){
String mykey=str.substring(i,i+1);
int newkey=mykey.charAt(0);
if(mykey.equals(“:”)){
Colon();
}
else if(mykey.equals(“/”)){
Slash();
}
else if(mykey.equals(“.”)){
Dot();
}
else if(mykey.equals(“?”)){
System.out.println(“d”);
Quest();
}
else if(mykey.equals(“&”)){
Andmark();
}
else if(mykey.equals(“_”)){
Underbar();
}
else if(mykey.equals(“=”)){
Eqmark();
}
else if(mykey.equals(“%”)){
Permark();
}
else if(mykey.equals(“1”)){
num1();
}
else if(mykey.equals(“2”)){
num2();
}
else if(mykey.equals(“3”)){
num3();
}
else if(mykey.equals(“4”)){
num4();
}
else if(mykey.equals(“5”)){
num5();
}
else if(mykey.equals(“6”)){
num6();
}
else if(mykey.equals(“7”)){
num7();
}
else if(mykey.equals(“8”)){
num8();
}
else if(mykey.equals(“9”)){
num9();
}
else if(mykey.equals(“0”)){
num0();
}
else{
PressWhat(newkey);
}
robot.delay(200);
}
Enter();
}
//http://web.mit.edu/gleitz/gizmoball/trunk/api/src-html/gizmoball/SwingKeyboardInput.html
public static void Quest() throws Exception{
// robot.keyPress(63);
// robot.keyRelease(63);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void AltF4(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT);
robot.delay(delay);
}
public static void Andmark() throws Exception{
// robot.keyPress(38);
// robot.keyRelease(38);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void Underbar() throws Exception{
// robot.keyPress(95);
// robot.keyRelease(95);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(45);
robot.keyRelease(45);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void num1() throws Exception{robot.keyPress(KeyEvent.VK_1); robot.keyRelease(KeyEvent.VK_1);}
public static void num2() throws Exception{robot.keyPress(KeyEvent.VK_2); robot.keyRelease(KeyEvent.VK_2);}
public static void num3() throws Exception{robot.keyPress(KeyEvent.VK_3); robot.keyRelease(KeyEvent.VK_3);}
public static void num4() throws Exception{robot.keyPress(KeyEvent.VK_4); robot.keyRelease(KeyEvent.VK_4);}
public static void num5() throws Exception{robot.keyPress(KeyEvent.VK_5); robot.keyRelease(KeyEvent.VK_5);}
public static void num6() throws Exception{robot.keyPress(KeyEvent.VK_6); robot.keyRelease(KeyEvent.VK_6);}
public static void num7() throws Exception{robot.keyPress(KeyEvent.VK_7); robot.keyRelease(KeyEvent.VK_7);}
public static void num8() throws Exception{robot.keyPress(KeyEvent.VK_8); robot.keyRelease(KeyEvent.VK_8);}
public static void num9() throws Exception{robot.keyPress(KeyEvent.VK_9); robot.keyRelease(KeyEvent.VK_9);}
public static void num0() throws Exception{robot.keyPress(KeyEvent.VK_0); robot.keyRelease(KeyEvent.VK_0);}
public static void Permark() throws Exception{
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
public static void Eqmark() throws Exception{
robot.keyPress(61);
robot.keyRelease(61);
}
public static void PressWhat(int nkey) throws Exception{
robot.keyPress(nkey-32);
robot.keyRelease(nkey-32);
}
public static void Enter() throws Exception{
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER); //97을 넣으면 숫자1이 나옴
}
public static void Dot() throws Exception{
robot.keyPress(46);
robot.keyRelease(46);
}
public static void Slash() throws Exception{
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
}
public static void CtrlO(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlY(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlW(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlS(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void CtrlV(int delay) throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(delay);
}
public static void Colon() throws Exception{
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
}마샬, 언마샬
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
맨 위 쪽에
<repositories>
<repository>
<id>mesir-repo</id>
<url></url>”>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
</repository>
</repositories> 를 붙여줘야 다이렉트로 받는다.
import com.sun.xml.txw2.annotation.XmlElement;
*
* <info id=””>
* <name></name>
* <age></age>
* </info>
*
*
* 바깥쪽 태그는 클래스 (info)
* 속성은 어트리뷰트 (id)
* 안쪽 태그는 엘리먼트 (name, age)
* 전체를 감쌀 때 루트 엘리먼트
*/
@XmlRootElement
public class Info {
private String name;
private int age;
private String id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
@XmlAttribute
public void setId(String id) {
this.id = id;
}
}
마샬 (클래스를 xml로)
public static void main(String[] args) throws Exception{
JAXBContext jc=JAXBContext.newInstance(Info.class);
Info info=new Info();
info.setName(“심청이”);
info.setAge(30);
info.setId(“shim”);
Marshaller m=jc.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, “EUC-KR”);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(info, new File(“./info.xml”));
System.out.println(“저장완료”);
}
}
public static void main(String[] args) throws Exception{
Unmarshaller m=jc.createUnmarshaller();
Info info=(Info)m.unmarshal(new File(“./info.xml”));
System.out.println(“Name:”+info.getName());
System.out.println(“Age:”+info.getAge());
System.out.println(“Id:”+info.getId());
}
}UTF8로 단어 변환
자바로 외부프로그램 실행(java ProcessBuilder)
import java.awt.event.KeyEvent;
import java.io.*;
import java.util.ArrayList;
static Robot robot;
public static void main(String[] args) throws Exception{
//로봇을 생성
ProcessBuilder b = new ProcessBuilder();
ArrayList<String> v = new ArrayList<>();
v.add(“C:\\Program Files\\Internet Explorer\\iexplore.exe”);
v.add(“http://en.wikipedia.org/“);
b.command(v);
b.start();
robot=new Robot();
robot.delay(10000);
CtrlA();
CtrlC();
b=new ProcessBuilder();
v = new ArrayList<>();
v.add(“notepad.exe”);
b.command(v);
b.start();
robot.delay(2000);
CtrlV();
} catch (Exception ex) { // 에러 처리
System.err.println(“에러” + ex.getMessage());
}
}
public static void CtrlA() throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(200);
System.out.println(“컨트롤A”);
}
public static void CtrlC() throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(200);
System.out.println(“컨트롤C”);
}
public static void CtrlV() throws Exception{
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(200);
System.out.println(“컨트롤V”);
}
}
자바로 강제키입력 (java java.awt.Robot)
import java.awt.Robot;
import java.awt.event.KeyEvent;
static Robot robot;
public static void main(String[] args) throws Exception{
robot=new Robot();
WinE();
robot.delay(1000);
System.out.println(“a”);
AltD();
keyPress(“google.com”);
public static void keyPress(String str) throws Exception{
for(int i=0;i<str.length();i++){
String mykey=str.substring(i,i+1);
int newkey=mykey.charAt(0);
if(mykey.equals(“:”)){
//Colon();
}
else if(mykey.equals(“/”)){
Slash();
}
else if(mykey.equals(“.”)){
Dot();
}
else{
PressWhat(newkey);
}
robot.delay(200);
}
Enter();
}
public static void PressWhat(int nkey) throws Exception{
robot.keyPress(nkey-32);
robot.keyRelease(nkey-32);
}
public static void Enter() throws Exception{
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER); //97을 넣으면 숫자1이 나옴
}
public static void Dot() throws Exception{
robot.keyPress(46);
robot.keyRelease(46);
}
public static void Slash() throws Exception{
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
}
public static void WinE() throws Exception{
robot.keyPress(KeyEvent.VK_WINDOWS);
robot.keyPress(KeyEvent.VK_E);
robot.keyRelease(KeyEvent.VK_E);
robot.keyRelease(KeyEvent.VK_WINDOWS);
robot.delay(400);
System.out.println(“윈도우키+E”);
}
public static void AltD() throws Exception{
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_D);
robot.keyRelease(KeyEvent.VK_D);
robot.keyRelease(KeyEvent.VK_ALT);
robot.delay(200);
System.out.println(“알트+D”);
}
}몽고DB 서버가동 바로가기exe 만들기


자료실용(MultiPartResolver) app.xml
<beans xmlns=”http://www.springframework.org/schema/beans“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xmlns:context=”http://www.springframework.org/schema/context“
xmlns:p=”http://www.springframework.org/schema/p“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd“>
<context:component-scan base-package=”com.*”></context:component-scan>
<!– DataSource –>
<!– SqlSessionFactory –>
<!– Mapper구현 –>
<!– ViewResolver –>
<!– MultiPartResolver –>
<!– DataSource –>
<bean id=”ds” class=”org.apache.commons.dbcp.BasicDataSource”
p:driverClassName=”oracle.jdbc.driver.OracleDriver”
p:url=”jdbc:oracle:thin:@localhost:1521:ORCL”
p:username=”scott”
p:password=”tiger”
p:maxActive=”10″
p:maxIdle=”5″
p:maxWait=”-1″>
</bean>
<!– SqlSessionFactory –>
<bean id=”ssf”
class=”org.mybatis.spring.SqlSessionFactoryBean”
p:dataSource-ref=”ds”>
</bean>
<!– Mapper를 구현하는 클래스 –>
<bean id=”mapper”
class=”org.mybatis.spring.mapper.MapperFactoryBean”
p:sqlSessionFactory-ref=”ssf”
p:mapperInterface=”com.mybatis.dao.DataBoardMapper”>
</bean>
<!– ViewResolver –>
<bean id=”viewResolver”
class=”org.springframework.web.servlet.view.InternalResourceViewResolver”
p:prefix=”/”
p:suffix=”.jsp”>
</bean>
<!– MultiPartResolver –>
<bean id=”multipartResolver”
class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”>
</bean>
</beans>
web.xml
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://java.sun.com/xml/ns/javaee” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd” id=”WebApp_ID” version=”3.0″>
<display-name>SpringWebProject2</display-name>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/app.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>e</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>e</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
=DI (XML, 애너테이션 등록)
=MVC 구조
=ORM
=공통모듈(AOP)
-보안
-트랜잭션
=Tiles, OXM, Spring-data
<param-value>/WEB-INF/config/app.xml</param-value> 은
/WEB-INF/config/app*.xml 을 쓰거나
/WEB-INF/config/one.xml,/WEB-INF/config/two.xml 식으로 쓸 수 있음
{
WebApplicationContext wc;
public void init(StringConfig config){
String path=config.getInitParameter(“contextConfigLocation”);
if(path==null)
path=”/WEB-INF/”+<servlet-name>+”-servlet.xml”; (서블릿네임이 spring일 경우 spring-servlet.xml이 될 수 있음)
wc=new WebApplicationContext(path);
}
doGet, doPost
public void doProcess(){
Model model=()
}
}
@RequestMapping(“a.do”)
//a.do?name=홍길동&page=1& …
public String a(String name,int page,MemberVO vo,HttpSession session){
return “folder/filename”;
}
<error-page>
<error-code>404</error-code>
<location>/error/error404.jsp</location>
</error-page>
분석 순서 : web.xml
DispatcherServlet : Spring
/WEB-INF/applicationContext.xml
FilterDispatcher : struts2
/SRC/struts.xml
ActionServlet : struts
/SRC/struts-config.xml–>
app.xml
<beans xmlns=”http://www.springframework.org/schema/beans“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xmlns:context=”http://www.springframework.org/schema/context“
xmlns:p=”http://www.springframework.org/schema/p“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd“>
<context:component-scan base-package=”com.*”></context:component-scan>
<!– DataSource –>
<bean id=”ds”
class=”org.apache.commons.dbcp.BasicDataSource”
p:driverClassName=”oracle.jdbc.driver.OracleDriver”
p:url=”jdbc:oracle:thin:@localhost:1521:ORCL”
p:username=”scott”
p:password=”tiger”>
</bean>
<!– SqlSessionFactory –>
<bean id=”ssf”
class=”org.mybatis.spring.SqlSessionFactoryBean”
p:dataSource-ref=”ds”
p:configLocation=”Config.xml”>
</bean>
</beans>@Autowired 위치
* {
* @Autowired
* B b;
* }
*
* class A
* {
* @Autowired
* public A(B b){} 생성자(컨스트럭쳐)위의 오토와이어드는 매개변수에 값을 채운다
* }
*
* class A
* {
* @Autowired
* public setB(B b){} 셋 메소드 위에도 올라간다
* }
*
* class A
* {
* @Autowired
* public void initDao(B b){} initDao 메소드 위에만 올라갈 수 있다(일반 메소드위에는 올라갈 수 없다)
* }서울시에 존재하는 모든 동
가락본
가리봉
가산
가양
가회
갈월
갈현
개봉
개봉본
개포
개화
거여
견지
경운
계
고덕
고척
공덕
공릉
공평
공항
과해
관수
관철
관훈
광장
교남
교북
구기
구로
구로본
구산
구수
구의
구파발
군자
궁
궁정
권농
길
길음
낙원
남가좌
남영
남창
남학
남현
내곡
내발산
내수
내자
냉천
노고산
노량진
노유
녹번
논현
누상
누하
능
다
답십리
당산
당인
당주
대림
대방
대신
대조
대치
대현
대흥
도곡
도렴
도림
도봉
도선
도원
도화
독산
독산본
돈암
돈의
동교
동빙고
동숭
동자
동작
둔촌
등촌
마곡
마장
마천
마포
망우
망원
면목
명일
모진
목
묘
무교
무악
무학
묵
묵정
문래
문배
문정
미근
미아
반포
반포본
방배
방배본
방산
방이
방학
방화
번
보광
본
봉원
봉익
봉천
봉천본
부암
북가좌
북아현
북창
불광
사간
사근
사당
사직
산림
산천
삼각
삼성
삼전
삼청
상계
상도
상봉
상수
상암
상왕십리
상월곡
상일
서계
서교
서린
서빙고
서소문
서초
석관
석촌
성내
성북
성산
성수
세곡
소격
소공
송월
송정
송파
송현
수색
수서
수송
수유
수표
수하
순화
숭인
시흥
시흥본
신계
신공덕
신교
신길
신내
신당
신대방
신도림
신림
신림본
신사
신설
신수
신영
신원
신월
신정
신창
신천
신촌
쌍림
쌍문
아현
안국
암사
압구정
양재
양평
양화
여의도
역삼
역촌
연건
연남
연지
연희
염곡
염리
염창
영등포
영천
예관
예장
예지
오곡
오금
오류
오륜
오쇠
오장
옥수
옥인
옥천
온수
와룡
외발산
용강
용답
용두
용문
우면
우이
운니
원남
원서
원지
월계
율현
응봉
응암
이문
이촌
이태원
이화
익선
인사
인의
일원
일원본
입정
자곡
자양
잠실
잠실본
잠원
장교
장사
장안
장위
장지
재
적선
전농
정
정릉
제기
종암
주교
주성
주자
중계
중계본
중곡
중
중림
중학
중화
증산
진관내
진관외
창
창성
창신
창전
창천
천연
천왕
천호
청담
청량리
청암
청운
청진
체부
초
충신
토정
통의
통인
팔판
평
평창
포이
풍납
필운
하계
하왕십리
하월곡
하일
하중
한남
합
합정
항
행당
행촌
현석
현저
혜화
홍은
홍익
홍제
홍지
홍파
화곡
화곡본
화
화양
황학
회기
효자
효제
효창
후암
훈정
휘경
흑석
흥인IoC
몽고 DB 기초

■ 가지고 있는 db목록을 출력
show dbs
use db명
ex) use test
use mydb
db.member.insert({no:1,name:”hong”,tel:”1111-1111″,addr:”seoul”})
※ 중괄호 안쪽이 1개의 row임
db.member.find()
db.member.find({no:1})
<beans xmlns=”http://www.springframework.org/schema/beans“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd“>
</beans>
private MongoClient mc;//Connection
private DB db;//ORCL (mydb)
private DBCollection dbc;//table
//db.member.find()
public MemberDAO(){
try{
mc=new MongoClient(“localhost”);//연결
db=mc.getDB(“test”);
dbc=db.getCollection(“member”);
//dbc.find()
}
List<MemberVO> list=new ArrayList<MemberVO>();
try{
// dbc.find()
//DBCursor cursor=dbc.find();
DBCursor cursor=dbc.find().sort(new BasicDBObject(“no”,-1));
//ORDER BY no
// -1(DESC) 1(ASC)
while(cursor.hasNext()){
BasicDBObject obj=(BasicDBObject)cursor.next();//rs.next()와 동일. 중괄호{} 단위로 가져옴
//{no,name,tel,addr}
MemberVO vo=new MemberVO();
vo.setNo(obj.getInt(“no”));
vo.setName(obj.getString(“name”));
vo.setTel(obj.getString(“tel”));
vo.setAddr(obj.getString(“addr”));
//인트와 스트링, 두 가지 뿐이다(날짜형은 없다)
list.add(vo);
}
}catch(Exception ex){System.out.println(ex.getMessage());}
return list;
}
ApplicationContext app=new ClassPathXmlApplicationContext(“app.xml”);
MemberDAO dao=(MemberDAO)app.getBean(“dao”);
//그냥 출력
List<MemberVO> list=dao.memberAllData();
for(MemberVO vo:list){
System.out.println(vo.getNo()+” “+vo.getName()+” “+vo.getTel()+” “+vo.getAddr());
}
try{
DBCursor cursor=dbc.find();
int max=1;
while(cursor.hasNext()){
BasicDBObject obj=(BasicDBObject)cursor.next();
int no=obj.getInt(“no”);
if(max<no){
max=no;
}
}
cursor.close();
BasicDBObject obj=new BasicDBObject();//DB Object 1개가 블록 1개임
obj.put(“no”, max+1);
obj.put(“name”, vo.getName());
obj.put(“tel”, vo.getTel());
//{}
obj.put(“addr”, vo.getAddr());
dbc.insert(obj);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
ApplicationContext app=new ClassPathXmlApplicationContext(“app.xml”);
MemberDAO dao=(MemberDAO)app.getBean(“dao”);
//인서트
MemberVO vo=new MemberVO();
vo.setName(“박문수”);
vo.setTel(“3333-3333”);
vo.setAddr(“강원”);
dao.insert(vo);
System.out.println(“데이터 추가 완료”);
List<MemberVO> list=new ArrayList<MemberVO>();
try{
BasicDBObject obj1=new BasicDBObject();
obj1.put(“name”, new BasicDBObject(“$regex”,str+”.*”));
// LIKE ‘%str%’
// $lt(<) $gt(>) $le(<=) $ge(>=) $eq(==)
DBCursor cursor=dbc.find(obj1);
while(cursor.hasNext()){
BasicDBObject obj=(BasicDBObject)cursor.next();//rs.next()와 동일. 중괄호{} 단위로 가져옴
//{no,name,tel,addr}
MemberVO vo=new MemberVO();
vo.setNo(obj.getInt(“no”));
vo.setName(obj.getString(“name”));
vo.setTel(obj.getString(“tel”));
vo.setAddr(obj.getString(“addr”));
//인트와 스트링, 두 가지 뿐이다(날짜형은 없다)
list.add(vo);
}
}catch(Exception ex){System.out.println(ex.getMessage());}
return list;
}
ApplicationContext app=new ClassPathXmlApplicationContext(“app.xml”);
MemberDAO dao=(MemberDAO)app.getBean(“dao”);
//검색
Scanner scan=new Scanner(System.in);
System.out.println(“검색어:”);
String name=scan.next();
List<MemberVO> list=dao.memberFindData(name);
for(MemberVO vo:list){
System.out.println(vo.getNo()+” “+vo.getName()+” “+vo.getTel()+” “+vo.getAddr());
}
try{
BasicDBObject obj=new BasicDBObject();
//db.member.remove({no:1})
//다시 말하지만 블록(중괄호)은 베이직디비오브젝트임.
obj.put(“no”, no);
dbc.remove(obj);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
MemberDAO dao=(MemberDAO)app.getBean(“dao”);
//삭제
Scanner scan=new Scanner(System.in);
System.out.println(“번호:”);
int no=scan.nextInt();
dao.delete(no);
System.out.println(“삭제 완료”);
dbc.count()
try{
BasicDBObject where=new BasicDBObject();
where.put(“no”, vo.getNo());
//WHERE no=1
BasicDBObject updateObj=new BasicDBObject();
updateObj.put(“name”, vo.getName());
updateObj.put(“tel”, vo.getTel());
updateObj.put(“addr”, vo.getAddr());
BasicDBObject obj=new BasicDBObject();
obj.put(“$set”, updateObj);//수정
dbc.update(where, obj);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
ApplicationContext app=new ClassPathXmlApplicationContext(“app.xml”);
MemberDAO dao=(MemberDAO)app.getBean(“dao”);
//수정
MemberVO vo=new MemberVO();
vo.setNo(2);
vo.setName(“박문식”);
vo.setTel(“3333-3333”);
vo.setAddr(“강원”);
dao.update(vo);
System.out.println(“데이터 수정 완료”);
}R 기초
※ 첨부파일 a.csv를 다운받아 C드라이브의 image 폴더에 붙여넣기
pal <- pal[-(1)]
# wordcloud 함수 실행
wordcloud(sing[,1],sing[,2],colors=pal, min.freq=3, random.order=F, family=”맑은 고딕”)
wordcloud(sing[,1],sing[,2],colors=pal, min.freq=3, random.order=F, family=”맑은 고딕”)
dev.off()
idvar=”Fruit”,
timevar=”Year”)
plot(Motion)
JSON(JavaScript Standard Object Notation)
Jsoup 예제
import java.util.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public static void main(String[] args) {
List<BaseBallVO> list=new ArrayList<BaseBallVO>();
String[] items={“순위”,”팀명”,”승”,”패”,”무”,”승률”,”연속”};
try{
Document doc=Jsoup.connect(“http://www.koreabaseball.com”).get();
//System.out.println(doc);
Elements trs=doc.select(“table.table01 tbody tr”);
//System.out.println(trs);
for(Element tr:trs){
Iterator<Element> it=tr.getElementsByTag(“td”).iterator();
// System.out.println(it.next().text());
// System.out.println(it.next().text());
// System.out.println(it.next().text());
// System.out.println(it.next().text());
// System.out.println(it.next().text());
// System.out.println(it.next().text());
// System.out.println(it.next().text());
BaseBallVO vo=new BaseBallVO();
vo.setRank(Integer.parseInt(it.next().text()));
vo.setName(it.next().text());
vo.setWin(Integer.parseInt(it.next().text()));
vo.setLose(Integer.parseInt(it.next().text()));
vo.setSame(Integer.parseInt(it.next().text()));
vo.setWinrate(Double.parseDouble(it.next().text()));
vo.setCon(it.next().text());
list.add(vo);
}
}catch(Exception ex){System.out.println(ex.getMessage());}
for(String str:items){
System.out.print(str+”\t”);
}
System.out.println();
for(BaseBallVO vo:list){
System.out.println(vo.getRank()+”\t”+vo.getName()+”\t”+vo.getWin()+”\t”+
vo.getLose()+”\t”+vo.getSame()+”\t”+vo.getWinrate()+”\t”+vo.getCon());
}
}
}
DI
2) 객체 소멸
3) 멤버변수, 생성자, 매개변수 값 주입
4) 클래스 간의 관계 설정 (=의존성 관계설정)
스키마: XML 정의언어150518 스프링
(2) AOP
(3) MVC스프링 한글 필터 spring filter
<filter>
<filter-name>Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 스프링2: 값 채우기
<property name=”map”>
<map>
<entry key=”id” value=”admin”></entry>
<entry key=”pwd” value=”1234″></entry>
</map>
</property>
</bean>
<bean id=”list” class=”com.sist4.SawonList”>
<property name=”list”>
<list>
<ref bean=”s1″></ref>
<!– list.add(s1) –>
<ref bean=”s2″></ref>
<ref bean=”s3″></ref>
</list>
</property>
</bean>
<bean id=”s1″ class=”com.sist4.Sawon”>
<property name=”sabun” value=”1″></property>
<property name=”name” value=”홍길동”></property>
<property name=”dept” value=”영업부”></property>
</bean>
<bean id=”s2″ class=”com.sist4.Sawon”>
<property name=”sabun” value=”2″></property>
<property name=”name” value=”심청이”></property>
<property name=”dept” value=”총무부”></property>
</bean>
<bean id=”s3″ class=”com.sist4.Sawon”>
<property name=”sabun” value=”3″></property>
<property name=”name” value=”박문수”></property>
<property name=”dept” value=”자재부”></property>
</bean>스프링 상식
<property name=”name” value=”박문수”></property>
</bean>
<constructor-arg>
<value>심청이</value>
</constructor-arg>
2-2. 트랜젝션
p는 프로퍼티
일반 클래스는 @Component라고 붙인다.
DAO는 @Repository 라고 붙인다.
모델 클래스는 @Controller 라고 붙인다.
private Sawon s;
private Sawon s;spring 4.1.6 jar모음


ojdbc6.jar
PL/SQL 6: 트리거 예제
PL/SQL 문법을 사용.
자동으로 수행되는 이벤트
2) 사용하는 SQL (INSERT, UPDATE, DELTE)
예) 입고 => 재고 변경
출고 => 재고 변경
4) 형식
CREATE [OR REPLACE] TRIGGER tri_name
BEFORE|AFTER (INSERT,UPDATE,DELETE) ON 테이블명
FOR EACH ROW
BEGIN
처리 문장
END;
/
DROP TRIGGER tri_name
ALTER TRIGGER tri_name
GRANT CREATE TRIGGER TO scott
GRANT ALTER ANY TRIGGER TO scott
GRANT DROP ANY TRIGGER TO scott
:OLD.컬럼명
:NEW.컬럼명
timing
event1 [OR event2 OR event3…]
ON {table_name|view_name|SCHEMA|DATABASE}
[REFFERENCING OLD AD old | NEW as new]
[FOR EACH ROW [WHEN (condition) ] ]
trigger_body
CREATE TABLE 입고(품번 NUMBER,수량 NUMBER,금액 NUMBER);
CREATE TABLE 판매(품번 NUMBER,수량 NUMBER,금액 NUMBER);
CREATE TABLE 재고(품번 NUMBER,수량 NUMBER,금액 NUMBER);
INSERT INTO 상품 VALUES(200,’감자깡’,900);
INSERT INTO 상품 VALUES(300,’맛동산’,1000);
INSERT INTO 입고 VALUES(200,10,9000);
INSERT INTO 입고 VALUES(300,10,10000);
INSERT INTO 재고 VALUES(200,10,9000);
INSERT INTO 재고 VALUES(300,10,10000);
CREATE OR REPLACE TRIGGER j_trigger
AFTER INSERT ON 입고
FOR EACH ROW
BEGIN
UPDATE 재고 SET
수량=수량+:NEW.수량,
금액=금액+:NEW.금액
WHERE 품번=:NEW.품번;
END;
/
SELECT * FROM 재고;
AFTER INSERT ON 판매
FOR EACH ROW
BEGIN
UPDATE 재고 SET
수량=수량-:NEW.수량,
금액=금액-:NEW.금액
WHERE 품번=:NEW.품번;
END;
/
SELECT * FROM 재고;
PL/SQL 5: 펑션 예제
일반 변수 : 변수명 데이터형(vempno NUMBER(4))
참조 변수 : 변수명 테이블형,컬럼명%TYPE
변수명 테이블형%ROWTYPE
TYPE 변수명 IS RECORD
(
)
CURSOR cur_name IS
SELECT~~~
2) 제어문
조건문
IF (조건문) THEN
처리 문장(SQL)
END IF;
IF (조건문) TEHN
처리 문장
처리 문장
ELSE IF;
처리 문장
ELSE
처리 문장
END IF;
FOR 변수명 IN low..hi LOOP
반복처리
END LOOP;
반복처리
END LOOP;
CREATE [OR REPLACE] PROCEDURE pro_name(매개변수)
IS
변수명
BEGIN
처리문장
END;
/
=> max(), count(*)….
CREATE [OR REPLACE] FUNCTION func_name(매개변수)
RETURN 데이터형
IS
변수명
BEGIN
처리
RETURN 결과값
END;
/
CREATE OR REPLACE FUNCTION emp_max_sal(
s_deptno emp.deptno%TYPE
) RETURN NUMBER
IS
max_sal emp.sal%TYPE;
BEGIN
SELECT MAX(sal) INTO max_sal FROM emp WHERE deptno=s_deptno;
RETURN max_sal;
END;
/
–펑션2
RETURN NUMBER
IS
max_count NUMBER;
BEGIN
SELECT COUNT(*) INTO max_count
FROM emp
WHERE deptno=s_deptno;
RETURN max_count;
END;
/
FROM emp;
–펑션3
CREATE OR REPLACE FUNCTION get_dname(s_empno emp.empno%TYPE)
RETURN VARCHAR2 IS emp_dname dept.dname%TYPE;
BEGIN
SELECT dname INTO emp_dname FROM dept WHERE deptno=(SELECT deptno FROM emp WHERE empno=s_empno);
RETURN emp_dname;
END;
/
–OUT: 프로시저로부터 값을 얻어오는 역할 PL/SQL 4: 커서(CURSOR), 반복문(FOR문)
SET SERVEROUTPUT ON;
DBMS_OUTPUT.PUT_LINE(vno || ‘텍스트’ || vname);
…
WHERE empno= ‘&empno’;
스칼라변수(오라클의 일반변수) : CHAR, VARCHAR2…
참조변수
(1) %TYPE (2) %ROWTYPE (3) TYPE
CURSOR (ROW의 집합) => ResultSet
1) CURSOR 선언
CURSOR cur_name
IS
SELECT * FROM emp (서브쿼리)
OPEN cur_name;
3-1)상태
%NOTFOUND : 데이터가 모두 인출된 상태
%FOUND : 데이터가 있는지 여부를 확인
%ISOPEN : cursor가 오픈된 상태인지 확인
%ROWCOUNT : 몇개를 인출했는지 확인
4) CURSOR를 닫는다
CLOSE cur_name;
2. 제어문
FOR 변수 IN lo..hi LOOP
처리문장
END LOOP;
i
END LOOP;
vemp emp%ROWTYPE;
— CURSOR 선언
CURSOR C1 IS SELECT * FROM emp;
BEGIN
FOR vemp IN C1 LOOP
EXIT WHEN C1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vemp.ename||’ ‘||vemp.hiredate||’ ‘||vemp.job);
END LOOP;
END;
/
SET SERVEROUTPUT ON;
DECLARE
CURSOR emp_cursor IS SELECT ename,sal FROM emp;
star VARCHAR2(1000);
cnt NUMBER:=0;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘사원 급여 현황’);
FOR cur_var IN emp_cursor LOOP
EXIT WHEN emp_cursor%NOTFOUND;
star:=null;
cnt:=ROUND(cur_var.sal/100,0);
FOR i IN 1..cnt LOOP
star:=star||’*’;
END LOOP;
DBMS_OUTPUT.PUT_LINE(cur_var.ename||’ ‘||cur_var.sal||’ ‘||star);
END LOOP;
END;
/
SET SERVEROUTPUT ON;
DECLARE
BEGIN
FOR i IN 0..5 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
SET SERVEROUTPUT ON;
DECLARE
BEGIN
FOR i IN REVERSE 0..5 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
PL/SQL 3: 셀렉트, 딜리트 예제
DROP PROCEDURE proEmpInsert;
DROP PROCEDURE proEmpShow;
CREATE OR REPLACE PROCEDURE proEmpInUP(
vempno IN proEmp.empno%TYPE,
vename IN proEmp.ename%TYPE,
vjob IN proEmp.job%TYPE,
vsal IN proEmp.sal%TYPE,
vdeptno IN proEmp.deptno%TYPE
)
IS
BEGIN
–사번이 없으면 만들고, 사번이 있으면 수정(업데이트한다)
IF(vempno=0) THEN
INSERT INTO proEmp VALUES((SELECT NVL(MAX(empno)+1,1) FROM proEmp),vename,vjob,SYSDATE,vsal,vdeptno);
ELSE
UPDATE proEmp SET ename=vename,job=vjob,sal=vsal,deptno=vdeptno WHERE empno=vempno;
END IF;
COMMIT;
END;
/
CREATE OR REPLACE PROCEDURE proEmpShow(
vempno IN proEmp.empno%TYPE,
vename OUT proEmp.ename%TYPE,
vjob OUT proEmp.job%TYPE,
vday OUT proEmp.hiredate%TYPE,
vsal OUT proEmp.sal%TYPE,
vdeptno OUT proEmp.deptno%TYPE
)
IS
BEGIN
SELECT ename,job,hiredate,sal,deptno INTO vename,vjob,vday,vsal,vdeptno FROM proEmp WHERE empno=vempno;
END;
/
CREATE OR REPLACE PROCEDURE proEmpDelete(vempno IN proEmp.empno%TYPE)
IS
BEGIN
DELETE FROM proEmp WHERE empno=vempno;
COMMIT;
END;
/PL/SQL 2: 조건문, 인서트 예제
vename emp.ename%TYPE;
vdname dept.dname%TYPE;
vdeptno emp.deptno%TYPE;
BEGIN
SELECT ename,deptno INTO vename,vdeptno
FROM emp
WHERE empno=7900;
IF(vdeptno=10) THEN
vdname:=’영업부’;
END IF;
IF(vdeptno=20) THEN
vdname:=’기획부’;
END IF;
IF(vdeptno=30) THEN
vdname:=’자재부’;
END IF;
IF(vdeptno=40) THEN
vdname:=’총무부’;
END IF;
DBMS_OUTPUT.PUT_LINE(‘***** Result *****’);
DBMS_OUTPUT.PUT_LINE(‘이름:’||vename);
DBMS_OUTPUT.PUT_LINE(‘부서:’||vdname);
END;
/
vename emp.ename%TYPE;
vdname dept.dname%TYPE;
vdeptno emp.deptno%TYPE;
BEGIN
SELECT ename,deptno INTO vename,vdeptno
FROM emp
WHERE empno=7900;
IF(vdeptno=10) THEN
vdname:=’영업부’;
ELSIF(vdeptno=20) THEN
vdname:=’기획부’;
ELSIF(vdeptno=30) THEN
vdname:=’자재부’;
ELSIF(vdeptno=40) THEN
vdname:=’총무부’;
END IF;
DBMS_OUTPUT.PUT_LINE(‘***** Result *****’);
DBMS_OUTPUT.PUT_LINE(‘이름:’||vename);
DBMS_OUTPUT.PUT_LINE(‘부서:’||vdname);
END;
/
vename emp.ename%TYPE;
vcomm emp.comm%TYPE;
BEGIN
SELECT ename,comm INTO vename,vcomm
FROM emp
WHERE empno=7654;
IF(vcomm>0) THEN
DBMS_OUTPUT.PUT_LINE(vename||’님의 성과급은 ‘||vcomm||’입니다’);
ELSE
DBMS_OUTPUT.PUT_LINE(vename||’님의 성과급은 없습니다’);
END IF;
END;
/
AS (SELECT empno,ename,job,hiredate,sal,deptno FROM emp);
CREATE OR REPLACE PROCEDURE proEmpInsert(
vename emp.ename%TYPE,
vjob emp.job%TYPE,
vsal emp.sal%TYPE,
vdeptno emp.deptno%TYPE
)
IS
BEGIN
INSERT INTO proEmp VALUES(
(SELECT NVL(MAX(empno)+1,1) FROM proEmp),
vename,vjob,SYSDATE,vsal,vdeptno);
COMMIT;
END;
CALL proEmpInsert(‘박문수’,’대리’,3000,10);
SELECT * FROM proEmp;
–데이터 입력
CREATE OR REPLACE PROCEDURE proEmpShow(
vempno IN emp.empno%TYPE,
vename OUT emp.ename%TYPE,
vjob OUT emp.job%TYPE,
vsal OUT emp.sal%TYPE,
vday OUT emp.hiredate%TYPE,
vdeptno OUT emp.deptno%TYPE)
IS
BEGIN
SELECT ename,job,sal,hiredate,deptno INTO vename,vjob,vsal,vday,vdeptno
FROM emp
WHERE empno=vempno;
END;
/
VARIABLE vjob VARCHAR2(20);
VARIABLE vsal NUMBER;
VARIABLE vday VARCHAR2(20);
VARIABLE vdeptno NUMBER;
PRINT vename;
PRINT vjob;
PRINT vsal;
PRINT vday;
PRINT vdeptno;
–OUT변수가 콜 바이 레퍼런스에 해당된다(주소 넣는다). 값을 받고 싶으면 OUT을 쓴다.
–쓰지 않으면 IN이다 (콜 바이 밸류)
–OUT을 쓰게 되면 포인터이고 IN을 쓰면 일반변수다.
–두 개 다 쓰고 싶다면 INOUT 이라고 쓰면 된다
–주소 대신에 클론을 쓰고 포인터 대신에 아웃을 쓴다PL/SQL 1: 문법
=> max, min, count 등 셀렉트 문법
– 프로시저는 캐시메모리에 저장 (속도가 빠르다)
ex) 페이지나누기
3-1) 선언부 => 변수 선언(지역변수)
4-1) 단일변수 선언
vempno NUMBER(4);
vempno emp.empno%TYPE;
vemp emp%ROWTYPE => 레코드변수 (자바에서는 VO와 같다)
필요한 데이터를 사용자 정의한다. 사용자 정의 타입(레코드)는 조인이 걸려도 쓸 수 있다.
vempno NUMBER,
vename VARCHAR2(10)
);
CURSOR => ArrayList와 비슷. 자바에서는 ResultSet과 같다.
조건문, 반복문
단일
IF(조건문) THEN
SQL
END IF;
IF(조건문) THEN
SQL
ELSE IF(조건문) THEN
SQL
ELSE
SQL
END IF;
IF(조건문) THEN
SQL
ELSE
SQL
END IF;
FOR i IN 1..9 LOOP
처리
END LOOP;



달력 셀렉트(콤보박스)

mchange();
}
var jm=$(‘#jmonth’).val();
var jy=$(‘#jyear’).val();
if(jm==1 || jm==3 || jm==5 || jm==7 || jm==8 || jm==10 || jm==12){
$(“#jday”).html(“<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>”);
}
else if(jm==2){
if((jy % 400)==0 || ((jy % 4)==0)&&((jy % 100)!=0)){
//윤년
$(“#jday”).html(“<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option>”);
}
else{
$(“#jday”).html(“<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option>”);
}
}
else{
$(“#jday”).html(“<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option>”);
}
inputmbirth();
}
inputmbirth();
var jy=$(‘#jyear’).val();
var jm=$(‘#jmonth’).val();
var jd=$(‘#jday’).val();
if(jm.length==1){
jm=”0″+jm;
}
if(jd.length==1){
jd=”0″+jd;
}
$(“#mbirth”).val(jy+”/”+jm+”/”+jd);
}
<td style=”width: 40%;”>
<select id=”jyear” onchange=”ychange()”>
<c:forEach var=”i” begin=”1900″ end=”2014″>
<option>${i}</option>
</c:forEach>
<option selected>2015</option>
</select>
</td>
<td style=”width: 30%;”>
<select id=”jmonth” onchange=”mchange()”>
<c:forEach var=”i” begin=”1″ end=”12″>
<option>${i}</option>
</c:forEach>
</select>
</td>
<td style=”width: 30%;”>
<select id=”jday” onchange=”dchange()”>
<c:forEach var=”i” begin=”1″ end=”31″>
<option>${i}</option>
</c:forEach>
</select>
</td>
</tr></table>
<input type=”text” name=”mbirth” id=”mbirth”>별짓을 해도 안되던 마이바티스 CLOB select
<typeHandler javaType=”java.lang.String” jdbcType=”CLOB” handler=”org.apache.ibatis.type.ClobTypeHandler”/>
</typeHandlers>
public Object boardContentData2(@Param(“no”) int no);
import java.io.IOException;
import java.sql.Clob;
import java.sql.ResultSet;
import java.sql.SQLException;
public class som {
final char [] buffer = new char [length];
int charactersRead;
try {
charactersRead = clob.getCharacterStream().read(buffer, 0, length);
} catch (IOException e) {
throw new RuntimeException(“CLOB를 읽는데 문제가 발생했습니다:”,e);
}
return new String(buffer,0,charactersRead);
}
}
vo = mMapper.boardContentData(no); //게시물 전체를 가져오는 쿼리를 실행한다.
Object obj=mMapper.boardContentData2(no); //Object 형으로 content칼럼을 얻어오는 쿼리를 실행한다.
try {
}catch (SQLException ex) {System.out.println(ex+”d”);}
vo.setContent(temp); //temp변수를 vo에 싣는다.
return vo; //vo를 되돌려 준다.
}마이바티스 어노테이션 이용
<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
pageEncoding=”EUC-KR” import=”java.util.*,com.dao.*”%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt” %>
<%
List<MyEmpVO> list=MyEmpDAO.empdeptAllData();
%>
<c:set var=”list” value=”<%=list%>”></c:set>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd“>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<table border=1 width=”600″>
<tr>
<th>사번</th>
<th>이름</th>
<th>직위</th>
<th>입사일</th>
<th>급여</th>
<th>부서번호</th>
<th>부서명</th>
<th>근무지</th>
</tr>
<c:forEach var=”vo” items=”${list}”>
<tr>
<td>${vo.empno}</td>
<td>${vo.ename}</td>
<td>${vo.job}</td>
<td>
<fmt:formatDate value=”${vo.hiredate}” pattern=”yyyy-MM-dd”/>
</td>
<td>${vo.sal}</td>
<td>${vo.deptno}</td>
<td>${vo.mdv.dname}</td>
<td>${vo.mdv.loc}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
import java.util.*;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
private static SqlSessionFactory ssf;
private static MyMapper mMapper=null;
static
{
try
{
Reader reader=Resources.getResourceAsReader(“Config.xml”);
// XML 파싱
ssf=new SqlSessionFactoryBuilder().build(reader);
reader.close();
Class[] mapper={com.dao.MyMapper.class};//인터페이스 전체를 모아서 구현해줌
for(Class m:mapper){
//클래스를 읽어서 메모리 할당
ssf.getConfiguration().addMapper(m);//메소드가 전부 구현되었음.
}
//구현된 메모리 객체를 받는다.
mMapper=ssf.openSession(true).getMapper(MyMapper.class);//구현된 주소를 가져옴.
}catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
public static List<MyEmpVO> empdeptAllData(){
return mMapper.empdeptAllData();
}
}
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
// while(rs.next()){
// My EmpVO vo=new MyEmpVO();
// vo.setEmpno(rs.getInt(“empno”))
// }
//조인시 데이터 맞춰놓기
@Results({
@Result(column=”empno”,property=”empno”),
@Result(column=”ename”,property=”ename”),
@Result(column=”job”,property=”job”),
@Result(column=”hiredate”,property=”hiredate”),
@Result(column=”sal”,property=”sal”),
@Result(column=”deptno”,property=”deptno”),
@Result(column=”dname”,property=”mdv.dname”),
@Result(column=”loc”,property=”mdv.loc”)
})
//프로펄티에 컬럼 집어넣어라.
@Select(“SELECT empno,ename,job,hiredate,sal,e.deptno,dname,loc”
+ ” FROM myEmp e,myDept d”
+ ” WHERE e.deptno=d.deptno”)
public List<MyEmpVO> empdeptAllData();
}
private int empno;
private String ename;
private String job;
private Date hiredate;
private int sal;
private int deptno;
private MyDeptVO mdv=new MyDeptVO();
public MyDeptVO getMdv() {
return mdv;
}
public void setMdv(MyDeptVO mdv) {
this.mdv = mdv;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
}
private int deptno;
private String dname;
private String loc;
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
스프링 메모들
응집성 강하게: 같은 기능의 메소드를 모아줌
조건분기
XML : 이미 만들어져있는 클래스(어노테이션을 달 수가 없으므로 beans 내의 bean사용)
1. 해당 모델 클래스 찾는다
2. 메소드 수행 handlerRequest
3. 모델 <===> DAO
4. request에 결과값 싣는다
ex) request.setAttribute()
5. 디스패처 서블릿
6. jsp: forward() 되면서 실행
board-mapper : ps를 가짐(프리페어 스테이트먼트 = SQL문장)
#{start}는 get(“start”)와 같음
static//스태틱 블록을 쓰자.(메모리 할당하지 않는다)
{
try{
Reader reader=Resources.getResourceAsReader(“Config.xml”);//파싱하자 마자 커넥션이 만들어질거다.
//xml을 읽었음
ssf=new SqlSessionFactoryBuilder().build(reader);
/*
*
* getConnection(),disConnection()
* 저장(Map)
* ===============================
* id sql
* ===============================
* boardAllData SELECT~~~
*/
}catch(Exception ex){System.out.println(“BoardReplyDAO파일-ssf static:”+ex.getMessage());}
}
List<BoardVO> list=new ArrayList<BoardVO>();
SqlSession session=null;
try{
session=ssf.openSession();//이제 세션이 셀렉트부터 conn까지 다 가지고있다.
/////session.commit();
// 셀렉트 100개를 날리고 마지막에 한 번 커밋 날리는것. 이것을 트랜잭션이라고 한다.
/*
* 오픈세션은 두가지가 있다
* openSession() => 디폴트는 폴스다. autoCommit(false)
* openSession(boolean b) 0
*/
list=session.selectList(“boardAllData”,map);
}catch(Exception ex){
/////session.rollback();
System.out.println(“BoardReplyDAO파일-boardAllData:”+ex.getMessage());}
finally{
if(session!=null){
session.close();//세션이 ps,conn다 가지고 있음.
}
}
return list;
//return ssf.openSession().selectList(“boardAllData”,map);
JDBC 라이브러리: 자바 데이터베이스 커넥티드.
execute Update(결과값 X) //INSERT UPDATE DELETE–결과값이 없다
0번:정상수행, 1번:비정상수행
그러므로 우선 커서를 맨 위로 올려야 한다. 그 뒤 다음값, 다음값.. 식으로 읽어야 한다.
그게 rs.next()다. EOF까지 읽는다.(End Of File)
max ex)예약번호 max치에 +1 자동증가
rank ex)조회수 순으로 정렬
자 바: ‘%’||’A’||’%’
-보낼때:Request 클래스 (OutputStream가 들어있다)
-받을때:Response 클래스 (Buffered Reader가 들어있다)
-소켓은 브라우저에 있다(브라우저 주소라인에. 주소가 연결되는 부분이다)
invoke를 할때 메소드 앞에 어노테이션이 붙어있으면 ‘구분’해서 가져올 수 있다. 스프링의 80%는 어노테이션이다.
FROM zipcode
WHERE dong LIKE ‘%신촌%’;
1) 데이터 보호: 캡슐화
2) 재사용: 상속, 포함(★포함클래스가 핵심:필요한 클래스를 갖다놓고 쓴다)
3) 변경, 추가: 다형성
4) 사물을 단순화: 추상화(클래스 설계) ex)우편번호를 데이터 5개로 단순화, 사원을 데이터 9개로 단순화..
서브쿼리: 쿼리문 두개를 합침
주민번호: 후보키 (대체할만한 키)angular js 개념
m.name
m.sex
m.dept ====> JSON방식(자바스크립트 데이터 표현법)
그 둘을 연결해주면 빅데이터를 바로 갖다 뿌릴 수 있다. 이걸 연결해주는게 앙글라 js이다.제이쿼리(jquery) 기초 2
※ 셀렉터:
$(function(){
var jq=$(‘p’);
alert($(jq[1]).text());
});
$(function(){
$(‘<input type=text id=”aaa” value=”text”>’).appendTo(‘body’);
});
alert($(‘li:first’).text());
alert($(‘li:last’).text());
});
alert($(‘li:last’).prev().text());
alert($(‘li:last’).prev().prev().text());
alert($(‘li:first’).next().text());
$(‘img’).click(function(){
$(‘img’).attr(‘src’,’image/b.jpg’);
});
$(‘img’).hide(3000);