Java 填充SQLite数据库
我不太熟悉android sqlite数据库。我对填充sqlite数据库只有粗略的概念。我听了一些教程,但它们讲述了不同的事情。 我有一个android项目,它的一个包是.db 这个包由5个不同的类组成。它们是:Java 填充SQLite数据库,java,android,sqlite,Java,Android,Sqlite,我不太熟悉android sqlite数据库。我对填充sqlite数据库只有粗略的概念。我听了一些教程,但它们讲述了不同的事情。 我有一个android项目,它的一个包是.db 这个包由5个不同的类组成。它们是: DataAdapter.java DataBaseHelper.java DBAdapter.java LoadDBActivity.java 选择dbadapter.java 我知道SelectDBAdapter类用于从数据库中选择数据。我的数据库位于.jpeg格式的资产文件夹中。我
如果有人能如此友好地解释使用这些不同类的含义,以及我们为什么要使用这样一个senario,我将不胜感激 填充数据库有多种方法。我要做的是在DBAdapter类中创建一个
insert(ObjectType objectName)
。也就是说,我创建了一个对象类,在这个例子中,我将使用授权人员
public class AuthorizedPersonnelClass {
private String _id;
private String Last_Name;
private String Middle_Name;
private String First_Name;
private String Store_ID;
private String Status;
private String New_Personnel;
//of course insert your 2 constructors and getter setter methods here
}
在DBAdapter中,我将创建insert(AuthorizedPersonnelClass authorizedPersonnel)
方法来处理数据插入:
public long addPersonnel(AuthorizedPersonnelClass authorizedPersonnel){
ContentValues values = new ContentValues();
values.put(AUTHORIZEDPERSONNEL_ID, authorizedPersonnel.get_id());
values.put(L_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getLast_Name());
values.put(M_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getMiddle_Name());
values.put(F_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getFirst_Name());
values.put(STATUS, authorizedPersonnel.getStatus());
values.put(STORE_ID, authorizedPersonnel.getStore_ID());
values.put(NEW, authorizedPersonnel.getNew_Personnel());
return this.mDB.insert(TABLE_AUTHORIZED_PERSONNEL, null, values);
}
从这里开始,假设我想在我的onCreate()
函数或按钮调用中填充条目,我将这样做:
//instantiate a global variable for the DBAdapter
DBAdapter db = new DBAdapter(this);
//then if you want to insert
db.insert(new AuthorizedPersonnelClass( /*insert variables here*/ ));
当然,这些值可能是硬编码的或用户输入的(只需使用EditText并提取字符串并在那里使用它们)
在这里,我使用了
ContentValues
示例,因为对于初学者来说,使用它比使用rawQuery Insert语句更容易,这可能会让人困惑。填充数据库有多种方法。我要做的是在DBAdapter类中创建一个insert(ObjectType objectName)
。也就是说,我创建了一个对象类,在这个例子中,我将使用授权人员
public class AuthorizedPersonnelClass {
private String _id;
private String Last_Name;
private String Middle_Name;
private String First_Name;
private String Store_ID;
private String Status;
private String New_Personnel;
//of course insert your 2 constructors and getter setter methods here
}
在DBAdapter中,我将创建insert(AuthorizedPersonnelClass authorizedPersonnel)
方法来处理数据插入:
public long addPersonnel(AuthorizedPersonnelClass authorizedPersonnel){
ContentValues values = new ContentValues();
values.put(AUTHORIZEDPERSONNEL_ID, authorizedPersonnel.get_id());
values.put(L_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getLast_Name());
values.put(M_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getMiddle_Name());
values.put(F_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getFirst_Name());
values.put(STATUS, authorizedPersonnel.getStatus());
values.put(STORE_ID, authorizedPersonnel.getStore_ID());
values.put(NEW, authorizedPersonnel.getNew_Personnel());
return this.mDB.insert(TABLE_AUTHORIZED_PERSONNEL, null, values);
}
从这里开始,假设我想在我的onCreate()
函数或按钮调用中填充条目,我将这样做:
//instantiate a global variable for the DBAdapter
DBAdapter db = new DBAdapter(this);
//then if you want to insert
db.insert(new AuthorizedPersonnelClass( /*insert variables here*/ ));
当然,这些值可能是硬编码的或用户输入的(只需使用EditText并提取字符串并在那里使用它们)
在这里,我使用了
ContentValues
示例,因为对于初学者来说,使用它比使用rawQuery Insert语句更容易,这可能会让人困惑。填充数据库有多种方法。我要做的是在DBAdapter类中创建一个insert(ObjectType objectName)
。也就是说,我创建了一个对象类,在这个例子中,我将使用授权人员
public class AuthorizedPersonnelClass {
private String _id;
private String Last_Name;
private String Middle_Name;
private String First_Name;
private String Store_ID;
private String Status;
private String New_Personnel;
//of course insert your 2 constructors and getter setter methods here
}
在DBAdapter中,我将创建insert(AuthorizedPersonnelClass authorizedPersonnel)
方法来处理数据插入:
public long addPersonnel(AuthorizedPersonnelClass authorizedPersonnel){
ContentValues values = new ContentValues();
values.put(AUTHORIZEDPERSONNEL_ID, authorizedPersonnel.get_id());
values.put(L_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getLast_Name());
values.put(M_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getMiddle_Name());
values.put(F_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getFirst_Name());
values.put(STATUS, authorizedPersonnel.getStatus());
values.put(STORE_ID, authorizedPersonnel.getStore_ID());
values.put(NEW, authorizedPersonnel.getNew_Personnel());
return this.mDB.insert(TABLE_AUTHORIZED_PERSONNEL, null, values);
}
从这里开始,假设我想在我的onCreate()
函数或按钮调用中填充条目,我将这样做:
//instantiate a global variable for the DBAdapter
DBAdapter db = new DBAdapter(this);
//then if you want to insert
db.insert(new AuthorizedPersonnelClass( /*insert variables here*/ ));
当然,这些值可能是硬编码的或用户输入的(只需使用EditText并提取字符串并在那里使用它们)
在这里,我使用了
ContentValues
示例,因为对于初学者来说,使用它比使用rawQuery Insert语句更容易,这可能会让人困惑。填充数据库有多种方法。我要做的是在DBAdapter类中创建一个insert(ObjectType objectName)
。也就是说,我创建了一个对象类,在这个例子中,我将使用授权人员
public class AuthorizedPersonnelClass {
private String _id;
private String Last_Name;
private String Middle_Name;
private String First_Name;
private String Store_ID;
private String Status;
private String New_Personnel;
//of course insert your 2 constructors and getter setter methods here
}
在DBAdapter中,我将创建insert(AuthorizedPersonnelClass authorizedPersonnel)
方法来处理数据插入:
public long addPersonnel(AuthorizedPersonnelClass authorizedPersonnel){
ContentValues values = new ContentValues();
values.put(AUTHORIZEDPERSONNEL_ID, authorizedPersonnel.get_id());
values.put(L_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getLast_Name());
values.put(M_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getMiddle_Name());
values.put(F_NAME_AUTHORIZED_PERSONNEL, authorizedPersonnel.getFirst_Name());
values.put(STATUS, authorizedPersonnel.getStatus());
values.put(STORE_ID, authorizedPersonnel.getStore_ID());
values.put(NEW, authorizedPersonnel.getNew_Personnel());
return this.mDB.insert(TABLE_AUTHORIZED_PERSONNEL, null, values);
}
从这里开始,假设我想在我的onCreate()
函数或按钮调用中填充条目,我将这样做:
//instantiate a global variable for the DBAdapter
DBAdapter db = new DBAdapter(this);
//then if you want to insert
db.insert(new AuthorizedPersonnelClass( /*insert variables here*/ ));
当然,这些值可能是硬编码的或用户输入的(只需使用EditText并提取字符串并在那里使用它们)
在这里,我使用了
ContentValues
示例,因为初学者更容易使用它,而不是使用可能会让人困惑的rawQuery Insert语句。根据我的开发经验,我总是喜欢在/res/raw文件夹中添加一个准备好的sqlite数据库文件。使用Firefox的sqlite Manager插件创建/管理sqlite数据库,这是一个很棒的工具。这个方法真的很棒,因为
- 首先,我不需要为创建/管理数据库编写大量代码
- 最重要的是,有些应用程序需要从预先填充的数据库中读取数据。我不需要关心应用程序需要什么以及数据库是空的还是已满的。这是万能的。我只需要编写一些运行所需简单SQL的方法
package your.packagee.name;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String pkg = "your package name";
private static String DB_PATH = "/data/data/" + pkg + "/databases/";
private static String DB_NAME = "yourDBFile.sqlite";
int[] dbfiles = { R.raw.chunk1 , R.raw.chunk2 ..... };
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() {
boolean dbExist = checkDataBase();
if (dbExist) {
// do nothing - database already exist
} else {
this.getReadableDatabase();
try {
CopyDataBase();
} catch (IOException e) {
Toast.makeText(myContext, e.getMessage(), Toast.LENGTH_SHORT)
.show();
Log.d("Create DB", e.getMessage());
}
}
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS);
} catch (SQLiteException e) {
Toast.makeText(myContext, e.getMessage(), Toast.LENGTH_SHORT)
.show();
Log.d("Check DB", e.getMessage());
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
private void CopyDataBase() throws IOException {
InputStream databaseInput = null;
Resources resources = myContext.getResources();
String outFileName = DB_PATH + DB_NAME;
OutputStream databaseOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[512];
int length;
for (int i = 0; i < dbfiles.length; i++) {
databaseInput = resources.openRawResource(dbfiles[i]);
while ((length = databaseInput.read(buffer)) > 0) {
databaseOutput.write(buffer, 0, length);
databaseOutput.flush();
}
databaseInput.close();
}
databaseOutput.flush();
databaseOutput.close();
}
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public boolean deleteItem (String ID){
String query = "delete from item where id='" + ID + "'" ;
Log.d("Query : ", query);
try{
myDataBase.execSQL(query);
return true ;
} catch (Exception e){
Log.d("Exception", e.toString());
return false ;
}
}
public Cursor getSearchFromID(String id) {
return myDataBase.rawQuery("select * from item where id = \"" + id + "\"", null);
}
public boolean addSave(String type, String data , String time) {
String query = "insert into item (type, data , timestamp) values ('" + type
+ "', '" + data + "', '" + time + "')";
try {
myDataBase.execSQL(query);
return true ;
} catch (Exception e) {
return false ;
}
}
}
然后只使用DatabaseHelper类中编写的方法。样品是这样的
String id = "1";
DataBaseHelper helper = new DataBaseHelper(this);
helper.openDataBase();
Cursor c = helper.getSearchFromID(id);
if(c.getCount() > 0){
c.moveToFirst();
while(!c.isAfterLast()){
// extract your data from cursor
c.MoveToNext();
}
}
希望它能解决你在安卓系统中关于sqlite数据库的所有问题。至少对我来说它解决了。谢谢。根据我的开发经验,我总是喜欢在/res/raw文件夹中添加一个准备好的sqlite数据库文件。使用Firefox的sqlite Manager插件创建/管理sqlite数据库,这是一个很棒的工具。这个方法真的很棒,因为
- 首先,我不需要为创建/管理数据库编写大量代码
- 最重要的是,有些应用程序需要从预先填充的数据库中读取数据。我不需要关心应用程序是什么