서버에 JNDI등록 후 Context 인스턴스로 lookup시에 발생

크 게 두 가지 원인 존재함

-서버에 해당이름의 리소스가 없는 경우
주로 설정한 이름과 소스상에서 바인딩하는 이름이 상이해서 발생
설정값과 소스를 확인해서 일치시켜서 해결

-서버에 해당이름의 리소스를 생성하기 위한 라이브러리들이 클래스패스에 없는 경우
Tomcat서버에 아파치 DBCP를 JNDI 리소스로 등록해서 DataSource를 생성하는 경우 설정에 아무 문제가 없더라도 위와 같은 에러가 발생

Tomcat에서 dbcp DataSource를 생성하기 위해서는 Context 인스턴스로부터  NamingContext인스턴스를 생성하고 해당 JNDI이름을 통해  DataSource를 생성하는 과정에서
commons dbcp
commons collections
commons pool

위의 3개 라이브러리가 필요함

서버 설정상이나 서버 시작시에 JNDI로 인한 인스턴스 생성과정을 추적하여 관련 라이브러리의 존재여부를 확인하지 않음. 해당 라이브러리들을 서버의 classpath에 등록시키면 해결

tomcat 설치후 포트를 8080으로 셋팅하였다..
톰켓을 구동하니까 이미 사용하고 있는 포트라구 변경하라 한다;;;

곰곰히 생각해보니까 오라클에서 웹으로 DB관리하는 프로그램이
8080포트를 사용하고 있었다...;;;

오라클 포트를 변경하는 명령어는 아래와 같다

SQL>EXEC DBMS_XDB.SETHTTPPORT(원하는포트번호);

**************************************************************************************************
******************************* PORT 번호 변경하기 *****************************************
1. SQL Plus 실행 : sqlplus /nolog
2. Database 접속 : CONNECT SYSTEM/설치할 때 입력한 패스워드
3. Port 변경 명령 수행 : EXEC DBMS_XDB.SETHTTPPORT(5000);
4. SQL Plus 종료 : exit
**************************************************************************************************


**************************************************************************************************
**************************************************************************************************
SELECT * FROM V$NLS_PARAMETERS where parameter='NLS_CHARACTERSET';
**************************************************************************************************
**************************************************************************************************

 

**************************************************************************************************
**************************************************************************************************
필요시 : scott_create.sql 실행
**************************************************************************************************
**************************************************************************************************


The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.


명령어 요약

mysql 실행 = mysql -u root -p Enter

데이터베이스 생성= create database ju;

기본 데이터베이스 보기 = show databases;
사용할 데이터 베이스 선택 = use db01

디비안의 테이블 만들기 = create table 테이블명 ( 칼럼1 데이터형,칼럼2 데이터형);

디비안의 테이블 보기 = show tables;

테이블 안의 항목보기 = show columns from tb01; or desc tb01;

테이블 안에 데이터 넣기 = insert into 테이블명 (칼럼1,칼럼2) values (칼럼1값,'칼럼2값');

테이블 안에 모든레코드 보기 = select * from tb01;

필드 추가하기 = alter table 테이블명 add column 필드명 데이터형;
레코드 추가하기 = mysql> insert into tb01 (number,name,address,wdate,wtime) values
-> (2,'second','another','1999-10-23','10:30:00');
입력된데이터업데이트 = update 테이블명 set 필드명='new add' where 조건

한번에 여러필드 값 수정 = update tb01 set wdate=19991022, wtime=062218 where number=1;
레코드 지우기 = delete from tb01 where number=2;

테이블 지우기 = drop table tb01;

종료 = quit


1. 윈도우용 mysql 실행하기

cmd 입력한 후 도스모드에서 mysql -u root -p Enter를 쳐본다.

패스를 설정했기 때문에 도스모드 아무곳에서나 해도 상관없다.

그리고 비밀번호를 입력하면

mysql > 이 나오고 정상실행..

2.MySQL 서버 구조 살펴보기 ★★★

MySQL < Database < Table < Record < Datatype

MySQL 서버안에 여러 데이터 베이스가 있고 , 디비안에 테이블 들이 있으며,
테이블안에는 레코드(가로줄) 가 있고 , 그안에는 데이터형(정수형,문자형,날짜형)
으로 구성된다.

테이블을 만들기 위해서는 반드시 디비를 선택하거나 , 디비를 만들어야 한다.

데이터 값이 저장 되는 것은 테이블 이며 , 테이블을 생성하기 위해서는 반드시 먼저
디비를 만들어야 한다.

2. MYSQL 데이터베이스 만들기

자료를 담기위해선 상자곽이 필요하다.

데이터 베이스 생성

mysql > create database ju;




3.MySQL 서버의 기본 데이터 베이스 보기


mysql> show databases;
+-------------+
| Database |
+-------------+
| mysql |
| test |

| ju |
+-------------+
3 rows in set (0.06 sec)



4.사용할 데이터베이스 를 선택
mysql> use db01
Database changed



5.디비 안의 테이블을 만들어라.


mysql> create table tb01 (number integer,name char(10));
Query OK, 0 rows affected (0.00 sec)

