试图从Android上的SQLite表中获取数据......我做错了什么?

时间:2014-02-06 11:52:11

标签: java android database sqlite

我正在尝试创建一个Android应用,我可以选择一个地方(一个商家)并使用Google地图打开它。我先尝试过一个数组,只是为了检查它是否有效,并且它运行正常。所以,在那之后,我想更好地创建一个只有一个表的数据库,以便在应用程序和数据库之间进行交互。数据库的名称是 dbEmpresas.db ,表的名称是 empresas

MainActivity.java

public class MainActivity extends Activity{
    private Button conf;
    private Spinner cb;
    private String busqueda;
    private BDAdapter bd;
    private int i = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        cb = (Spinner) findViewById(R.id.cbBizkaia);
        conf = (Button)findViewById(R.id.bConf);

        llenarCB();

        conf = (Button)findViewById(R.id.bConf);
        conf.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                buscarMapa(cb.getSelectedItem().toString());
            }
        });
    }

    private void llenarCB() {
        try{
            bd = new BDAdapter(this);
            bd.open();
            Cursor s = bd.getEmpresas();
            String Empre[] = new String[bd.contEmp()];
            //String s[] = {"Beertecni","Linersa", "Técnicas Hidráulicas"};
            while(s.moveToNext()) {
                Empre[i] = s.getString(0);
                i++;
            }
            ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, Empre);
            cb.setAdapter(dataAdapter);
            bd.close();
        } catch (SQLiteException e) {
            System.out.println("Error "+e);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private void buscarMapa(String empresa) {       
        String dire = bd.getEnlace(empresa).toString();

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q="+busqueda));
        intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
        startActivity(intent);
    }
}

BDAdapter.java

public class BDAdapter{

    static final String TAG = "BDAdapter";
    static final String DATABASE_NAME = "dbEmpresas.db";
    static final int DATABASE_VERSION = 2;
    final Context context;
    int equiSel;

    DatabaseHelper DBHelper;
    SQLiteDatabase db;

    public BDAdapter(Context ctx){
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub  
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
        }
    }

    public BDAdapter open() throws SQLException{
        db = DBHelper.getWritableDatabase();
        return this;
    }

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

    Cursor getEmpresas(){
        return db.rawQuery("SELECT nombre FROM empresas;", null);
    }

    Cursor getEnlace(String nombre) {
        return db.rawQuery("SELECT enlace FROM empresas where nombre='"+nombre+"';", null);
    }

    public int contEmp(){
        db = DBHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT count(*) FROM empresas;", null);
        int cont = cursor.getInt(0);
        db.close();
        return cont;
    }
}

我一直在寻找几个小时,我没有找到任何有用的东西,请帮忙吗?

logcat的

02-06 12:21:41.815: E/AndroidRuntime(962): FATAL EXCEPTION: main
02-06 12:21:41.815: E/AndroidRuntime(962): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.maps/com.example.maps.MainActivity}: android.database.sqlite.SQLiteException: no such table: empresas: , while compiling: SELECT nombre FROM empresas;
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.os.Looper.loop(Looper.java:123)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread.main(ActivityThread.java:4627)
02-06 12:21:41.815: E/AndroidRuntime(962):  at java.lang.reflect.Method.invokeNative(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962):  at java.lang.reflect.Method.invoke(Method.java:521)
02-06 12:21:41.815: E/AndroidRuntime(962):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-06 12:21:41.815: E/AndroidRuntime(962):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-06 12:21:41.815: E/AndroidRuntime(962):  at dalvik.system.NativeStart.main(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962): Caused by: android.database.sqlite.SQLiteException: no such table: empresas: , while compiling: SELECT nombre FROM empresas;
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
02-06 12:21:41.815: E/AndroidRuntime(962):  at com.example.maps.BDAdapter.getEmpresas(BDAdapter.java:49)
02-06 12:21:41.815: E/AndroidRuntime(962):  at com.example.maps.MainActivity.llenarCB(MainActivity.java:44)
02-06 12:21:41.815: E/AndroidRuntime(962):  at com.example.maps.MainActivity.onCreate(MainActivity.java:30)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-06 12:21:41.815: E/AndroidRuntime(962):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-06 12:21:41.815: E/AndroidRuntime(962):  ... 11 more

1 个答案:

答案 0 :(得分:0)

您还没有在数据库中创建任何表格!看看这个,看看create table语句及它们的执行位置。 Similar question