Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从sqlite检索数据?_Android - Fatal编程技术网

Android 如何从sqlite检索数据?

Android 如何从sqlite检索数据?,android,Android,这是我的主要活动、数据库和布局代码, 我试图从SQLite数据库中检索数据,但此代码不起作用。我不明白为什么?? 这个问题花了我这么多时间,我很难过,请帮帮我。我是android新手 主活动文件 public class MainActivity extends AppCompatActivity { EditText name; EditText phone; Button submit; Button data; TextView tNam

这是我的主要活动、数据库和布局代码, 我试图从SQLite数据库中检索数据,但此代码不起作用。我不明白为什么?? 这个问题花了我这么多时间,我很难过,请帮帮我。我是android新手

主活动文件

     public class MainActivity extends AppCompatActivity {

    EditText name;
    EditText phone;
    Button submit;
    Button data;
    TextView tName;
    TextView tphone;
    Cursor getData;
    String dbString="";
    String dbString2="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


            name=(EditText)findViewById(R.id.editText);
            phone=(EditText)findViewById(R.id.editText2);
            submit=(Button)findViewById(R.id.button);
            data=(Button)findViewById(R.id.button2);
            tName=(TextView)findViewById(R.id.textView);
            tphone=(TextView)findViewById(R.id.textView2);

        data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DataBase2n6 objOfDataBase2n6=new DataBase2n6(getBaseContext());
              Cursor  getData = objOfDataBase2n6.showData();
                getData.moveToFirst();
               do{
                   dbString+=getData.getString(getData.getColumnIndex("name"));
                   dbString+="\n";
                   tName.setText(dbString);
                }while(getData.moveToNext());

                Toast.makeText(getBaseContext(), "YOUR DATA", Toast.LENGTH_LONG).show();
            }
        });

        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String getName=name.getText().toString();
                String getPhone=phone.getText().toString();

                DataBase2n6 objOfDataBase2n6=new DataBase2n6(getBaseContext());

                objOfDataBase2n6.insertData(getName,getPhone);
                Toast.makeText(getBaseContext(), "data is inserted", Toast.LENGTH_LONG).show();
            }
        });

    }
}
数据库文件

    public class DataBase2n6 extends SQLiteOpenHelper {
    SQLiteDatabase db;
    public static final String DATABASE_NAME="myDatabase.db";
    public static final String TABLE_NAME="myTable";
    public static final String NAME="name";
    public static final String PHONE="phone";
    public static final int DATABASE_VERSION=1;

    public DataBase2n6(Context context) {

        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(//"create table" + TABLE_NAME + "(" + NAME + "," + PHONE + ")"
            "create table myTable" +
                    "(id integer primary key, name text, phone text)"
            );
        }
    catch(android.database.SQLException e){
        System.out.println("what the fuck");
    }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS myTable");
        onCreate(db);
    }

    public void insertData(String nam,String mob){
        db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();

            contentValues.put(NAME,nam);
            contentValues.put(PHONE,mob);

            db.insert(TABLE_NAME, null, contentValues);
            db.close();
        }

    public Cursor showData(){

        db=this.getWritableDatabase();

        Cursor res =  db.rawQuery("SELECT  * FROM "+TABLE_NAME,null);
        return res;

    }
}
LAYYYT文件

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.firstproject.start2_6_16.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:hint="name"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText2"
        android:layout_below="@+id/editText"
        android:layout_alignParentStart="true"
        android:hint="phone"
        android:layout_marginTop="55dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="submit"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="data"
        android:id="@+id/button2"
        android:layout_below="@+id/button"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView"
        android:layout_below="@+id/button2"
        android:layout_alignParentStart="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView2"
        android:layout_below="@+id/button2"
        android:layout_alignParentEnd="true"/>

</RelativeLayout>

我推荐一种不同的方法:创建一个将保存sqlite数据结构的类:

