gpt4 book ai didi

java - 无法从另一个 Activity 的数据库中导出 SQLite 数据库中的数据

转载 作者:行者123 更新时间:2023-11-30 00:15:39 24 4
gpt4 key购买 nike

我正在尝试将数据从一个 Activity 导出到我的数据库类 (DBHelper.java) 中的“csv”文件,但出现以下错误:

no such table: SQLiteExample.db (Sqlite code 1): , while compiling: SELECT * FROM SQLiteExample.db, (OS error - 2:No such file or directory)
android.database.sqlite.SQLiteException: no such table: SQLiteExample.db (Sqlite code 1): , while compiling: SELECT * FROM SQLiteExample.db, (OS error - 2:No such file or directory)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

这是我的报告 Activity 代码 (ExportJobCard.java)

 public void exportDataBaseIntoCSV() {


DBHelper db = new DBHelper(this);
File exportDir = new File(Environment.getExternalStorageDirectory(), "/JOBCARDSDATABASE");

if (!exportDir.exists()) {
exportDir.mkdirs();
}

File file = new File(exportDir, "csvfilename.csv");

try {
file.createNewFile();
CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
SQLiteDatabase sql_db = db.getReadableDatabase();
Cursor curCSV = sql_db.rawQuery("SELECT * FROM " + DBHelper.DATABASE_NAME, null);
csvWrite.writeNext(curCSV.getColumnNames());

while (curCSV.moveToNext()) {
//Which column you want to export you can add over here...
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
csvWrite.writeNext(arrStr);
}

csvWrite.close();
curCSV.close();
} catch (Exception sqlEx) {
Log.e("Error:", sqlEx.getMessage(), sqlEx);
}
}

如果我将上面的代码直接添加到我的 JobCard.class 中,用户在其中输入数据并点击保存,它就可以工作,但是我想对报告进行不同的 Activity ,因为我有 2 个数据库,我需要获取报告来自。

我不确定我在这里做错了什么,因为如果它在上述 Activity 中起作用,那么如果我只是在另一个 Activity 中起作用,它肯定会起作用吗?

这是我的数据库类 (DBHelper.java)

public class DBHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "SQLiteExample.db";
private static final int DATABASE_VERSION = 2;

public static final String PERSON_TABLE_NAME = "person";
public static final String PERSON_COLUMN_ID = "_id";
public static final String PERSON_COLUMN_NAME = "name";
public static final String PERSON_COLUMN_GENDER = "gender";
public static final String PERSON_COLUMN_AGE = "age";

public DBHelper(Context context) {
super(context, DATABASE_NAME , null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"CREATE TABLE " + PERSON_TABLE_NAME +
"(" + PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_COLUMN_NAME + " TEXT, " +
PERSON_COLUMN_GENDER + " TEXT, " +
PERSON_COLUMN_AGE + " INTEGER)"
);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + PERSON_TABLE_NAME);
onCreate(db);
}

public boolean insertPerson(String name,
String gender,
int age) {

SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();

contentValues.put(PERSON_COLUMN_NAME, name);
contentValues.put(PERSON_COLUMN_GENDER, gender);
contentValues.put(PERSON_COLUMN_AGE, age);

db.insert(PERSON_TABLE_NAME, null, contentValues);
return true;
}

public int numberOfRows() {
SQLiteDatabase db = this.getReadableDatabase();
int numRows = (int) DatabaseUtils.queryNumEntries(db, PERSON_TABLE_NAME);
return numRows;
}

public boolean updatePerson(Integer id,
String name,
String gender,
int age) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(PERSON_COLUMN_NAME, name);
contentValues.put(PERSON_COLUMN_GENDER, gender);
contentValues.put(PERSON_COLUMN_AGE, age);

contentValues.put(PERSON_JOBDESCRIPTION, jobdescription);
db.update(PERSON_TABLE_NAME, contentValues, PERSON_COLUMN_ID + " = ? ", new String[] { Integer.toString(id) } );
return true;
}

public Integer deletePerson(Integer id) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(PERSON_TABLE_NAME,
PERSON_COLUMN_ID + " = ? ",
new String[] { Integer.toString(id) });
}

public Cursor getPerson(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + PERSON_TABLE_NAME + " WHERE " +
PERSON_COLUMN_ID + "=?", new String[]{Integer.toString(id)});
return res;
}

public Cursor getAllPersons() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery( "SELECT * FROM " + PERSON_TABLE_NAME, null );
return res;
}
}

有人可以帮我解决这个问题吗?

最佳答案

您的问题可能来自不同的问题。我以前遇到过,我会尽力帮助您

当您创建一个 sqlite 数据库时,如果您这样做,您应该将其注册到 list 文件中,但是您再次面临卸载并重新安装您的应用程序,因为您的数据库已经创建,因此对于下一个版本的数据库(例如新表),因为数据库已经存在你的调试器不会创建新的或替换旧的调试器所以虽然你编辑了你的数据库但是你手机中已经存在的东西是旧的。所以卸载并重新安装您的应用程序以创建新的 sqlite 数据库。如果您再次遇到此问题,请检查您的语法,这绝对是您的语法错误。而且我认为这里还有另一个问题

"CREATE TABLE " + PERSON_TABLE_NAME +
"(" + PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_COLUMN_NAME + " TEXT, " +
PERSON_COLUMN_GENDER + " TEXT, " +
PERSON_COLUMN_AGE + " INTEGER)"

取而代之

"CREATE TABLE " + PERSON_TABLE_NAME +
"(" + PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_COLUMN_NAME + " TEXT, " +
PERSON_COLUMN_GENDER + " TEXT, " +
PERSON_COLUMN_AGE + " INTEGER);"

你忘了加“;”

希望我帮到你了。

关于java - 无法从另一个 Activity 的数据库中导出 SQLite 数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355893/

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