create table 테이블명 ( 칼럼1 데이터형,칼럼2 데이터형);

SQL 문장의 마지막은 ; 를 붙여서 명령을 실행하라고 시킨다.
; 를 안넣어도 실행하는 명령 도 있기는 하다. 예> use 명령, quit 명령


6. db01 디비 안에 있는 테이블 보기


mysql> show tables;


+----------------------+
| Tables in database01 |
+----------------------+
| tb01 |
+----------------------+




7.테이블 안의 항목을 보자.

mysql> show columns from tb01;


+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| number | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+---------+----------+------+-----+---------+-------+


아래 명령도 같은 작동을 한다.

mysql> desc tb01;



8 . tb01 테이블 안에 데이터 를 넣어라.

mysql> insert into tb01 (number,name) values (1,'suhoi');
Query OK, 1 row affected (0.00 sec)


insert into 테이블명 (칼럼1,칼럼2) values (칼럼1의값,'칼럼2의값');

숫자는 ' ' 를 사용하지 않고 , 문자열은 반드시 ' ' 안에 넣어야 한다.




9. tb01 테이블 안에 모든 레코드를 보자

mysql> select * from tb01;


+---------+---------+
| number | name |
+---------+---------+
| 1 | suhoi |
+---------+---------+



★필드 추가하기


10.테이블 안에 필드 추가하기

tb01 테이블 안에 address 필드 를 추가해보자.

mysql> alter table tb01 add column address char(20);

Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

alter table 테이블명 add column 필드명 데이터형;


11. 1번에 두개의 필드를 추가하자

mysql> alter table tb01 add column wdate date,add column wtime time;

Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

wdate date 란것은 wdate 는 날짜 데이터 형이고
wtime time 란것은 wtime 는 시간 데이터 형이라는 뜻이다.


잘 추가 되었는지 확인해보자

mysql> select * from tb01;
+---------+---------+---------+---------+---------+
| number | name | address | wdate | wtime |
+---------+---------+---------+---------+---------+
| 1 | first | NULL | NULL | NULL |
+---------+---------+---------+---------+---------+




12. 다중입력

MySQL 은 한 라인에 모든 것을 넣을 수도 있지만 여러줄에 넣을 수도 있다.
여러줄에 넣을 려면 ; 를 마지막 줄에만 넣어야 한다. 예제를 바로 보면서 이해하라.
아래 두개의 다른폼은 같은 동작을 취한다.


한 라인 입력
mysql> create table table33 (number integer,name char(30));

다중 입력 1
mysql> create table table33
-> (number
-> integer,
-> name
-> char(30));

다중입력 2
mysql> create table table33
-> (number integer,
-> name char(30));

다중입력 1과 다중입력 2는 같은 동작을 취하며 ,아래는 잘못 만든 예 이다.
mysql> create table table33
-> (field01 inte
-> ger,
-> field02
-> char(30));

