오라클 system 비밀번호를 분실했을 때, 정말 식은땀 날 뻔 했다.

일단 오라클이 설치된 서버의 admin 계정으로 들어가서, cmd 를 띄워두고 아래와 같이 입력한다


C:\>sqlplus "/as sysdba"

SQL> show user

USER is "SYS"


이런식으로 보일 것이다.

그럼 여기에서 계정 암호를 변경해주자.


SQL> alter user system identified by 암호;




한가지 더, system 계정이 lock 걸렸을 때의 대처방법

cmd에서 마찬가지로 아래의 명령어를 입력하자.



SQL> alter user system(유저명이 될수도 있다) account unlock;


그럼 끝

블로그 이미지

김생선

세상의 모든것을 어장관리

,

어플리케이션을 개발하면서 addview를 사용하게 되었다.

addview란, 해당 activity가 호출하는 xml 레이아웃에 소스코드로 직접 view를 만들어서 add를 한다고 보면 된다.


간단히 소스를 보자.


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sign);
		
		myView = new MyView(this);
		LayoutParams param;
		param = new LayoutParams(width, rowheight * 10);
		param.gravity = Gravity.BOTTOM;

		layout = (LinearLayout) findViewById(R.id.layout);
		layout.addView(myView, 1, param);

		findViewById(R.id.btnConfirm).setOnClickListener(this); // 확인
		findViewById(R.id.btnReSign).setOnClickListener(this); // 재서명
		
		GetScreenSize();
		ActivityInitialize();

	}

위와 같이 setContentView에서 sign 레이아웃을 호출하였고, 하단부에서 addview를 통하여 layout 하나를 더 호출한다.

그 결과, 아래와 같다.



밑의 버튼이 달린 부분이 xml로 작성된 레이아웃이고, 좀 더 진한 회색이 addview로 작성된 레이아웃이다.

그럼, 이 부분의 위치를 바꿀 수는 없을까?

버튼을 상단으로 위치하게 할 순 없을까?


방법은 별거없다.


layout.addView(myView, 1, param);


의 1을 0으로 주면 아래의 그림과 같이 변한다.


뭐 addview에 대해서는 좀 더 배워야 하니까, 여기까지 하자.

'어장 Develop > 어장 Android' 카테고리의 다른 글

공지사항 dialog  (2) 2012.09.26
Thread로 ProgressDialog 사용하기  (0) 2012.08.03
listview와 intent  (0) 2011.03.16
listview  (0) 2011.03.12
블로그 이미지

김생선

세상의 모든것을 어장관리

,



안드로이드 어플리케이션을 개발하면서 ProgressDialog를 쓰게 된다.

대부분 로딩화면에서 이 다이얼로그를 사용하는데, 매우 기초적인 다이얼로그의 경우, 작업이 끝나도 dismiss를 통한 수동 종료를 해주어야 하는 식으로 작업한다.


이럴 경우, 간단한 것에는 큰 문제가 없지만 로딩시 몇개의 개체가 불려왔는지에 대한 각종 부분을 보여주기 위해서는 thread를 통한 제어가 필요하다는 것이다.


뭐 여튼, 간단명료하게 설명을 해 보겠다.

ProgressDialog(); // ProgressDialog 호출

이 부분은 ProgressDialog를 호출하는 부분이다.

onCreate에 선언하여 로딩시 쓸 수도 있고, OnClickListener에 선언하여 클릭시 로딩 등에서도 사용이 가능하다.


나의 경우에는 아래와 같이 선언하였다.

	@Override
	public void onClick(View v) {
		String attendance;
		switch (v.getId()) {
		case R.id.btnReSign:
			ProgressDialog(); // 진행바 호출
			myView.reset();
			break;

		}
		finish();
	}



그럼 ProgressDialog();의 부분을 보자.

private ProgressDialog SaveUserSign; // Loading Dialog
	void ProgressDialog() {
		/* ProgressDialog */
		SaveUserSign = ProgressDialog.show(this, "김생선 어플", "저장중입니다.", true, false);

		Thread thread = new Thread(new Runnable() {
			public void run() {
				// 처리할 부분
				handler.sendEmptyMessage(0);
			}
		});
		thread.start();
	}

