https://www.acmicpc.net/problem/2577

import java.util.Scanner;

public class Main {
 public static void main (String [] args ) {
	 int a = 0;
	 int b = 0;
	 int c = 0;
	 int mul = 0;
	 
	 Scanner scan = new Scanner (System.in);
	 a = scan.nextInt();
	 b = scan.nextInt();
	 c = scan.nextInt();
	 
	 mul = a*b*c ;
	 String parseMul = Integer.toString(mul);
	 
	 
	 int [][] arr = new int [10][2];
	 
	 
	 for(int j = 0 ; j <10 ; j++) {
		 for (int i = 0; i <parseMul.length(); i ++ ) {
//			 System.out.println("parseMul : "+Character.getNumericValue((parseMul.charAt(i))));
//			 System.out.println("check num : "+Integer.toString(j));
//			 System.out.println("is Equal : "+ (Character.getNumericValue(parseMul.charAt(i)) == j));
//			 
			 if(Character.getNumericValue((parseMul.charAt(i))) == j){
				 arr[j][1]++;
			 }
		 }
		 System.out.println(arr[j][1]);
	 }
	 	 
 }
	
}

https://www.acmicpc.net/problem/1152

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		String input = "";
		int count =0;
		Scanner scan = new Scanner(System.in);
		boolean check = false;
		input = scan.nextLine();
		input = input.trim();
		
		String []a = input.split(" ");
		//System.out.println("배열 개수"+a.length);
		for(int i = 0; i <a.length; i++) {
			

//			System.out.println("값은 '"+a[i]+"'입니다"); 
			// 띄어쓰기만 입력하거나 아무것도 입력하지 않았을때 split 함수는 내용이 없는 배열(배열의 값 "") 1개를 만들어냄 
			// a[0].equals("") 이면 첫번째 값이 없는 것이므로 count 를하지 않음
			
//			System.out.println(a[i].length());
			//띄어쓰기가 두번 연속으로 들어간 경우  배열 안에 ""가 들어감.  
			//두가지 경우를 모두 만족하는 조건은 a[i].length()가 0이 아닌경우
			
			if(a[i].length()!=0) {
				count++;
			}
		}
		System.out.println(count);
	}
}

1. android.os.FileUriExposedException

 file:///storage/~~.jpg exposed beyond app through ClipData.Item.getUri()

간단한 예제를 따라하며 안드로이드 개발을 하던 중 예외가 발생해서 문제점을 찾아서 올립니다!


버튼을 누르면 카메라를 실행하는 부분을 구현하고 있었습니다...

세부적으로 말하자면 프래그먼트 상에 ImageButton을 생성하고 OnClick 메서드에 카메라를 실행하는 인텐트를 호출하는 그런 작업중이었어요

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_camera, container, false);

mPhotoButton = (ImageButton)v.findViewById(R.id.camera);

final Intent captureImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri uri = Uri.fromFile(mPhotoFile); // --------
captureImage.putExtra(MediaStore.EXTRA_OUTPUT, uri); // --------


mPhotoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(captureImage,REQUEST_PHOTO); // --------③

}
});

mPhotoView = (ImageView) v.findViewById(R.id.crime_photo);


}

저는 맨 처음 에러메시지와 표시해주는 코드라인을 따라가보니 ③에서 문제가 생겼다고 생각이 들었습니다. 


일단 어떤 에러때문에 어플리케이션이 작동을 안했는지 봐볼까요?


라는 메시지와 함께 그 아래로 쭉쭉.. 메시지를 출력해주더라고요 ㅠㅠ


다음의 내용들이 중요해보이는 메시지에요 세부 디렉토리는 잘라냈습니다


그런데 자세히 볼수록 ①, ②에서 문제가 있다는 생각이 들었고 찾아보니 FileUri 부분이 문제였습니다.

 

2. 해결

Android 7.0 부터 API정책의 변경

안드로이드 7.0 (누가) 부터 앱사이의 공유가 더 엄격해져서 file:// URI 가 직접 노출되지 않도록 content:// URI를 보내고 

이에 대해서 임시 액세스 권한을 부여하는 방식으로 변경되었다고 합니다. 

이에 대한 자세한 설명은 밑에 공식참고문서(구글번역기로 번역된 글입니다)를 보시됩니다.


앱 사이의 파일 공유


Android 7.0을 대상으로 하는 앱의 경우, Android 프레임워크는 앱 외부에서 file:// URI의 노출을 금지하는 StrictMode API 정책을 적용합니다. 파일 URI를 포함하는 인텐트가 앱을 떠나면 FileUriExposedException 예외와 함께 앱에 오류가 발생합니다.

