안드로이드 SQLite 연동하는데, Run 과정에서 실행이 되지 않습니다.
조회수 2407회
---------- 오류 로그 부분입니다. 원인으로 추정되는 부분만 복붙 했습니다 ---------
FATAL EXCEPTION: main Process: com.example.karry.autocompleted, PID: 1707 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.karry.autocompleted/com.example.karry.autocompleted.SQLiteAssistant}: java.lang.InstantiationException: java.lang.Class has no zero argument constructor
Caused by: java.lang.InstantiationException: java.lang.Class has no zero argument constructor at java.lang.Class.newInstance(Native Method)
--------------- 아래는 오류가 나는 클래스에 대한 소스코드 부분 입니다 ---------------
public class SQLiteAssistant extends SQLiteOpenHelper
{
private static final String DB_NAME = "usingsqlite.db";
private static final int DB_VERSION_NUMBER = 1;
private static final String DB_TABLE_NAME = "Datas";
private static final String DB_COLUMN_1_NAME = "Data Name";
private static final String DB_CREATE_SCRIPT = "create table " + DB_TABLE_NAME;
private SQLiteDatabase sqliteDBInstance = null;
public SQLiteAssistant(Context context)
{
super(context, DB_NAME, null, DB_VERSION_NUMBER);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
}
public void onCreate(SQLiteDatabase sqliteDBInstance)
{
// Log.i("onCreate", "Creating the database...");
sqliteDBInstance.execSQL(DB_CREATE_SCRIPT);
}
public void openDB() throws SQLException
{
// Log.i("openDB", "Checking sqliteDBInstance...");
if(this.sqliteDBInstance == null)
{
Log.i("openDB", "Creating sqliteDBInstacne...");
this.sqliteDBInstance = this.getWritableDatabase();
}
}
public void closeDB()
{
if(this.sqliteDBInstance != null)
{
if(this.sqliteDBInstance.isOpen())
this.sqliteDBInstance.close();
}
}
public long insertData(String DataName)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DB_COLUMN_1_NAME, DataName);
Log.i(this.toString() + " - insertData", "Inserting : " + DataName);
return this.sqliteDBInstance.insert(DB_TABLE_NAME, null, contentValues);
}
public boolean removeCountry(String DataName)
{
int result = this.sqliteDBInstance.delete(DB_TABLE_NAME, "Data Name = " + DataName + "'", null);
if(result > 0)
return true;
else
return false;
}
public long updateData(String oldDataName, String newDataName)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DB_COLUMN_1_NAME, newDataName);
return this.sqliteDBInstance.update(DB_TABLE_NAME, contentValues, "Data Name = " + oldDataName + "", null);
}
public String[] getAlldata()
{
Cursor cursor = this.sqliteDBInstance.query(DB_TABLE_NAME, new String[]
{
DB_COLUMN_1_NAME
},
null,null,null,null,null);
if(cursor.getCount() > 0)
{
String[] str = new String[cursor.getCount()];
int i = 0;
while(cursor.moveToNext())
{
str[i] = cursor.getString(cursor.getColumnIndex(DB_COLUMN_1_NAME));
i++;
}
return str;
}
else
{
return new String[]
{
};
}
}
}
대체 뭐가 원인일까요? 오류를 제 실력으로 읽어본다면 파라미터가 없는 ctor이 없어서 나타나는 것 같은데, 이런 ctor을 만들어줘도 동일한 오류가 발생합니다.ㅠㅠ
안드로이드 연결해서 Run시에 돌아가는 듯 하다가 안드로이드에서는 뭔가 켜지는 듯 하면서 꺼지는 증상이고, 메시지로는 'app_name' 앱을 중지하였습니다. 라고 뜹니다. 안드로이드 스튜디오 내 로그에서는 위에 첨부해드린 오류가 출력이 되구요.
1 답변
-
올려주신 SQLiteAssistant 코드는 문제가 없어보입니다. AndroidManifest.xml에 실행 액티비티를 제대로 설정했는지 확인해보세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변 감사드립니다! 마침 매니페스트를 방금 확인하고 수정했습니다 ㅠㅠ 실행 액티비티가 잘못 설정되어있는걸 확인하고 수정했습니다. 근데 또 다른 문제가 생겼습니다. Hongki Lee 2017.4.9 19:22
- Caused by: android.database.sqlite.SQLiteException: no such table: countries (code 1): , while compiling: SELECT country_name FROM countries Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: countries (code 1): , while compiling: SELECT country_name FROM countries) 오류가 이 오류로 바껴서 뜨네요. db에 데이터 insert 할 때 생기는 것 같은데요. 검색 해보니까 DB생성이 정상적으로 안됐다는 것 같은데 맞나요?DB 생성이 안된 상태에서 삽입하려니까 못하겠다는건가요? Hongki Lee 2017.4.9 19:24
-
댓글 입력