-1

これは MainActivity.java です

package com.example.sqltwo;

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.SQLiteOpenHelper;

public class MainActivity extends Main {
public static final String KEY_NAMES = "";
public static final String KEY_VALUES = "";

private static final String DATABASE_NAME = "Database";
private static final String DATABASE_TABLE = "DBTable";
private static final int DATABASE_VERSION = 1;

private DbHelper qhelper;
private final Context qcontext;
private SQLiteDatabase qdatabase;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
            KEY_NAMES + " TEXT NOT NULL, " +
            KEY_VALUES + " TEXT NOT NULL);"
            );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

    }
}
public MainActivity(Context c){
    qcontext = c;
}
public MainActivity open() throws SQLException{
    qhelper = new DbHelper(qcontext);
    qdatabase = qhelper.getWritableDatabase();
    return this;
}
public void close(){
    qhelper.close();
}

public long createEntry(String name, String value) {
    ContentValues cv = new ContentValues();
            cv.put(KEY_NAMES, name);
            cv.put(KEY_VALUES, value);
            return qdatabase.insert(DATABASE_TABLE, null, cv);
}
public String getData() {
    String[] columns = new String[]{KEY_NAMES, KEY_VALUES};
    Cursor c = qdatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
    String result = "";

    int iValue = c.getColumnIndex(KEY_VALUES);
    int iName = c.getColumnIndex(KEY_NAMES);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        result = result + c.getString(iName) + "\n" + c.getString(iValue) + "\n";
    }
    return result;  
}   
}

これはMain.javaです

package com.example.sqltwo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Main extends Activity implements OnClickListener{
Button sqlUpdate, sqlView, sqlQuery;
EditText sqlName, sqlValue, sqlQuery_value;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sqlUpdate = (Button) findViewById(R.id.buttonupdate);
    sqlName = (EditText) findViewById(R.id.editname);
    sqlValue = (EditText) findViewById(R.id.editvalue);
    sqlView = (Button) findViewById(R.id.buttonview);
    sqlView.setOnClickListener(this);
    sqlUpdate.setOnClickListener(this);
    sqlQuery = (Button) findViewById(R.id.buttonsearch);
    sqlQuery_value = (EditText) findViewById(R.id.editquery);
}
public void onClick(View arg0) {
    switch (arg0.getId()) {
    case R.id.buttonupdate:
        String name = sqlName.getText().toString();
        String value = sqlValue.getText().toString();
        MainActivity entry = new MainActivity(Main.this);
        entry.open();
        entry.createEntry(name, value);
        entry.close();
        break;
    case R.id.buttonview:
        Intent intentone = new Intent();
        intentone.setClassName("com.example.sqltwo", "com.example.sqltwo.View");
        startActivity(intentone);
        break;
    }
}
}

私のエラー

02-28 09:23:07.334: E/AndroidRuntime(827): android.database.sqlite.SQLiteException: duplicate column name: TEXT (code 1): , while compiling: CREATE TABLE DBTable ( TEXT NOT NULL,  TEXT NOT NULL);

これは何をしたいですか?

名前と値を入力して、データをデータベースに更新できます。ビュー関数はまだコーディングされていません。クラッシュせずにデータを入力する必要があります。MainActivity でクエリ システムをセットアップする必要があります。これは、Main のスイッチ ケース システムで動作します。クエリを入力すると、データがそれを MainActivity に送信し、検索を実行して、有効な値のリストを返すようにするにはどうすればよいですか?

-Extra: 各クエリで返されたデータ セットを、さらにデータが表示されるときに行が追加された tablerow に表示するにはどうすればよいですか?

-おまけ: 誰かにリアルタイムで助けてもらうことはできますか? 聞きすぎ?

4

2 に答える 2

2

オブジェクトを作成するとき、列の名前はまだありません。マラカが言ったように、列の名前でパラメーターを渡すか、変数を初期化する必要があります。

public static final String KEY_NAMES = "column1";
public static final String KEY_VALUES = "column2";
于 2013-02-28T14:49:31.383 に答える
1

KEY_NAMES列(とKEY_VALUES)の両方に一意の名前を付ける必要があります。

試す:

public static final String KEY_NAMES = "column1";
public static final String KEY_VALUES = "column2";

アプリ全体で同じ名前で参照することを忘れない限り、任意の2つの異なる文字列にcolumn1変更できます。column2

クエリを入力すると、データがそれをMainActivityに送信し、検索を実行してから、有効な値のリストを返すようにするにはどうすればよいですか?

入力した値を使用して、データベースでSQLステートメントを実行するだけです。

-追加:さらにデータを表示するときに、クエリで返された各データセットをテーブル行に表示し、行を追加するにはどうすればよいですか?

行を表示するUIを用意します。selectステートメントを実行し、返されたカーソルを繰り返し処理して、各行にデータを入力します。データベースが更新されたら、selectステートメントを再度実行して、UIにデータを再入力します。主キーを追加すると、最後の行の主キーのデータよりも新しいデータのみを検索する後続のselectステートメントを実行できます。

-追加:リアルタイムで誰かに助けてもらえますか?質問することが多すぎますか?

排他的な助けのために誰かを雇う。

于 2013-02-28T14:42:29.633 に答える