애플리케이션 간에 파일을 공유하려면 content:// URI를 보내고 이 URI에 대해 임시 액세스 권한을 부여해야 합니다. 이 권한을 가장 쉽게 부여하는 방법은 FileProvider 클래스를 사용하는 방법입니다. 권한과 파일 공유에 대한 자세한 내용은 파일 공유를 참조하세요.

https://developer.android.com/about/versions/nougat/android-7.0-changes.html#accessibility



위에 설명에서와 같이 FileProvider클래스를 사용해서 content:// URI에 권한을 부여하는 방법을 보면 다음과 같습니다.


1. AndroidManifest.xml 수정

<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.bignerdranch.android.test.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>

2. res/xml/filepaths.xml 생성

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="storage/emulated" path="."/>
</paths>


3. Uri.fromFile(File mFile) 코드 대체

Uri uri = Uri.fromFile(mPhotoFile);


-> Uri uri = FileProvider.getUriForFile(getContext(), "com.bignerdranch.android.test.fileprovider", mPhotoFile);


*com.bignerdranch.android.test 부분은 개인의 도메인을 입력하시고 mPhotoFile 대신 생성한 파일 객체를 넣으시면 됩니다!

참고로 filepaths.xml과 AndroidManifest.xml 내부의 meta-data, android:resource="@xml/filepaths"가 일치해야합니다.





1. ORA-28000 에러

: the account is locked

SCOTT 계정으로 접속해서 EMP테이블로 실습을 하려고하는데

다음과 같은 오라클 에러가 나왔어요... ㅠ 

계정이 잠겨있다는 말인데 계정의 잠김 여부는 어디서 확인할 수 있고 어떻게 풀 수 있는지 확인해보겠습니다!

 

 


 

2. 해결

USER의 잠김 상태확인

SYS계정으로 접속해서 DBA권한으로 유저들을 확인해보면 잠겨있는지 여부를 확인할 수 있어요.


 

 SELECT username, account_status, lock_date 

 FROM DBA_USERS;





수많은 USER들이 나오기 때문에 조건문에 SCOTT을 추가하여 검색해보겠습니다. 






 SELECT username, account_status, lock_date 

 FROM DBA_USERS 

 WHERE username like 'SCOTT';



 


SCOTT의 ACCOUNT_STATUS를 보니 패스워드 기한만료와 계정 잠금상태였네요.

 

여기서 잠깐 ACCOUNT_STATUS 상태를 정리하자면 아래와 같아요.


 

 OPEN : 정상

 EXPIRED : 계정의 패스워드가 파기된 상태

 LOCKED : 계정이 잠긴 상태

 EXPIRED & LOCKED : 패스워드가 파기되었고 계정이 잠긴 상태



 

USER의 잠금해제

계정의 잠그거나 해제하는 방법은 아래와 같습니다.


 

 ALTER USER 사용자명 ACCOUNT [UNLOCK | LOCK];




위와 같은 방법으로 SCOTT 계정의 잠금 상태를 해제해보겠습니다.



 

 ALTER USER scott ACCOUNT UNLOCK;




USER의 패스워드 재생성

잠금은 풀렸으나 아직 패스워드가 파기된 상태입니다.

파기된 패스워드는 다시 재생성 해주어야 합니다.

패스워드 재생성은 이전에 올린 게시글 (클릭)을 참조하시면 될 것같아요




 ALTER USER scott IDENTIFIED BY oracle;




패스워드를 재생성 해주니 드디어 계정이 'OPEN' 상태가 되었네요.



OPEN된 계정으로 접속한 결과입니다. 

예상대로 잘 접속됩니다! :-) 



패스워드를 생성하는 것과 반대로 패스워드를 파기할 수도 있습니다.

구문은 아래와 같습니다.


 

 ALTER USER 사용자명 PASSWORD EXPIRE;




 

1.USER 패스워드 분실  

오라클 사용자 비밀번호를 잊어버려서 접속이 안 되는 경우 어떻게 해야 할까요

(windows10 환경)

 


 

2.USER 패스워드 변경


이런 경우 SYS 계정에 접속해서 USER의 패스워드를 변경해주시면 됩니다.



사용자 패스워드 변경방법은 아래와 같아요!





 ALTER USER 사용자명 IDENTIFIED BY 패스워드





SYS 계정의 패스워드도 잊어버렸다면 어떡할까?

명령 프롬프트에서 패스워드 입력 없이 접속이 가능합니다. (실습환경에서)

첫번째는 sqlplus 접속과 동시에 sys계정으로 들어가는 방법입니다. 




 sqlplus “/as sysdba"




 



두번째 방법으로는, SQL Plus에 로그인 없이 접속하여 SYS로 연결하는 방법도 있습니다.



 

 sqlplus /nolog  


 conn /as sysdba