public class SQLiteAdapterPrefs {

public static final String MYDATABASE_NAME = "AssetTrackerPrefs";
public static final String MYDATABASE_TABLE = "systemPrefs";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_IMEI = "Nr_Target_Imei"; 
public static final String KEY_LAT = "Nr_Track_Target_Latitude";
public static final String KEY_LON = "Nr_Track_Target_Longitude";   
public static final String KEY_TRACKTIME = "Dt_Target_Track_Point"; 
public static final String KEY_FREQUENCY = "Nr_Frequency";  // upload frequency
public static final String KEY_USER = "Ds_Target_Email";
public static final String KEY_IP = "Ds_IP";
public static final String KEY_PORT = "Nr_IP_Port"; 
public static final String KEY_STICKY = "Ic_Autostart";

public static String imeiFromDevice = "INVALID_IMEI_I9100_sqlliteadapter01";
private boolean flagSticky = true;
private int frequency = 1;
private String emailId = "";

//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
        "create table " + MYDATABASE_TABLE + " ("
        + KEY_ID + " integer default 1, " // primary key autoincrement, "
        + KEY_IMEI + " text not null, " 
        + KEY_LAT + " float default -91.0, "
        + KEY_LON + " float default -181.0, " 
        + KEY_TRACKTIME + " long NOT NULL, "
        + KEY_FREQUENCY + " integer default 1, "
        + KEY_USER + " text not null, " 
        + KEY_IP + " text not null, " 
        + KEY_PORT + " integer default 9099, "
        + KEY_STICKY + " integer default 1"
        + ");";

private SQLiteHelper sqLiteHelper;
private SQLiteDatabase sqLiteDatabase;

private String TAG = "TGPrefs";
private Context context;


public SQLiteAdapterPrefs(Context c){
    context = c;
}


public SQLiteAdapterPrefs openToRead() throws android.database.SQLException {
    sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
    sqLiteDatabase = sqLiteHelper.getReadableDatabase();
    return this;    
}

public SQLiteAdapterPrefs openToWrite() throws android.database.SQLException {
    sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
    sqLiteDatabase = sqLiteHelper.getWritableDatabase();
    return this;    
}

public void close(){
    sqLiteHelper.close();
}
public Cursor queueAll(){
    //String[] columns = new String[]{KEY_ID, KEY_IMEI, KEY_LAT, KEY_LON, KEY_TRACKTIME, KEY_USER, KEY_IP, KEY_STICKY};
    String[] columns = new String[]{KEY_ID, KEY_IMEI, KEY_LAT, KEY_LON, KEY_TRACKTIME, KEY_FREQUENCY, KEY_USER, KEY_IP, KEY_PORT, KEY_STICKY};
    Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, 
            null, null, null, null, null);
    return cursor;
}
public Cursor getFirst(){
    //String[] columns = new String[]{KEY_ID, KEY_IMEI, KEY_LAT, KEY_LON, KEY_TRACKTIME, KEY_USER, KEY_IP, KEY_STICKY};
    String[] columns = new String[]{KEY_ID, KEY_IMEI, KEY_LAT, KEY_LON, KEY_TRACKTIME, KEY_FREQUENCY, KEY_USER, KEY_IP, KEY_PORT, KEY_STICKY};


    String whereCondition = KEY_ID+"=1";
    Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, 
            whereCondition, null, null, null, null);
    return cursor;
}
然后从应用程序中调用此类:

    // open sysPrefs
    SQLiteAdapterPrefs sysPrefs = new SQLiteAdapterPrefs(this);
    sysPrefs.openToRead();
    Cursor cursor = sysPrefs.getFirst();
    int index_IMEI = cursor.getColumnIndex(SQLiteAdapterPrefs.KEY_IMEI);
    int counterRows = cursor.getCount();
    Log.v(TAG, "TENTANDO ABRIR PREFS registros no cursor= "+counterRows+"  numColumns="+cursor.getColumnCount());
    cursor.moveToFirst();
    if ( !(cursor.isAfterLast()) ) {
        imeiFromDevice =  cursor.getString(index_IMEI);
    }
    Log.v(TAG, "from sysprefs imeiFromDevice: "+imeiFromDevice);
    // set preferences and get emailId
    try {
        boolean prefsOK = sysPrefs.setPrefs();

您可以添加更多关于所面临问题的详细信息吗?您在何处定义
TABLE_NAME
?@AliSheikhpour TABLE_NAME在数据库类下定义,showData()也出现在这个类中建议:带
tName.setText(dbString)循环外。说你想用吐司来表达什么?你忘记附加数据了吗?@AliSheikhpour等等,我正在发布所有与此问题相关的代码