★ 쿼리도중에 명령이 틀렸을 경우 는 c 를 하면 된다.
mysql> create table table33
-> (number inte,
-> c
mysql>





13. 레코드 추가하기

mysql> insert into tb01 (number,name,address,wdate,wtime) values
-> (2,'second','another','1999-10-23','10:30:00');

Query OK, 1 row affected (0.00 sec)

문자형은 (char) 반드시 ' ' 안에 넣어야 한다.

표준 날짜형은 "yyyy-mm-dd" 이다.
표준 시간형은 "hh:mm:ss" 이다.
☆ 날짜형과 시간형도 ' ' 안에 넣어야 한다.
' ' 안에 넣지 않을 경우 yyyymmdd 이런식으로 붙여서 입력 해야 한다. hhmmss 도
마찬가지 이다.




14. 다른 데이터형 추가하기
화살표키 중 ↑를 누르면 전에 버퍼에 저장되어 있던 명령들이 나온다.
그것에서 데이터만 바꾸고 명령을 하면 다른 데이터가 추가 된다.
★ 98 은 되지 않으며, NT 와 2000 만 된다. 리눅스 도 당스 된다.


mysql> select * from tb01;
+---------+-----------+------------------+------------+----------+
| number | name | address | wdate | wtime |
+---------+-----------+------------------+------------+----------+
| 1 | suhoi | NULL | NULL | NULL |
| 2 | suhoi2 | address2 | 1999-10-23 | 10:30:00 |
+---------+-----------+------------------+------------+----------+


우리는 이제 다했다



15. 입력된 데이터 업데이트 하기

하나의 필드 값 수정하기

여기서도 역시 ' ' 를 붙여주어야 한다. 어느곳에? 문자열 에는 반드시 ' ' 를 넣어야
한다.

mysql> update tb01 set address='new add' where number=1;


Query OK, 1 row affected (0.00 sec)

update 테이블명 set 필드명='new add' where 조건
number=1 인 레코드의 address 를 new add 로 수정 하는 명령이다.
number=1 은 조건 이며 가로줄을 선택한다.


16. 한번에 여러 필드 값 수정하기

mysql> update tb01 set wdate=19991022, wtime=062218 where number=1;

Query OK, 1 row affected (0.00 sec)



아래 처럼 보이는가?

mysql> select * from tb01;
+---------+-----------+------------------+------------+----------+
| number | name | address | wdate | wtime |
+---------+-----------+------------------+------------+----------+
| 1 | suhoi | new add | 1999-10-22 | 06:22:18 |
| 2 | suhoi2 | address2 | 1999-10-23 | 10:30:00 |
+---------+-----------+------------------+------------+----------+


한번 으로 여러개의 필드값 수정하기

mysql> update tb01 set wtime=152901 where wdate>19990101;


Query OK, 3 rows affected (0.00 sec)

날짜가 19990101 이후 인것의 wtime 는 모두 수정하는 것이다.



mysql> select * from tb01;
+---------+-----------+------------------+------------+----------+
| number | name | address | wdate | wtime |
+---------+-----------+------------------+------------+----------+
| 1 | suhoi | new add | 1999-10-22 | 15:29:01 |
| 2 | suhoi2 | address2 | 1999-10-23 | 15:29:01 |
+---------+-----------+------------------+------------+----------+




17. 레코드 지우기

mysql> delete from tb01 where number=2;


Query OK, 1 row affected (0.01 sec)

delete from 테이블명 where 조건
number=2 인것의 레코드를 지우는 명령이다.레코드는 가로줄이다.


mysql> select * from tb01;
+---------+-----------+------------------+------------+----------+
| number | name | address | wdate | wtime |
+---------+-----------+------------------+------------+----------+
| 1 | suhoi | new add | 1999-10-22 | 15:29:01 |
+---------+-----------+------------------+------------+----------+



18. 테이블 지우기


mysql> drop table tb01;


Query OK, 0 row affected (0.01 sec)

mysql> show tables;


19. 종료하기
mysql> quit
Bye






★ PHP 에서의 MySQL 서버 연결
PHP 파일 안에서 mysql 서버를 연결 할려면 root 에 비번은 없게 주어야 한다.

mysql_connect('localhost','root','');
mysql_select_db("db01");

로 연결 하여 사용하며 나머지 부분은 모두 동일 하다.
root 사용자 가 db01 를 만들었으며 비밀번호는 아직 없다.


 
연결
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://219.153.12.14:3306/webdb", "root", "1234");

종료
conn.close();

- insert

insert into goodsinfo (code, title, writer, price) values ('10001', '뇌를 자극하는 Java 프로그래밍', '김윤명', 27000);

- update

update goodsinof set writer:='토마스 코멘 외 3명', price:=33600 where code = '10005';

- delete

delete from goodsinfo where code = '10005';

테이블을 삭제하는 방법

drop table goodsinfo;


create table goodsinfo (code char(5), title varchar(50), writer varchar(20), price int(8));

반드시 있어야 하는 항목은 뒤 부분에 not null을 붙인다. 이렇게 하면 해당 항목이 누락된 채 데이터를 입력했을 때 즉시 에러가 발생하기 때문에 나중에 발생할 가능성이 있는 문제를 미연에 방지 할 수 있다.

create table goodsinfo(
    code   char(5) not null,
    title     varchar(50) not null,
    writer  varchar(20) not null,
    price   int(8) not null
);


데이터베이스 만드는 방법

mysqladmin -u root -p create newdb




데이터베이스 삭제하는 방법

mysqladmin -u root -p drop newdb

JSP 페이지는 서블릿 클래스와 달리 web.xml 파일에 등록하지 않아도 웹 브라우저에서 호출할 수 있지만, 초기화 파라미터를 기재하기 위해서는 web.xml 파일에 등록해야한다.

web.xml 파일의 루트 엘리먼트인 <web-app> 아래에 <servlet>과 <servlet-mapping> 이라는 두 개의 서브엘리먼트를 쓴다. 이 중<servlet> 엘리먼트 JSP 페이지가 있는 위치를 지정하는 역할을 하고, <servlet-mapping> 엘리먼트는 JSP 페이지에 부여할 새로운 URL을 포함하는 역할을 한다.

<web-app>
<servlet>
<servlet-name>winners-jsp</servlet-name>
<jsp-file>/Winners.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>winners-jsp</servlet-name>
<url-pattern>/winners</url-pattern>
</servlet-mapping>
</web-app>


그리고 나서 이 JSP 페이지에 초기화 파라미터를 기재하는 방법은 아래와 같다.

JSP 페이지의 초기화 파라미터를 기재하는 방법은 서블릿 클래스의 경우와 동일하다.

<servlet> 엘리먼트 아래에 <init-param> 이라는 서브엘리먼트를 쓰고,  그 아래에 다시 <param-name>과 <param-value>라는 두 개의 서브엘리먼트를 쓴다. 그리고 그 두 서브엘리먼트 안에 각각 초기화 파라미터의 이름과 값을 쓰면 된다.

<jsp-file>/Winners.jsp</jsp-file>
<init-param>
<param-name>FILE_NAME</param-name>
<param-value>winner-list.txt</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>winners-jsp</servlet-name>
<url-pattern>/winners</url-pattern>
</servlet-mapping>
</web-app>

+ Recent posts