작업중인 응용 프로그램이 .xml 파일의 데이터를 성공적으로 구문 분석하여 데이터베이스에 저장합니다. 그러나 각 응용 프로그램이 시작될 때 구문 분석 된 데이터가 저장된 테이블 행 수만큼 데이터베이스의 크기가 커집니다. 예를 들어 구문 분석 된 데이터가 저장하기 위해 3 개의 행을 사용하면 각 후속 응용 프로그램을 실행하면 데이터베이스가 6 개, 9 개, 12 개 등의 크기로 증가합니다.XML을 SQLite 데이터베이스로 구문 분석 할 때 문제가 발생했습니다.
내가 원하는 것은 테이블이 각 응용 프로그램을 시작할 때 증가하지 않도록하는 것입니다. 매번 데이터베이스를 재설정하려고 시도했지만 올바르게 처리하는 방법이나 이것이 해결해야 할 솔루션인지 확실하지 않습니다.
나는 그것의 전체 데이터베이스를 표시 할 뷰를 가지고 :
public class QAView extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.qa_view);
TextView tv = (TextView) findViewById(R.id.tvData);
QADatabase entries = new QADatabase(this);
try
{
entries.open();
String data = entries.getAllData();
tv.setText(data);
entries.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
나는 .xml 파일에서 데이터를 처리하는 파서 코드가 있습니다 또한
XmlResourceParser parser = getResources().getXml(R.xml.qa);
try
{
while(parser.next() != XmlPullParser.END_DOCUMENT)
{
if(parser.getEventType() != XmlPullParser.START_TAG)
{
continue;
}
String name = parser.getName();
if(name.equals("question"))
{
question = readTextQuestion(parser);
}
else if(name.equals("options"))
{
readTextAnswers(parser);
}
}
}
catch(XmlPullParserException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
I을 해당 데이터베이스 코드가 있습니다 :
public class QADatabase
{
public static final String KEY_ROWID = "_id";
public static final String KEY_QUESTION = "question";
public static final String KEY_ANSWER1 = "answer1";
public static final String KEY_ANSWER2 = "answer2";
public static final String KEY_ANSWER3 = "answer3";
public static final String KEY_ANSWER4 = "answer4";
public static final String KEY_ANSWER5 = "answer5";
public static final String KEY_CORRECT = "correct";
public static final String DATABASE_NAME = "QuestionAnswerDatabase";
public static final String DATABASE_TABLE = "QuestionAnswerTable";
public static final int DATABASE_VERSION = 2;
private DatabaseHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
private static class DatabaseHelper extends SQLiteOpenHelper
{
private DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase)
{
sqLiteDatabase.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY, " +
KEY_QUESTION + " TEXT NOT NULL, " +
KEY_ANSWER1 + " TEXT NOT NULL, " +
KEY_ANSWER2 + " TEXT NOT NULL, " +
KEY_ANSWER3 + " TEXT NOT NULL, " +
KEY_ANSWER4 + " TEXT NOT NULL, " +
KEY_ANSWER5 + " TEXT NOT NULL, " +
KEY_CORRECT + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2)
{
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(sqLiteDatabase);
}
}
public QADatabase(Context c)
{
ourContext = c;
}
public QADatabase open() throws SQLException
{
ourHelper = new DatabaseHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close()
{
ourHelper.close();
}
public void createEntry(String question, String answer1, String answer2, String answer3, String answer4, String answer5, String correct)
{
ContentValues cv = new ContentValues();
cv.put(KEY_QUESTION, question);
cv.put(KEY_ANSWER1, answer1);
cv.put(KEY_ANSWER2, answer2);
cv.put(KEY_ANSWER3, answer3);
cv.put(KEY_ANSWER4, answer4);
cv.put(KEY_ANSWER5, answer5);
cv.put(KEY_CORRECT, correct);
ourDatabase.insert(DATABASE_TABLE, null, cv);
}
public String getAllData()
{
String[] columns = new String[] {KEY_ROWID, KEY_QUESTION, KEY_ANSWER1, KEY_ANSWER2, KEY_ANSWER3, KEY_ANSWER4, KEY_ANSWER5, KEY_CORRECT};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";
while(c.moveToNext())
{
result = result + c.getString(0) + " " + c.getString(1) + " " + c.getString(2) + " " + c.getString(3) + " " + c.getString(4) + " " + c.getString(5) + " " + c.getString(6) + " " + c.getString(7) + "\n";
}
return result;
}
public String getQuestion(long l) throws SQLException
{
String[] columns = new String[] {KEY_ROWID, KEY_QUESTION, KEY_ANSWER1, KEY_ANSWER2, KEY_ANSWER3, KEY_ANSWER4, KEY_ANSWER5, KEY_CORRECT};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null);
if(c != null)
{
// move the cursor to the first row
c.moveToFirst();
// look for ID "l" in the "Questions" column
String question = c.getString(1);
return question;
}
// otherwise, return null
return null;
}
public String getAnswerChoice(long l, int answerChoiceNumber) throws SQLException
{
String[] columns = new String[] {KEY_ROWID, KEY_QUESTION, KEY_ANSWER1, KEY_ANSWER2, KEY_ANSWER3, KEY_ANSWER4, KEY_ANSWER5, KEY_CORRECT};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null);
if(c != null)
{
// move the cursor to the first row
c.moveToFirst();
// look for ID "l" in the "Answers" column
String correctAnswer = c.getString(answerChoiceNumber + 2); // need to offset by 2 for the KEY_ROWID and KEY_QUESTION columns
return correctAnswer;
}
// otherwise, return null
return null;
}
public Cursor getAllTitles()
{
return ourDatabase.query(DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_ANSWER1, KEY_ANSWER2, KEY_ANSWER3, KEY_ANSWER4, KEY_ANSWER5, KEY_CORRECT},
null, null, null, null, null);
}