접속했다면 아래와 같이 SYS계정의 패스워드도 변경하시고 



 ALTER USER sys IDENTIFIED BY 패스워드 ;


 ALTER USER system IDENTIFIED BY 패스워드;

 


원래 접속하려고 했던 USER의 패스워드까지 변경해주신다면 끝!


*참고로 데이터베이스에 USER의 목록을 확인하고 싶다면



 SELECT username FROM DBA_USERS; (DBA권한)


 SELECT username FROM ALL_USERS; (USER권한)



위의 SELECT 문으로 확인하실 수 있습니다.

 



1.ERROR : ORA-28009  

: connection as SYS should be as SYSDBA or SYSOPER

SQL Plus에서 sys계정으로 로그인하기 위해 사용자명에 sys를 입력하면 다음과 같은 에러 메시지가 나옵니다.

 

ERROR:

ORA-28009: connection as SYS should be as SYSDBA or SYSOPER




2. 해결

이를 해결하기는 아주 간단합니다.

사용자명을 sys as sysdba로 입력한 후 기존의 설정했던 oracle 패스워드를 입력하면 정상적으로 로그인 됩니다.





0. Oracle database 11g R2 완전제거 


오라클데이터 베이스를 지우려고 시도해본 사람들은 알겠지만 쉽지가 않아요.

어렵게, 어렵게 설치를 끝내고 나서 무언가 빼먹을 때도 종종 있고요! 간단한 설정을 하나라도 빼먹는 날엔 차라리 지우고 완벽하게 다시 설치하고 싶다는 생각이 듭니다..

 

그렇지만 설치만큼이나 어렵게 느껴지는 것이 삭제! ㅠㅠ

프로그램 추가/제거 안에 있으면 손쉽게 지울 수도 없기 때문에 완전히 지워졌다고 믿기도 어렵고요. 

오라클은 항상 호락호락하지 않네요


지우고서도 완전히 지워졌긴 한 걸까? 의문이 들 때가 얼마나 많은지 몰라요,, 

그래서 혹시 저와 같은 분이 있을까 해서, 이번엔 오라클을 지우는 방법을 공유해보기로 했습니다! 

(windows10 환경)

 


1. De-install 파일 다운로드


오라클에 데이터베이스 설치 웹페이지 (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html) 에 들어가보면 deinstall 파일을 다운받을 수 있습니다.

저는 C드라이브 바로 밑에 압축을 해제해두었답니다. (C:\deinstall)

 

 

사실 오라클 설치할 때 ORACLE_HOME에 같이 깔리기도 하니(~\app\user\product\11.2.0\deinstall) 확인해보시면 찾을 수도 있을 거에요

(저같은 경우 클라이언트도 설치하고 지우는 등 이것저것 반복하다보니...사라졌습니다. ㅜㅜ)

 



2. 명령 프롬프트 실행


설치가 완료됐으면 명령 프롬프트상에서 삭제를 시작할텐데, 주의할 점은 그냥 실행하지마시고 관리자 권한으로 명령프롬프트를 실행해주시면 됩니다.

*참고로 관리자 권한으로 실행하면 명령프로프트의 기본 디렉토리가 system32로 되어있는 것을 확인할 수 있을 거에요



 

3. De-install 수행


  

De-install 파일이 있는 경로를 입력 한 후 ‘-home’, 오라클홈 경로 입력 후 Enter!

저의 경우는 다음과 같은 경로를 입력하였답니다.

 -> C:\deinstall\deinstall -home C:\app\jaehyun\product



 


Oracle 홈에 구성된 데이터베이스 이름 목록을 지정하십시오. []:에서 Enter!

(만약에 [] 안에 데이터베이스 이름의 목록이 존재한다면 그 중 삭제하고자하는 데이터베이스의 이름을 대소문자 구분해서 정확히 입력하여주면 됩니다.)


계속하겠습니까(y , n 아니오)? [n]:에서 y를 입력해서 계속 삭제를 진행해주시면 삭제가 완료됩니다.

 






4. 레지스트리 삭제


레지스트리에서 oracle 에 대한 레지스트리를 삭제합니다.

[실행] - ‘regedit’ 입력 HKEY_LOCAL_MACHINE SOFTWARE ORACLE을 삭제 합니다.

 


 

 

5. Program Files에서 삭제


C:\Program Files\oracle 폴더 또한 삭제합니다.



프로그램 폴더까지 삭제하면 모든 제거를 완료하신 것이랍니다.

 






잘 해결되셨다면 로그인이 필요없는 공감 버튼 부탁드려요!ㅎㅎ  

 

+ Recent posts

"여기"를 클릭하면 광고 제거.