日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器

發布時間:2025/3/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試實現一個活動,該活動具有3個微調器(下拉列表),每個微調器由sqlite數據庫中的不同表填充。 我設法創建了一個已正確填充的微調器,但是在創建其他兩個并正確填充它們時遇到了麻煩。

到目前為止,這是我的主要活動:

public class MainActivity extends Activity implements OnClickListener, OnItemSelectedListener {

private DBManager data;

private SQLiteDatabase db;

private final String DB_NAME ="hanakolfein.s3db";

private Spinner spinner;

List list;

ArrayAdapter adapter;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/*Spinner sp1, sp2, sp3;

sp1 = (Spinner) findViewById(R.id.spinner1);

sp2 = (Spinner) findViewById(R.id.spinner2);

sp3 = (Spinner) findViewById(R.id.spinner3);

sp1.setOnItemSelectedListener(null);

sp2.setOnItemSelectedListener(null);

sp3.setOnItemSelectedListener(null); */

data = new DBManager(this, DB_NAME);

db = data.openDataBase();

spinner = (Spinner) findViewById(R.id.spinner1);

spinner.setOnItemSelectedListener(this);

loadSpinner();

}

private void loadSpinner() {

Set set = data.getAllData();

List list = new ArrayList(set);

adapter = new ArrayAdapter(MainActivity.this,

android.R.layout.simple_spinner_item, list);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setWillNotDraw(false);

}

@Override

public void onItemSelected(AdapterView< ? > parent, View view,

int position, long id) {

// TODO Auto-generated method stub

}

@Override

public void onNothingSelected(AdapterView< ? > parent) {

// TODO Auto-generated method stub

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

}

這是我的數據庫管理器:

公共類DBManager擴展了SQLiteOpenHelper {

//Path to the device folder with databases

public static String DB_PATH;

//Database file name

public static String DB_NAME;

public SQLiteDatabase database;

public final Context context;

public final static int DB_VERSION = 6;

public SQLiteDatabase getDb() {

return database;

}

public DBManager(Context context, String databaseName) {

super(context, databaseName, null, DB_VERSION);

this.context = context;

//full path to the databases

String packageName = context.getPackageName();

DB_PATH = String.format("//data//data//%s//databases//", packageName);

DB_NAME = databaseName;

openDataBase();

}

//This piece of code will create a database if it’s not yet created

public void createDataBase() {

boolean dbExist = checkDataBase();

if (!dbExist) {

this.getReadableDatabase();

try {

copyDataBase();

} catch (IOException e) {

Log.e(this.getClass().toString(),"Copying error");

throw new Error("Error copying database!");

}

} else {

Log.i(this.getClass().toString(),"Database already exists");

}

}

//Performing a database existence check

private boolean checkDataBase() {

SQLiteDatabase checkDb = null;

try {

String path = DB_PATH + DB_NAME;

checkDb = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);

} catch (SQLException e) {

Log.e(this.getClass().toString(),"Error while checking db");

}

//Android doesn’t like resource leaks, everything should

// be closed

if (checkDb != null) {

checkDb.close();

}

return checkDb != null;

}

//Method for copying the database

private void copyDataBase() throws IOException {

//Open a stream for reading from our ready-made database

//The stream source is located in the assets

InputStream externalDbStream = context.getAssets().open(DB_NAME);

//Path to the created empty database on your Android device

String outFileName = DB_PATH + DB_NAME;

//Now create a stream for writing the database byte by byte

OutputStream localDbStream = new FileOutputStream(outFileName);

//Copying the database

byte[] buffer = new byte[1024];

int bytesRead;

while ((bytesRead = externalDbStream.read(buffer)) > 0) {

localDbStream.write(buffer, 0, bytesRead);

}

//Don’t forget to close the streams

localDbStream.close();

externalDbStream.close();

}

public SQLiteDatabase openDataBase() throws SQLException {

String path = DB_PATH + DB_NAME;

if (database == null) {

createDataBase();

database = SQLiteDatabase.openDatabase(path, null,

SQLiteDatabase.OPEN_READWRITE);

}

return database;

}

@Override

public synchronized void close() {

if (database != null) {

database.close();

}

super.close();

}

public Set getAllData() {

Set set = new HashSet();

String selectQuery ="select * from cuisine";

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {

do {

set.add(cursor.getString(1));

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return set;

}

@Override

public void onCreate(SQLiteDatabase db) {}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

}

"我在創建另外兩個時遇到麻煩",您應該更詳細地確切說明自己遇到的麻煩。

很好地創建第一個,我使用了loadSpinner內部的getAllData來填充它,在另外兩個中,我是否還要再創建2個具有不同查詢的getAllData? 我是否要創建另一個loadSpinner? 我不確定如何進行@Takendarkk

好吧,首先,您不應該從主線程查詢數據庫。

我建議按照此處所述使用裝載程序。 在每種情況下,對于每個微調框,您可以根據需要設置任意數量的裝載程序(只需確保為它們指定不同的ID)即可。

您需要清除傳遞給arrayadapter的那個arraylist。 因為當您使用第一個微調器時,您要調用gatAllData并將該數據存儲在arraylist中,然后將其傳遞給arrayadapter。 下次使用第二個微調器時,您將執行相同的步驟,但它將連接到arraylist的先前條目。 因此,在調用getAllData之前,您需要清除數組列表。 它會解決您的問題。

總結

以上是生活随笔為你收集整理的java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。