Android 无法显示sqlite中的数据,错误“无此类列:xxx”
现在我需要你们的帮助,我有下面的代码,但是当我在eclipse中运行时,它完全是eror,错误是在下面的代码中签名 包com.example.database.searchAndroid 无法显示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
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);