Android 无法显示sqlite中的数据,错误“无此类列:xxx”

Android 无法显示sqlite中的数据,错误“无此类列:xxx”,android,sqlite,Android,Sqlite,现在我需要你们的帮助,我有下面的代码,但是当我在eclipse中运行时,它完全是eror,错误是在下面的代码中签名 包com.example.database.search import java.util.ArrayList; import java.util.List; import com.example.search.MainActivity; import android.content.ContentValues; import android.content.Context; im

现在我需要你们的帮助,我有下面的代码,但是当我在eclipse中运行时,它完全是eror,错误是在下面的代码中签名 包com.example.database.search

import java.util.ArrayList;
import java.util.List;
import com.example.search.MainActivity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import android.util.Log;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

public class DBDataSource {

private SQLiteDatabase database;

private DBHelper dbHelper;

private String[] allColumns = { DBHelper.COLUMN_ID,
          DBHelper.COLUMN_NAMA_SMA, 
          DBHelper.COLUMN_ALAMAT_SMA, 
          DBHelper.COLUMN_LATITUDE_SMA, 
          DBHelper.COLUMN_LONGTITUDE_SMA,
          DBHelper.COLUMN_TANGGAL_BERDIRI_SMA, 
          DBHelper.COLUMN_EMAIL_SMA, 
          DBHelper.COLUMN_WEBSITE_SMA, 
          DBHelper.COLUMN_FACEBOOK,
          DBHelper.COLUMN_TWITTER };

public DBDataSource(Context context)
{
    dbHelper = new DBHelper(context);
}

public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
}

public void close() {
    dbHelper.close();
}