ProgressDialog이 SaveUserSign이란 이름으로 호출이 되고, SaveUserSign은 ProgressDialog를 .show에 주어진 메시지로 출력이 된다. 

그리고 Thread를 통하여 주석에 위치한 처리할 부분을 처리하고, 이 작업이 끝나면 handler를 호출한다. 

나의 경우, 주석의 위치에 사람들의 서명부분을 저장하고 서버로 올리는 작업을 추가했다. 



마지막으로 종료를 위한 handler부분을 살펴보자.

	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			SaveUserSign.dismiss(); // 다이얼로그 삭제
			// View갱신
		}
	};

handler부분은 SaveUserSign의 다이얼로그를 dismiss 해준다는 내용이 가장 크다.

그 외에 큰 어려움은 없으니 조금만 살펴보고 연구하면 다음엔 더 쉽게 구현할 수 있을 것 같다.

AsyncTask 방법을 사용하는 것도 있다는데... 흐미...

'어장 Develop > 어장 Android' 카테고리의 다른 글

공지사항 dialog  (2) 2012.09.26
[Android] addview를 사용할 때의 위치설정  (0) 2012.08.08
listview와 intent  (0) 2011.03.16
listview  (0) 2011.03.12
블로그 이미지

김생선

세상의 모든것을 어장관리

,

서버를 관리하면서 매일매일 dump 파일을 생성한다.

우리 회사의 경우에는 새벽에 사용자가 없기에 새벽 2시~6시 사이에 덤프파일을 만드는 편이다.

이 덤프파일을 이용해서 import 방법을 해 보고자 한다.

* Export 방법은 차후에.


이 방법은 cmd 명령프롬프트에서 동작한다.

사실 어려운 방법은 아니다.


시작 - 실행 - cmd 입력


이 방법은 전체 데이터베이스를 import 하는 방법이다.

C:\> imp userid=유저명/비밀번호 file='dump파일 경로 입력' full=y


테이블/트리거 등등  다른 방식의 import는 차후에 설명...

블로그 이미지

김생선

세상의 모든것을 어장관리

,

user를 생성하는 방법 중 한가지, SQL Plus에서의 방법이다.

sql plus에서 system 권한으로 접속한다. 회사에서 세팅하는 user는 대부분 DBA 권한을 주기 때문이다.

그리고 아래의 커맨드를 날린다.


1. USER 생성

SQL> CREATE USER 사용자명 IDENTIFIED BY 비밀번호;


대소문자를 구분하지 않으나, 사용자명과 비밀번호에서는 대소문자를 가리는 것 같으니(사실 확인은 안해봤다) 유의하자.

USER 생성에 따라 여러 옵션이 존재하는 것 같은데 그것에 대해서는 추후 설명...


잠시 기다리면 완료메시지가 출력된다. 그럼 접속을 한 번 해 보자.



2. 생성한 USER로 접속

SQL> CONN 사용자명/비밀번호


연결방식에 따라 ORACLE 에러가 날 수도 있고, 올바르게 접속될 수도 있다.

에러가 난다면 아마도 다음과 같은 에러이리라 생각되어진다.


ORA-12560 : TNS : 프로토콜 어댑터 오류


회사에서는 ASP서버를 이용하기 때문에 비밀번호 뒤에 TNS NAME을 적어주어야 접속이 가능해진다. 로컬에서는 물론 적어주지 않아도 된다. 내가 일하는 곳은 원격지이기 때문에 적어주어야 한다.

따라서, 다음과 같은 명령어를 입력해준다.


SQL> CONN 사용자명/비밀번호@ASP이름


위와 같이 올바르게 입력하였다면 다음과 같은 메시지가 출력된다.


"연결되었습니다."


혹시 모르니 다시 확인해본다.


SQL> SHOW USER


그럼 현재 접속된 USER가 보인다. 이제 작업하면 된다.


아, 하나 더. DBA 권한 주는 법.



3. USER에게 DBA 권한 주는 법

SQL> GRANT DBA TO 유저명;


그럼 현재 접속된 유저에게 DBA 권한이 주어진다. 끝.

블로그 이미지

김생선

세상의 모든것을 어장관리

,

오라클 테이블 데이터 조회 및 삭제, 수정 관련된 쿼리를 정리해본다.

