안드로이드(Android)에서 sqlite 콘솔 사용

안드로이드에서 기본적으로 사용하는 DB는 sqlite입니다. sqlite는 데이터베이스를 하나의 파일 단위로 하여 여러개의 테이블을 묶어 관리합니다. sqlite는 로컬 DBMS이며 이 파일 하나만 복사해서 다른 곳에 복사하면 아무런 문제 없이 사용할 수 있는 편의성이 있습니다.

여기서 설명하는 sqlite의 버전은 3이며 이 sqlite3에서 사용하는 DBMS 파일을 바이너리 형태로 살펴보면 다음 예와 같습니다.

사용자 삽입 이미지

파일명과 확장자는 의미가 없고 그 파일의 내용을 통해 sqlite의 데이터베이스 파일이라는 것을 인식합니다. 이 데이터베이스 파일에서 정보를 살펴보기 위해서 안드로이드에서 제공하는 SDK를 통해 sqlite3.exe 실행파일을 이용할 수 있습니다.

사용자 삽입 이미지

이 데이터베이스(map.mbtiles 파일)에 정의된 테이블 이름을 보기 위한 명령은 다음과 같습니다.

그리고 테이블에 대한 스키마 정보를 보기 위한 명령은 다음과 같습니다.

이제, 테이블 명과 해당 테이블에 대한 스키마 정보를 파악할 수 있으니 SQL 문을 통해 원하는 정보를 얻을 수 있습니다.

[C#] URL을 통해 이미지(Image) 다운로드(Download)해서 파일(File)로 저장(Save)

웹상의 이미지 URL을 알고 있을때.. 해당 URL로부터 이미지에 대한 데이터를 가져와 파일로 저장하는 C# 함수입니다. 가끔 꼭 필요한 함수인데.. 필요할때 쉽게 찾아 볼 수 있도록 기록해 둡니다.

private bool DownloadRemoteImageFile(string uri, string fileName)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    bool bImage = response.ContentType.StartsWith("image", 
        StringComparison.OrdinalIgnoreCase);
    if ((response.StatusCode == HttpStatusCode.OK ||
        response.StatusCode == HttpStatusCode.Moved ||
        response.StatusCode == HttpStatusCode.Redirect) &&
        bImage)
    {
        using (Stream inputStream = response.GetResponseStream())
        using (Stream outputStream = File.OpenWrite(fileName))
        {
            byte[] buffer = new byte[4096];
            int bytesRead;
            do
            {
                bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                outputStream.Write(buffer, 0, bytesRead);
            } while (bytesRead != 0);
        }

        return true;
    }
    else
    {
        return false;
    }
} 

사용 방법에 대한 예는 다음과 같습니다.

String url = "http://www.there.net/img.png";
String fileName = "d:/a.png";
if (!DownloadRemoteImageFile(url, fileName))
{
    MessageBox.Show("Download Failed: " + url);
}

이 요긴한 함수는 제가 작성한 것은 아니고.. 검색을 통해 찾아 테스트 해보고 실제 프로젝트에 적용해 잘… 쓰고 있는 함수입니다. 출처를 기억하지 못하지만.. 개발해 제공해 준 개발자에게 감사 드립니다.