마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 데이터베이스 답변좀 부탁드려요

0 추천
package com.example.gcm;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class UserDB {
	private static final String USERDB_NAME = "UserDB.db";
	private static final int DB_VERSION = 1;
	public static SQLiteDatabase myDB;
	private CreateDB myDBHelper;
	private Context myContext;
	
	private class CreateDB extends SQLiteOpenHelper
	{

		public CreateDB(Context context, String name, CursorFactory factory,
				int version) {
			super(context, name, factory, version);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {	
			db.execSQL(User_Info.CreateWorker._CREATE);
			db.execSQL(User_Info.CreateGame._CREATE);
			db.execSQL(User_Info.CreateCompany._CREATE);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS "+ User_Info.CreateCompany._TABLENAME);
			db.execSQL("DROP TABLE IF EXISTS "+ User_Info.CreateGame._TABLENAME);
			db.execSQL("DROP TABLE IF EXISTS "+ User_Info.CreateWorker._TABLENAME);
			onCreate(db);
		}
		
	}
	
	public UserDB(Context context)
	{
		this.myContext = context;
	}
	
	public UserDB open() throws SQLException
	{
		myDBHelper = new CreateDB(myContext, USERDB_NAME, null , DB_VERSION);
		myDB = myDBHelper.getWritableDatabase();
		return this;
	}
	
	public void close()
	{
		myDB.close();
	}
	
	public long insertWorker(int no, String type, int stat1, int stat2, int stat3, 
							 int stat4, int stat5, int stat6, int stat7, int stat8,
							 int level,int cost,int experience,int limite){
		ContentValues values = new ContentValues();
		values.put(User_Info.CreateWorker.W_NO, no);
		values.put(User_Info.CreateWorker.TYPE, type);
		values.put(User_Info.CreateWorker.STAT1, stat1);
		values.put(User_Info.CreateWorker.STAT2, stat2);
		values.put(User_Info.CreateWorker.STAT3, stat3);
		values.put(User_Info.CreateWorker.STAT4, stat4);
		values.put(User_Info.CreateWorker.STAT5, stat5);
		values.put(User_Info.CreateWorker.STAT6, stat6);
		values.put(User_Info.CreateWorker.STAT7, stat7);
		values.put(User_Info.CreateWorker.STAT8, stat8);
		values.put(User_Info.CreateWorker.LEVEL, level);
		values.put(User_Info.CreateWorker.COST, cost);
		values.put(User_Info.CreateWorker.EXPERIENCE_POINT, experience);
		values.put(User_Info.CreateWorker.STAT_LIMITE, limite);
		return myDB.insert(User_Info.CreateWorker._TABLENAME, null, values);
	}
	public Cursor getWorker()
	{
		return myDB.query(User_Info.CreateWorker._TABLENAME, null, null, null, null, null, null);
	}
}
import android.provider.BaseColumns;

public class User_Info {
	
	public static final class CreateWorker implements BaseColumns
	{
		public static final String _TABLENAME = "WorkerInfo";
		public static final String W_NO = "Id";
		public static final String TYPE = "DepartmentTypes";
		public static final String STAT1 = "Stat1";
		public static final String STAT2 = "Stat2";
		public static final String STAT3 = "Stat3";
		public static final String STAT4 = "Stat4";
		public static final String STAT5 = "Stat5";
		public static final String STAT6 = "Stat6";
		public static final String STAT7 = "Stat7";
		public static final String STAT8 = "Stat8";
		public static final String LEVEL = "Level";
		public static final String COST = "Cost";
		public static final String EXPERIENCE_POINT = "Experience Point";
		public static final String STAT_LIMITE = "Stat Limite";
		
		public static final String _CREATE =
				"create table " +_TABLENAME +"("
						+ W_NO + " integer primary key, "
						+ TYPE + " integer, "
						+ STAT1 + " integer, "
						+ STAT2 + " integer, "
						+ STAT3 + " integer, "
						+ STAT4 + " integer, "
						+ STAT5 + " integer, "
						+ STAT6 + " integer, "
						+ STAT7 + " integer, "
						+ STAT8 + " integer, "
						+ LEVEL + " integer, "
						+ COST + " integer, "
						+ EXPERIENCE_POINT + " integer, "
						+ STAT_LIMITE + " integer);";	
	}
}
public class MainActivity extends Activity {
	private UserDB helper;
	private Cursor mycursor;
	TextView text;
	Button btn;
	ArrayList<String> array;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        array = new ArrayList<String>();
       btn = (Button) findViewById(R.id.button);
        text = (TextView) findViewById(R.id.textView);
        helper = new UserDB(this);
        helper.open();
        
       helper.insertWorker(1,"Developer", 10, 12, 14, 9, 0, 0, 0, 0, 3, 10, 150, 45);
       helper.insertWorker(1,"PR", 0, 0, 0, 0, 6, 5, 0, 0, 3, 10, 150, 45);
       helper.insertWorker(1,"Planing", 0, 0, 0, 0, 0, 0, 8,7, 3, 10, 150, 45);
       
       btn.setOnClickListener(new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			mycursor = null;
			mycursor = helper.getWorker();
			array.clear();
			while(mycursor.moveToNext())
			{
				int no = mycursor.getInt(mycursor.getColumnIndex("Id"));
				String type = mycursor.getString(mycursor.getColumnIndex("DepartmentTypes"));
				int stat1 = mycursor.getInt(mycursor.getColumnIndex("Stat1"));
				int stat2 = mycursor.getInt(mycursor.getColumnIndex("Stat2"));
				int stat3 = mycursor.getInt(mycursor.getColumnIndex("Stat3"));
				int stat4 = mycursor.getInt(mycursor.getColumnIndex("Stat4"));
				int stat5 = mycursor.getInt(mycursor.getColumnIndex("Stat5"));
				int stat6 = mycursor.getInt(mycursor.getColumnIndex("Stat6"));
				int stat7 = mycursor.getInt(mycursor.getColumnIndex("Stat7"));
				int stat8 = mycursor.getInt(mycursor.getColumnIndex("Stat8"));
				int level = mycursor.getInt(mycursor.getColumnIndex("Level"));
				int cost = mycursor.getInt(mycursor.getColumnIndex("Cost"));
				int exp = mycursor.getInt(mycursor.getColumnIndex("Experience Point"));
				int limit = mycursor.getInt(mycursor.getColumnIndex("Stat Limite"));
				
				array.add(no+type+stat1+stat2+stat3+stat4+stat5+stat6+stat7+stat8+level+cost+exp+limit);
				
			}
			if(array.isEmpty())
			{
				text.setText("null");
			}
			else
			{
				text.setText("correct");
			}
			mycursor.close();
		}
	});
    }