데이터 조회

1
SELECT * FROM 'TableName';
cs

 

테이블 삭제

1
DROP TABLE 'TableName';
cs

- 위의 방법으로 하면 테이블 자체가 삭제

 

데이터 삭제

1
DELETE FROM 'TableName' WHERE ColName = '1';
cs

- 'TableName' 이라는 이름의 테이블 중, ColName 컬럼이 1인 데이터만 삭제

 

데이터 수정

 

1
UPDATE TableName SET B = 'KIMFISH' where A = '1';
cs

- 테이블명이라는 테이블 중, B 컬럼의 내용을 KIMFISH로 변경한다, 조건은 A 컬럼의 내용 중 1 이라 되어있는 항목.

- 즉, B열의 내용을 모두 KIMFISH로 변경하고 그에 대한 조건은 A 열 중에서 1이라 되어있는 항목만 걸러내서 수정한다는 이야기이다.

- 위의 쿼리를 실행하면 B 열 1행의 ABCD가 KIMFISH로 변경이 된다.

- 부득이하게 이미지는 엑셀로 작업함 ^^;

 

DROP된 데이터 복구

DROP을 하게 되면 테이블 자체가 삭제되어지기 때문에 나같은 초짜가 테이블을 복구하고 나발이고 하긴 매우 힘들다.

그럴 땐 다음과 같은 명령어를 입력한다.

 

1
FLASHBACK TABLE TableName TO BEFORE DROP;
cs

 

DROP을 여러번 했다면 RECYCLE BIN 에서 최근 DROP 목록을 삭제하고 실행해야 한다.

블로그 이미지

김생선

세상의 모든것을 어장관리

,
해당 내용은 개인적인 기록으로 질문을 일체 받지 않습니다.
알아두시기 바랍니다.

일전에 하나의 액티비티에서 여러개의 아이템을 가져오는 것에 대해 고민 한 적이 있었다.
요사이 바쁜 일이 많기에 좀처럼 코딩을 할 수 없었으나 시간이 나서 잠깐 해 보았다.


