日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

我正在嘗試實(shí)現(xiàn)一個(gè)活動(dòng),該活動(dòng)具有3個(gè)微調(diào)器(下拉列表),每個(gè)微調(diào)器由sqlite數(shù)據(jù)庫(kù)中的不同表填充。 我設(shè)法創(chuàng)建了一個(gè)已正確填充的微調(diào)器,但是在創(chuàng)建其他兩個(gè)并正確填充它們時(shí)遇到了麻煩。

到目前為止,這是我的主要活動(dòng):

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

}

}

這是我的數(shù)據(jù)庫(kù)管理器:

公共類DBManager擴(kuò)展了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) {}

}

"我在創(chuàng)建另外兩個(gè)時(shí)遇到麻煩",您應(yīng)該更詳細(xì)地確切說明自己遇到的麻煩。

很好地創(chuàng)建第一個(gè),我使用了loadSpinner內(nèi)部的getAllData來(lái)填充它,在另外兩個(gè)中,我是否還要再創(chuàng)建2個(gè)具有不同查詢的getAllData? 我是否要?jiǎng)?chuàng)建另一個(gè)loadSpinner? 我不確定如何進(jìn)行@Takendarkk

好吧,首先,您不應(yīng)該從主線程查詢數(shù)據(jù)庫(kù)。

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

您需要清除傳遞給arrayadapter的那個(gè)arraylist。 因?yàn)楫?dāng)您使用第一個(gè)微調(diào)器時(shí),您要調(diào)用gatAllData并將該數(shù)據(jù)存儲(chǔ)在arraylist中,然后將其傳遞給arrayadapter。 下次使用第二個(gè)微調(diào)器時(shí),您將執(zhí)行相同的步驟,但它將連接到arraylist的先前條目。 因此,在調(diào)用getAllData之前,您需要清除數(shù)組列表。 它會(huì)解決您的問題。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。