Java & Oracle

JDBC(mysql), 오라클설치(우분투64비트)

AlreadyNo 2014. 4. 14. 12:51

DBConnection.java와  DBClose는 먼저 프로젝트에 추가해놓고 

dbinfo.properties 는

DBDRIVER=com.mysql.jdbc.Driver

DBURL=jdbc:mysql://접속아이피:3306/test

DBUSER=root

DBPWD=javamysql

이렇게 해주고.

build path 해서 라이브러리 추가해주고 시작.


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


//Scrollable ResultSet 에 대한 설명.

public class JdbcDemo {

public static void main(String[] args) throws SQLException {

DBConnection db = new DBConnection();

db.loadDriver();

db.setConnection();

Connection conn = db.getConnection();

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); //커서를 원하는 위치로 갈수 있음. 오직 읽기만 하겠다.

ResultSet rs = stmt.executeQuery("SELECT * FROM phone_book");

rs.afterLast();

while(rs.previous()){

String irum = rs.getString("irum");

System.out.println(irum);

}

rs.absolute(3); //3번째 레코드로 이동.

System.out.println("3번째 레코드" + rs.getString("irum"));

DBClose.close(conn,stmt,rs);

}

}

------------------------------------------------------------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//Scrollable ResultSet 에 대한 설명.
public class JdbcDemo1 {
public static void main(String[] args) throws SQLException {
DBConnection db = new DBConnection();
db.loadDriver();
db.setConnection();
Connection conn = db.getConnection();
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); /db에 업데이트처리를 해주어야한다.
ResultSet rs = stmt.executeQuery("SELECT * FROM phone_book");
//INSERT
rs.moveToInsertRow();  //커서를 입력할자리로 이동. 즉 가장 마지막데이터의 다음에 커서가 이동.
rs.updateInt(1,9);
rs.updateString(2, "천정명");
rs.updateDate(5,new java.sql.Date(System.currentTimeMillis()));
rs.insertRow();  //rs의 업데이트한 것이 원본데이터에 업데이트 한 것과 값이 같게. 데이터베이스에 즉시 인서트한 것이 아니라 rs에 먼저 추가해주고 rs를 추가.
//sql명령어없이 rs에 추가해서 처리하는 방법.
DBClose.close(conn,stmt,rs);
}
}
----------------------------------------------------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//Scrollable ResultSet 에 대한 설명.
public class JdbcDemo2 {
public static void main(String[] args) throws SQLException {
DBConnection db = new DBConnection();
db.loadDriver();
db.setConnection();
Connection conn = db.getConnection();
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM phone_book");
//UPDATE
rs.absolute(5);  //5번째 디비에 위치한 소녀시대를 수정하기 위해 5번째로 이동.
rs.updateInt(3,26);  //resultSet만 update
rs.updateRow(); //진짜 DB에 업데이트
/* //DELETE
rs.absolute(4);  //4번째 위치로 이동해서
rs.deleteRow(); //4번째 위치한 데이터를 삭제 */
DBClose.close(conn,stmt,rs);
}
}
----------------------------------------------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//SQL(Structured Query Language)
/*
 * 1. DDL : CREATE, DROP, ALTER, TRUNCATE, RENAME
 * 2. DCL : GRANT, REVOKE
 * 3. DML : UPDATE, INSERT, DELETE
 * 4. DQL : SELECT
 * 5. TCL : COMMIT, ROLLBACK, SAVEPOINT
 * 
 */