listview 에서 해당 아이템으로 intent를 보내는 과정.

  소스1
  1.     protected void onListItemClick(ListView l, View v, int position, long id) {
  2.     super.onListItemClick(l, v, position, id);
  3.    
  4.       if(position == 0){       
  5.         Intent intent = new Intent(this, page_one.class);
  6.         intent.putExtra("abc""kimfish");
  7.         startActivity(intent);
  8.       } 
  9.       else if(position == 1){
  10.             Intent intent = new Intent(this, page_one.class);
  11.         intent.putExtra("abc""bbbb");
  12.             startActivity(intent);
  13.       }
 

소스 1에서 리스트의 구현과 함께 position을 통하여 두 개의 아이템에 각각의 메시지를 전달해준다.
Intent intent = new Intent(this, page_one.class) 에서는 intent로의 이동을 의미한다고 볼 수 있는데, this(현재 클래스.this라 적어도 된다.)에서 page_one.class로 intent 값을 보낸다고 보면 된다. 
 

 intent.putExtra("abc""kimfish");를 보자면 abc란 값에 kimfish를 넣어서 putExtra로 보낸다.
그럼 다음 소스를 보자.


 소스2
  1. Intent intent = getIntent();
  2.          String str = intent.getStringExtra("abc");
  3.          TextView tv = new TextView(this);     //TextView 생성
  4.          tv.setText(str);                      //출력내용 지정
  5.          Log.i("abc"""+tv);
  6.          setContentView(tv);                   //Activity에 나타냄
 
소스1에서 보낸 intent를 getIntent가 받는다.
또한 소스1에서 abc에 kimfish를 넣어 보낸 값을 getStringExtra가 받게 된다.
이 abc에는 kimfish가 저장되어져 있으며 setText(str)값을 통하여 str를 출력, kimfish가 화면에 보이게 된다.

 
위의 내용은 리스트에서 
if(position == 0) 을 터치한 것에 대한 값 출력을 설명하였으나 else if(position == 1) 등을 터치했을 때에도 소스2에는 별다른 코드의 추가 없이 구현이 잘 된다.

참고로 Log.i("abc"""+tv); 는 abc가 잘 받아지는지에 대한 로그캣 출력값이다. 신경 안써도 된다.


이전에 해결한 문제점
2011/03/12 - [어장 안드로이드 프로그래밍] - listview
1. 이 포스트에서 다루듯이 해결.
2. 관련 내용이 아니기에 생략.
3. 소스1에서 내용을 보내기 때문에 for로 position값을 정해줄 수는 없다.
애초에 내가 생각한 것은 소스1에서 받은 position 값이 소스2 에서 받아지면서 이 position(예로 position == 0이면 소스2 에서 0을 받는 식) 값에 따라 해당 xml을 출력하는 방식이었다.
지금 생각해보면 왜 그딴 생각을 했는지 이해가 안된다.


또다시 생긴 문제점
1.
해당 내용을 보낼 때 소스2에서 xml값을 출력할 수는 없을까?
불러올 수 없다면 소스 1에서 많은 내용을 입력하고 많은 내용을 불러와야 할 뿐인가?  

2.
문제점은 아니지만 글 중간 중간에 사용자 키보드 입력을 받는 구간이 있을 것이다. 이제 이것을 구현하면 된다. 그런데 생각해보니 여러모로 1의 문제처럼 xml을 받는 것 보다는 직접 출력 하는 것이 더 좋지 않을까 한다.
이것에 대해서는 나중에 좀 더 생각해봐야 할 것 같다. 

'어장 Develop > 어장 Android' 카테고리의 다른 글

공지사항 dialog  (2) 2012.09.26
[Android] addview를 사용할 때의 위치설정  (0) 2012.08.08
Thread로 ProgressDialog 사용하기  (0) 2012.08.03
listview  (0) 2011.03.12
블로그 이미지

김생선

세상의 모든것을 어장관리

,
해당 내용은 개인적인 기록으로 질문을 일체 받지 않습니다.
알아두시기 바랍니다.

리스트뷰는 리스트를 보여준다.
리스트뷰에 관련된 이벤트들은 종류가 꽤 많다.
listiview
- onListItemClick
- onClickListener
등등

아래는 예시이다.
  1     private static final String[] GENRES = new String[] {
  2         "만만이", "kimfish"
  3     };
  4     
  5     protected void onListItemClick(ListView l, View v, int position, long id) {
  6     	  super.onListItemClick(l, v, position, id);
  7     	  if(position == 0){
  8     		  Intent intent = new Intent(list.this, mysecretnote.class);
  9     		  startActivity(intent);
 10     	  }
 11     	  else if(position == 1){
 12     		  Intent intent = new Intent(list.this, android1.class);
 13     		  startActivity(intent);
 14     	  }
 15     	  
 16     	  
 17 }
onListItemClick은 네 개의 피라미터를 가진다.
ListView I, View v, int positiob, long id 이렇게 네 개이다.
그 중, position을 이용하여 분기를 주면 인텐트로 하여금 해당 액티비티를 호출한다.

리스트는 여기에서 두 개로 보여진다.

만만이를 터치하게 되면 mysecretnote.class가 호출되고
kimfish를 터치하게 되면 kimfish.class가 호출된다.


앞으로 구현해아 할 점

1.
activity를 하나로 고정하고 리스트에서 해당 값을 불러올 수 있을까?
ex.
1~10 아이템 존재, kimfish.class 한 개 존재
1을 터치하면 kimfish 호출, 1에 관련된 내용 출력
.
.
.
10을 터치하면 kimfish 호출, 10에 관련된 내용 출력

2.
학교 열람실 정보를 출력하는 과정에서 해당 한글이 모조리 깨지는 것을 보아 관련 인코딩 문제가 있는 듯 하다.
파싱을 확실히 배워야 하는가?

3.
listview에서 onListItemClick을 호출할 때 해당 포지션값을 for로 입력할 수는 없는걸까?

'어장 Develop > 어장 Android' 카테고리의 다른 글

공지사항 dialog  (2) 2012.09.26
[Android] addview를 사용할 때의 위치설정  (0) 2012.08.08
Thread로 ProgressDialog 사용하기  (0) 2012.08.03
listview와 intent  (0) 2011.03.16
블로그 이미지

김생선

세상의 모든것을 어장관리

,