본문 바로가기

정보

[안드로이드] DB 데이터베이스 접근, 연동하기

안드로이드로 데이터베이스를 다루는 방법이 궁금해서 찾아보다 발견한 정보이다.

안드로이드에서는 보안상의 이유로 일반적인 웹개발처럼 mysql 같은곳에 직접적으로 접근이 불가능하다고 알려져 있다.

 

그래서 중간다리를 놓고 접근하는것이 일반적이다.

 

결국 핵심은 manifest.xml을 잘 설정하는 것이다.

 

(펌)

// useContentProvider.java

 

package com.xprime.android.useContentProvider;

import android.app.Activity;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.provider.CallLog;
import android.provider.Contacts;
import android.provider.Contacts.People;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

 

 

public class useContentProvider extends Activity {
 Button btnCallLog;
 Button btnBookmark;
 Button btnContacts;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        btnCallLog = (Button)findViewById(R.id.Button01);
        btnCallLog.setOnClickListener(new OnClickListener()
        {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    String[] reqCol =
    {
     CallLog.Calls.DURATION,
     CallLog.Calls.NUMBER
    };
    
    Cursor calls = managedQuery(CallLog.Calls.CONTENT_URI,
       reqCol,
       CallLog.Calls.NUMBER + "=?",
       new String[] {"1234567"},
       null);
    
    Log.d("Call", "Call count:"+calls.getCount());
    
    int durIndex = calls.getColumnIndexOrThrow(CallLog.Calls.DURATION);
    calls.moveToFirst();
    int total = 0;
    
    while( !calls.isAfterLast() )
    {
     Log.d("Call ", "Duration : " + calls.getInt(durIndex));
     total += calls.getInt(durIndex);
     calls.moveToNext();
    }
    
    Log.d("Call", "total : " + total);
   }
  });
       
        btnBookmark = (Button)findViewById(R.id.Button02);
        btnBookmark.setOnClickListener(new OnClickListener()
        {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    String[] reqCol =
    {
     Browser.BookmarkColumns.TITLE,
     Browser.BookmarkColumns.VISITS
    };
    
    Cursor books = managedQuery(Browser.BOOKMARKS_URI,
           reqCol,
           Browser.BookmarkColumns.BOOKMARK + "=1",
           null,
           Browser.BookmarkColumns.VISITS + " DESC limit 5");
    
    int titleIndex = books.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE);
    int visitIndex = books.getColumnIndexOrThrow(Browser.BookmarkColumns.VISITS);
    
    books.moveToFirst();
    
    while( !books.isAfterLast() )
    {
     Log.d("book ", books.getString(titleIndex) + " visit : " + books.getString(visitIndex));
     books.moveToNext();
    }
   }
  });
       
        btnContacts = (Button)findViewById(R.id.Button03);
        btnContacts.setOnClickListener(new OnClickListener()
        {
   @Override
   public void onClick(View v) {
    //연락처 정보를 가져오는 content uri
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    //가져올 컬럼정보  sql쿼리의 select col1, col2 from table1 에서 col1, col2 설정하는 것과 같음
    String[] projection = new String[] {
      ContactsContract.Contacts._ID,
      ContactsContract.Contacts.DISPLAY_NAME
    };
    //조건 설정 where 절 만드는것과 같음
    String selection = null;//ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '0' ";
    String[] selectionArgs = null;
    //정렬
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    //조회해서 가져온다
    Cursor contactCursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
    
    contactCursor.moveToFirst();
    int nameIndex = contactCursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME);
    
    Log.d("name ", "" + contactCursor.getCount());
    
    while( !contactCursor.isAfterLast() )
    {
     Log.d("name ", contactCursor.getString(nameIndex));
     contactCursor.moveToNext();
    }
    /*
    // TODO Auto-generated method stub
    Cursor oneContact = managedQuery(People.CONTENT_URI,
        null, null, null, "name desc LIMIT 1");
    
    int nameIdx = oneContact.getColumnIndex(Contacts.People.NAME);
    int emailIdx = oneContact.getColumnIndex(Contacts.People.PRIMARY_EMAIL_ID);
    int phoneIdx = oneContact.getColumnIndex(Contacts.People.PRIMARY_PHONE_ID);
    
    oneContact.moveToFirst();
    
    int emailID = oneContact.getInt(emailIdx);
    int phoneID = oneContact.getInt(phoneIdx);
    
    Uri emailUri = ContentUris.withAppendedId(Contacts.ContactMethods.CONTENT_URI, emailID);
    Uri phoneUri = ContentUris.withAppendedId(Contacts.ContactMethods.CONTENT_URI, phoneID);
    
    Cursor primaryEmail = managedQuery(emailUri, new String[] {Contacts.ContactMethods.DATA},
            null, null, null);
    Cursor primaryPhone = managedQuery(phoneUri, new String[] {Contacts.Phones.NUMBER},
            null, null, null);
    
    startManagingCursor(primaryPhone);
    startManagingCursor(primaryEmail);
    
    String name = oneContact.getString(nameIdx);
    
    primaryEmail.moveToFirst();
    primaryPhone.moveToFirst();
    
    String PhoneNumber = null;
    String email = null;
    
    if( primaryEmail.getCount() > 0 )
     email = primaryEmail.getString(0);
    
    if( primaryPhone.getCount() > 0 )
     PhoneNumber = primaryPhone.getString(0);
    
    Log.d("Contact", "name : " + name + " email : " + email + " phone : " + PhoneNumber);
    */
   }
  });
    }
}

 

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

// main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<Button android:text="CallLog" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Bookmark" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Contact" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

 

 

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

AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.xprime.android.useContentProvider"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".useContentProvider"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"></uses-permission>
</manifest>
[출처] [티모] DB 다루기1 (안드로이드개발 카페 [개발자 커뮤니티]) | 작성자 에디터

'정보' 카테고리의 다른 글

오징어게임의 돌풍이 심상치 않다.  (0) 2021.09.26