2017-12-09 5 views
0

列名をキーとして行を読み込もうとしていますが、何とか取得できません。SQLiteデータベースからデータを読み取るにはどうすればよいですか?

例は、私が

を文字列「名前」を入力し、リストはただのListView

に「1」を示し、ここで私の挿入コードは

public void insertStudent(String name, int faculty){ 
     ContentValues cv = new ContentValues(); 
     cv.put("name", name); 
     cv.put("faculty", faculty); 
     mSqliteDatabase.insert("students", null, cv); 
    } 

だとここで私はデータを照会方法は次のとおりです。

public List<String> selectAllEngg(){ 
     List<String> allStudents = new ArrayList<>(); 
     Cursor cursor = mSqliteDatabase.query("students", new String[]{"faculty"}, null, null, null, null, null); 
     if(cursor != null && cursor.moveToFirst()){ 
      do { 

       allStudents.add(cursor.getString(0)); 
      } while (cursor.moveToNext()); 
     } 
     return allStudents; 
    } 

package test; 
 

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

 
import java.util.ArrayList; 
 
import java.util.List; 
 

 
public class MyDBAdapter { 
 
    public static final String DATABASE_NAME = "data"; 
 

 
    private Context mContext; 
 
    private MyDBHelper mDbHelper; 
 
    private SQLiteDatabase mSqliteDatabase; 
 
    private int DATABASE_VERSION = 1; 
 

 
    public MyDBAdapter(Context context){ 
 
     this.mContext = context; 
 
     mDbHelper = new MyDBHelper(context, DATABASE_NAME, null, DATABASE_VERSION); 
 
    } 
 

 
    public void open(){ 
 
     mSqliteDatabase = mDbHelper.getWritableDatabase(); 
 
    } 
 

 
    public class MyDBHelper extends SQLiteOpenHelper{ 
 
     public MyDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ 
 
      super(context, name, factory, version); 
 
     } 
 

 
     @Override 
 
     public void onCreate(SQLiteDatabase db){ 
 
      String query = "CREATE TABLE students(id integer primary key autoincrement, name text, faculty integer);"; 
 
      db.execSQL(query); 
 
     } 
 

 
     @Override 
 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
 
      String query = "DROP TABLE IF EXISTS students;"; 
 
      db.execSQL(query); 
 
      onCreate(db); 
 
     } 
 
    } 
 

 
    public void insertStudent(String name, int faculty){ 
 
     ContentValues cv = new ContentValues(); 
 
     cv.put("name", name); 
 
     cv.put("faculty", faculty); 
 
     mSqliteDatabase.insert("students", null, cv); 
 
    } 
 

 
// public List<String> selectAllStudents(){ 
 
//  List<String> allStudents = new ArrayList<>(); 
 
//  Cursor cursor = mSqliteDatabase.query("students", null, null, null, null, null, null); 
 
//  if(cursor != null && cursor.moveToFirst()){ 
 
//   do { 
 
//    allStudents.add(cursor.getString(1)); 
 
//   } while (cursor.moveToNext()); 
 
//  } 
 
//  return allStudents; 
 
// } 
 

 
    public List<String> selectAllEngg(){ 
 
     List<String> allStudents = new ArrayList<>(); 
 

 
     Cursor cursor = mSqliteDatabase.query("students", new String[]{"faculty"}, null, null, null, null, null); 
 
     if(cursor != null && cursor.moveToFirst()){ 
 
      do { 
 
       if(cursor.getString(cursor.getColumnIndex("faculty")).equals("1")){ 
 
        allStudents.add(cursor.getString(cursor.getColumnIndex("name"))); 
 
       } 
 
//    allStudents.add(cursor.getString(0)); 
 

 
      } while (cursor.moveToNext()); 
 
     } 
 
     return allStudents; 
 
    } 
 

 
    public void deleteAllEngineers(){ 
 
     mSqliteDatabase.delete("students", null, null); 
 
    } 
 
}

DB javaファイルを追加しました。 cursor.getString(0)を使用して

+0

[Androidでsqliteデータベースからデータを取得してTextViewで表示する方法](https://stackoverflow.com/questions/12298835/how-to-retrieve-data-from-sqlite-database-in -android・表示・それ・イン・TextViewには、それがどのように働くか) – imGs

答えて

0

は(IMO)悪い習慣です。それはあなたが実際に列のインデックスを知っていると仮定して、あなたはかなり簡単にそれを見つけることができますが、それは、これを行う方が良いでしょう:

allStudents.add(cursor.getString(cursor.getColumnIndex("name"))); 

は、好ましくはいえ、静的定数として列名を宣言するが、これはまだあなたが名前を書くと仮定すると動作します右。

0の列が名前列を指していないため、"1"が出力として返されている可能性が高いです。クエリは、テーブルの仕様に従って、整数である1つの列のみ「学部」を含むようcursor.getStringゼロを用い

+0

オーケー、これは次のとおりです。 私は、ユーザーが名前を入力したのEditTextを持っていると私はまた、彼らは教員(エンジニアリング、ビジネスを選択することができますスピナーを持っています、アート)。あなたがDB にに関する情報を保存するボタンがあり、私は私がどのように把握することができないよう、大学 あたりの名前のリストを取得しようとしていますか?何か案は? – Mark

2

(0)は1を返します。しかし、これは悪い習慣であり、コードの保守とデバッグが難しいということにゾーイは同意します。

あなたは、クエリの列配列の文字列の両方に含める必要が名前と教員とのクエリを持つために、私はこの方法(より読みやすいコード)を推奨します。

String[] columns = {"name","faculty"}; 
Cursor cursor = mSqliteDatabase.query("students", columns, null, null, null, null, null); 

またはあなたの方法:

あなたはたとえば、マップに(キーと値を受け入れコレクション)のArrayListを変更したり、クラスとして、あなたのテーブルの列を実装し、そのクラス型のArrayListを使用するか、またはあなたのリストを作成する必要があり、このように
Cursor cursor = mSqliteDatabase.query("students", new String[] {"name","faculty"}, null, null, null, null, null); 

文字列配列のタイプ:

ArrayList<String[]> allStudents = new ArrayList(); 
allStudents.add(new String[] {"put here faculty integer","put here student name"}); 

が、これはあなたを助けることを願っています。

関連する問題