public Sma createSma(String nama, String alamat, Long latitude, Long longtitude, String tgl, String email, String web, String facebook, String twitter) 
{

    ContentValues values = new ContentValues();
    values.put(DBHelper.COLUMN_NAMA_SMA, nama);
    values.put(DBHelper.COLUMN_ALAMAT_SMA, alamat);
    values.put(DBHelper.COLUMN_LATITUDE_SMA, latitude);
    values.put(DBHelper.COLUMN_LONGTITUDE_SMA, longtitude);
    values.put(DBHelper.COLUMN_TANGGAL_BERDIRI_SMA, tgl);
    values.put(DBHelper.COLUMN_EMAIL_SMA, email);
    values.put(DBHelper.COLUMN_WEBSITE_SMA, web);
    values.put(DBHelper.COLUMN_FACEBOOK, facebook);
    values.put(DBHelper.COLUMN_TWITTER, twitter);

    long insertId = database.insert(DBHelper.TABLE_NAME, null,
        values);

    Cursor cursor = database.query(DBHelper.TABLE_NAME,
        allColumns, DBHelper.COLUMN_ID + " = " + insertId, null,
        null, null, null);


    cursor.moveToFirst();



    Sma newSma = cursorToSma(cursor);


    cursor.close();


    return newSma;
  }

 private Sma cursorToSma(Cursor cursor)
 {
    // buat objek sma baru
    Sma sekolah = new Sma();
    // debug LOGCAT
    Log.v("info", "The getLONG "+cursor.getLong(0));
    Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2));

    sekolah.setId(cursor.getLong(0));
    sekolah.setNama(cursor.getString(1));
    sekolah.setAlamat(cursor.getString(2));
    sekolah.setLatitude(cursor.getLong(3));
    sekolah.setLongitude(cursor.getLong(4));
    sekolah.setTgl_berdiri(cursor.getString(5));
    sekolah.setEmail(cursor.getString(6));
    sekolah.setWebsite(cursor.getString(7));
    sekolah.setFacebook(cursor.getString(8));
    sekolah.setTwitter(cursor.getString(9));

    return sekolah;
} 
public ArrayList<Sma> getPoint(String name)
{
    ArrayList<Sma> daftarPoint = new ArrayList<Sma>();
    //THIS QUERY IS SAME LIKE THIS select * from sma where nama_sma = 'user_input'
    String [] query = {dbHelper.COLUMN_NAMA_SMA, dbHelper.COLUMN_LATITUDE_SMA, dbHelper.COLUMN_LONGTITUDE_SMA};
    Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma ="+ name, null, null, null, null);

    c.moveToFirst();
    while (!c.isAfterLast()) 
    {
      Sma sekolah = cursorToSma(c);
      daftarPoint.add(sekolah);
      c.moveToNext();
    }
    c.close();
    return daftarPoint;
}
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper
{

public static final String TABLE_NAME = "sma";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAMA_SMA = "nama_sma";
public static final String COLUMN_ALAMAT_SMA = "alamat_sma";
public static final String COLUMN_WEBSITE_SMA ="website_sma";
public static final String COLUMN_FACEBOOK = "facebook_sma";
public static final String COLUMN_TWITTER ="twitter_sma";
public static final String COLUMN_EMAIL_SMA = "email_sma";
public static final String COLUMN_LATITUDE_SMA = "latitude_sma";
public static final String COLUMN_LONGTITUDE_SMA= "longtitude_sma";
public static final String COLUMN_TANGGAL_BERDIRI_SMA ="tanggal_berdiri_sma";

private static final String db_name ="schoolmap.db";

private static final int db_version=1;

  private static final String db_create = "create table "
      + TABLE_NAME + "("
      + COLUMN_ID                   + " integer primary key autoincrement, " //indeks ke-0
      + COLUMN_NAMA_SMA             + " varchar(50) not null, " //indeks ke-1
      + COLUMN_ALAMAT_SMA           + " varchar(50) not null, " //indeks ke-2
      + COLUMN_LATITUDE_SMA         + " Long(20) not null, " //indeks ke-3 
      + COLUMN_LONGTITUDE_SMA       + " Long(20) not null, " //indeks ke-4
      + COLUMN_TANGGAL_BERDIRI_SMA  + " datetime, "   //indeks ke-5
      + COLUMN_EMAIL_SMA            + " varchar(50) not null, " //indeks ke-6
      + COLUMN_WEBSITE_SMA          + " varchar(20), " //indeks ke-7
      + COLUMN_FACEBOOK             + " varchar(20), " //indeks ke-8
      + COLUMN_TWITTER              + " varchar(20) null);";     //indeks ke-9

public DBHelper(Context context) {
    super(context, db_name, null, db_version);
    // Auto generated
}


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(db_create);
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(DBHelper.class.getName(),"Upgrading database from version " + oldVersion + "to"
            + newVersion + ",which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);

 }

}

除了使用显式名称nama_sma=写入和访问列之外,还可以尝试使用代码中定义为dbHelper.column_nama_sma+=+的键名

更改您的查询,如下所示:

Cursor c = database.query(DBHelper.TABLE_NAME, query, dbHelper.COLUMN_NAMA_SMA + " ="+ name, null, null, null, null);
在getPoint中,您正在传递一个不带引号的字符串参数:

Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma ="+ name, null, null, null, null);
这会将名称中的任何内容视为列名引用,而不是文字。SQL中的字符串文本需要用单引号括起来,但最好使用?占位符和绑定参数如下所示:

Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma = ?", new String[] { name }, null, null, null);

我认为您可以做得更好的一件事是在游标c=database.queryDBHelper.TABLE_NAME,query,DBHelper.COLUMN_NAMA_SMA+=?,新字符串[]{NAME},null,null,null;我认为=与?相同,当我运行代码时仍然是错误的:post DBHelper.java如果没有其他方法解决您的问题,我已经做了,您能帮助我吗?你能给我解释一下吗?我的代码和你的代码有什么不同?因为它看起来和你的一样me@ndr_sd仔细检查。是的,我已经这样做了,但仍然是相同的erorr,它说没有这样的列:name>parameter尝试使用DBHelper类的实际名称并访问列DBHelper.column\u NAMA\u SMA。确保您提供了有效的表名。我已经提供了,在我的数据库中,我可以看到数据是可用的,但是当我通过getPoint方法搜索时,会说数据是空的。。
Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma = ?", new String[] { name }, null, null, null);