게임어플에서 사용할 유저데이터를 넣을 DB입니다.

제대로 만들어졌는지 확인할려고 임시로 데이터를 넣고

그걸 꺼내와서 어레이에 넣어 확인할려는데요

계속 어레이에 아무런 데이터도 안써지는 겁니다.

아무래도 테이블생성이나 데이터입력,출력 부분이 문제인거같은데

어디가 문제인지 모르겠습니다.

이 코드는 제가 참조한 예제랑 똑같은 형태로 만들었는데

예제프로그램은 잘 작동하는데 제가 만든건 문제가 생기네요

실행은 잘되고 오류메세지도 없습니다.

단지 데이터가 들어가지 않거나 출력되지 않습니다

아카샤 (140 포인트) 님이 2014년 11월 23일 질문

1개의 답변

0 추천
public class DatabaseHelper
   private static final String TAG                  = "DatabaseHelper";
 
  public static final String  DATABASE_FILE_PATH      = Environment.getExternalStorageDirectory();
  public static final String  DATABASE_NAME      = "mydb"; 
  public static final String  TRACKS_TABLE        = "tracks";
  public static final String  TRACK_INFO_TABLE        = "track_info";
 
  private static final String TRACKS_TABLE_CREATE     = "create table "
           + TRACKS_TABLE
           + " (_id integer primary key autoincrement, title text not null, description text null, created_at date not null);";
 
  private static final String TRACK_INFO_TABLE_CREATE = "create table " 
           + TRACK_INFO_TABLE 
           + " (_id integer primary key autoincrement, track_id integer not null, latitude real not null, longitude real not null, altitude real not null, created_at date not null);";
 
private SQLiteDatabase      database;
 
public DatabaseHelper() 
{  
    try
    {
        database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            + File.separator + DATABASE_NAME, null,SQLiteDatabase.OPEN_READWRITE);
    }
    catch (SQLiteException ex)
    {
        Log.e(TAG, "error -- " + ex.getMessage(), ex);
        // error means tables does not exits
        createTables();
    }
    finally
    {
        DBUtil.safeCloseDataBase(database);
    }
}
 
private void createTables()
{
    database.execSQL(TRACKS_TABLE_CREATE);
    database.execSQL(TRACK_INFO_TABLE_CREATE);
}
 
public void close()
{
    DBUtil.safeCloseDataBase(database);
}
 
public SQLiteDatabase getReadableDatabase()
{
    database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            + File.separator + DATABASE_NAME, null,
            SQLiteDatabase.OPEN_READONLY);
    return database;
}
 
public SQLiteDatabase getWritableDatabase()
{
    database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            + File.separator + DATABASE_NAME, null,
            SQLiteDatabase.OPEN_READWRITE);
    return database;
}
 
 
이것은 소스를 받아서 테스트를 해봐야 알듯 하네요 
 
테스트를 하면서 로그를 보면  쉽게 알수 있을듯한..
 
SDCARD 에 저장하려면 폴더지정을 하셔야 하지 않을지..
 
doridori2013@nate.com
익명사용자 님이 2014년 11월 23일 답변
2014년 11월 23일 수정
이클립스에서 에뮬레이터로 만드는중인데
데이터베이스 사용시 따로 지정해야되는게 있나요??
sdcard readwrite 권한을 넣고 sqlite.db를 sdcard폴더를지정해서 해보세요

doridori2013@nate.com
...