此时我需要你们的帮助,我有以下代码,但是当我在日食中运行时,它完全是错误的,(错误是在下面的代码中签名) package 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;
}
然后这是SearchResultActivity的代码
package com.example.search;
import java.util.ArrayList;
import com.example.database.search.*;
import android.app.ActionBar;
import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class SearchResultsActivity extends ListActivity
{
private DBDataSource dataSource;
private ArrayList<Sma> values;
private TextView txtQuery;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_result);
dataSource = new DBDataSource(this);
dataSource.open();
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
txtQuery = (TextView) findViewById(R.id.txtQuery);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent)
{
setIntent(intent);
handleIntent(intent);
}
/**
* Handling intent data
*/
private void handleIntent(Intent intent)
{
if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
//ERROR GOES HERE >WHEN THIS CODE IS RUN > IT'S SAY THE LOG CAT SAY'S 'no such column : nama_sma'
values = dataSource.getPoint(query);
ArrayAdapter<Sma> adapter = new ArrayAdapter<Sma>(this,android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
}
}
任何人都可以帮助我解决这个错误,我真的要感谢所有能够解决此代码的人,谢谢:D
这里是DBHelper package com.example.database.search;
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);
}
}
答案 0 :(得分:0)
除了使用显式名称"nama_sma ="
编写和访问列外,请使用您在代码中定义的键名称dbHelper.COLUMN_NAMA_SMA + " ="+
更改您的查询,如下所示:
Cursor c = database.query(DBHelper.TABLE_NAME, query, dbHelper.COLUMN_NAMA_SMA + " ="+ name, null, null, null, null);
答案 1 :(得分:0)
在getPoint()
中,您传递了一个不带引号的字符串参数:
Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma ="+ name, null, null, null, null);
这会将name
中的任何内容视为列名引用而不是文字。 SQL中的字符串文字需要使用''
单引号,但最好使用?
占位符并绑定这样的args:
Cursor c = database.query(DBHelper.TABLE_NAME, query, "nama_sma = ?", new String[] { name }, null, null, null);