//Trasaction
public class JdbcDemo3 {
public static void main(String[] args) {
boolean trust = true;
DBConnection db = new DBConnection();
db.loadDriver();
db.setConnection();
Connection conn = db.getConnection();
Statement stmt = null;  ResultSet rs = null;
try{
conn.setAutoCommit(false);  //트랜잭션 처리필요, true -->기본값
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                        ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("SELECT * FROM phone_book");
rs.moveToInsertRow();
rs.updateInt(1, 9);  //중복된 데이터가 들어왔다.
rs.updateString(2, "설운도");
rs.updateInt(3, 60);
rs.updateString(4, "011-111-1111");
rs.updateDate(5, new java.sql.Date(System.currentTimeMillis()));
rs.insertRow();
conn.commit();  //이상이 없으면 commit
}catch(SQLException ex){
trust = false;
ex.printStackTrace();
}finally{
try{
//transaction 반영하지 않는다.
if(!trust) conn.rollback();  //문제가 발생해서 catch부분을 가서 trust가 false 가 되면 위의 수행들을 취소함. 
if(rs != null) rs.close();
if(stmt != null) stmt.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}
DBClose.close(conn);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
====================================================================
우분투64비트, centos 64비트 를 윈도우에 옮기고.

윈도우부팅 버츄얼 우분투 64비트에 오라클 깔기.

깨끗한 우분투에 oracle xe-11.2.0-1.0.x86_64rpm.zip  /  60-oracle.conf   /   chkconfig    세개 넣기.

위 파일을 압축 풀고 sudo apt-get update 해줌.

압축푼 폴더 들어가서

sudo apt-get install alien libaio1 unixodbc vim

sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm

ls /sbin/chkconfig 하면 파일이 없다고 뜬다.

아까 옮긴 chkconfig를 옮기기 위해 sudo cp chkconfig /sbin/  엔터.

sudo vim /sbin/chkconfig  확인 후 나가고

sudo chmod 755 /sbin/chkconfig  실행권한 변경.

ls -l /sbin/chkconfig   실행권한 변경확인 

ls /etc/sysctl.d/60-oracle.conf   파일 없는 것확인.

아까 옮긴 60-oracle.conf 옮기기 위해 sudo cp 60-oracle.conf /etc/sysctl.d/

sudo vim /etc/sysctl.d/60-oracle.conf 열어서 확인. 나가고.

sudo service procps start  확인

sudo sysctl -q fs.file-max   확인

sudo vim /etc/sysctl.d/60-oracle.conf 의 내용을 설정 해주는 것임.

free -m  확인 후 넘어감.

sudo ln -s /usr/bin/awk /bin/awk

mkdir /var/lock/subsys   폴더를 만들어주고.

touch /var/lock/subsys/listener    //listener라는 파일 생성

cat /etc/hosts

sudo rm -rf /dev/shm  삭제

sudo mkdir /dev/shm  새로만들어줌.

sudo mount -t tmpfs shmfs -o size=2048m /dev/shm

sudo gedit /etc/profile   을 실행 시켜줘서 제일 아래 밑의 내용을 추가해줌.

#-----------------------------------

#        Oracle-XE Settings

#-----------------------------------

ORACLE_HOME=/u01/app/oracle/product/11.2.0/XE

ORACLE_SID=XE

NLS_LANG='$ORACLE_HOME/bin/nls_lang.sh'

ORACLE_BASE=/u01/app/oracle

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

PATH=$ORACLE_HOME/bin:$PATH


export ORACLE_HOME

export ORACLE_SID

export NLS_LANG

export ORACLE_BASE

export LD_LIBRARY_PATH

export PATH


저장후 나옴. 위에 /u01~~~ 은 아래 oracle*.deb 파일을 깔면 생기는 폴더가 저곳에 생기기 떄문에 경로를 이렇게 해줌.

source /etc/profile 경로를 넣어준 후

echo $ORACLE_HOME  확인

echo $PATH

cat /etc/environment 후 경로 설정 확인.

다시 아까압축푼 Disk1 폴더로 가서 sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb  설치.

cd  로 홈으로 가서 sudo /etc/init.d/oracle-xe configure  를 엔터.

8080과 1521은 엔터로 넘기고

initial configuration: 에서 javaoracle 써주고 한번더써줌. 그리고 y 엔터.

성공이 뜨면 sudo service oracle-xe start  이미 시작되있다고 뜨면

sudo service oracle-xe restart


sqlplus /nolog 하면 접속됨. quit하고


--------안되면 

sudo rm -rf /bin/awk    삭제후

sudo ln -s /usr/bin/awk /bin/awk 다시 해보고.

---------------


quit하고 sudo service oracle-xe start

unset NLS_LANG

sqlplus /nolog

connect sys as sysdba

비번>javaoracle 쓰고 아래를 써줌.

CREATE USER scott IDENTIFIED BY tiger       <-- 반드시 그럴 필요는 없지만 그냥 scott 계정의 패스워드를 tiger 로 설정

DEFAULT tablespace USERS

TEMPORARY tablespace temp;    <-- 대소문자 구분 없다. SQL 이니까...


slelct * from table;

@ /home/mino/Downloads/demobld.sql

show user  하면 scott 이라고 나오고

select * from tab;

select * from dept; 

------- 이건 하는지 안하는지 모르겠네... 

EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

GRANT connect, resource TO scott;

conn scott/tiger

quit

선생님 블로그의 oracle- Oracle Database 10g Express Edition Installaton on Linux Fedora14 들어가서 demobld.sql 를 다운 받고

------- 리스타트후 안됨.

sqlplus scott/tiger