gpt4 book ai didi

java - Helloworld 数据库 - android 与 sqlite 的连接

转载 作者:行者123 更新时间:2023-11-30 04:32:17 24 4
gpt4 key购买 nike

我是 Android 的新开发者。我只需要编写一个简单的 hello-world 应用程序,它可以在屏幕上显示有关应用程序所连接的数据库的一些数据。这是我的尝试,但它在“选择或显示”部分崩溃了。它由两个文件组成:Main 和 DataBaseHelper。

主要内容:

package com.SQLearning;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;

public class HelloTestSQLActivity extends Activity {
DatabaseHelper dbHelper;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
dbHelper = new DatabaseHelper(this);
int seats = dbHelper.getSeats("2");
TextView tv = new TextView(this);
setContentView(tv);
tv.setText( "My first Android App: This is a Hello World Test..." +
"Database connection in progress..." +
"Table 1 has "+seats);

dbHelper.close();
}
}

数据库助手:

package com.SQLearning;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

static final String dbName="demoDB";
static final String tablesTable="Tables";
static final String colNum="TableNum";
static final String colSeats="NumSeats";
private final Context myContext;

static final String viewTables="ViewTables";

public DatabaseHelper(Context context) {
super(context, dbName, null,2);
this.myContext = context;
}

public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub

db = getWritableDatabase();

db.execSQL("CREATE TABLE "+tablesTable+" ("+colNum+ " INTEGER PRIMARY KEY , "+
colSeats+ " INTEGER)");


db.execSQL("CREATE VIEW "+viewTables+
" AS SELECT "+tablesTable+"."+colNum+" AS _id,"+
" "+tablesTable+"."+colSeats+","+
" FROM "+tablesTable);

//Inserts pre-defined departments
insertTableRecords();
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

db.execSQL("DROP TABLE IF EXISTS "+tablesTable);
db.execSQL("DROP VIEW IF EXISTS "+viewTables);
onCreate(db);
}

public void insertTableRecords() {
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();

cv.put(colNum, 1);
cv.put(colSeats, 3);
db.insert(tablesTable, colNum, cv);

cv.put(colNum, 2);
cv.put(colSeats, 6);
db.insert(tablesTable, colNum, cv);

cv.put(colNum, 3);
cv.put(colSeats, 5);
db.insert(tablesTable, colNum, cv);

cv.put(colNum, 4);
cv.put(colSeats, 2);
db.insert(tablesTable, colNum, cv);

db.close();
}

public int getSeats(String tablenum)
{
SQLiteDatabase db=this.getReadableDatabase();

String[] args = new String[] {"1"};
Cursor cur = db.rawQuery(" SELECT "+colSeats+" FROM "+tablesTable+" WHERE "+colNum+"=? ", args);

cur.moveToFirst();
db.close();
//return cur.getInt(cur.getColumnIndex(colSeats));
return cur.getInt(0);

}
}

提前致谢

最佳答案

您关闭了数据库连接,然后尝试从游标中读取一些内容。光标指向您的数据库,如果您同时关闭连接,它将失败。

替换:

   db.close();
return cur.getInt(0);

与:

  int value= cur.getInt(0);
db.close();
return value;

还要经常查看日志(Eclipse 中的 DDMS 选项卡),您可以在那里看到异常的描述。

顺便说一句。你不应该直接使用列索引,代码不是很可读。而不是 cur.getInt(0) 使用 cur.getInt(cur.getColumnIndex(colSeats))...

关于java - Helloworld 数据库 - android 与 sqlite 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com