- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我总是收到此错误。我的数据库是我自己创建的。我的意思是,我不是用代码创建它的。它从 Assets 文件夹创建它,如果我通过手机上的 Sqlite 阅读器应用程序打开它,它会完美地显示表格和数据。但是我无法在我的项目中读取该数据库。它创建数据库但无法从应用程序读取。我的连接类是一个 .aar 文件,我将其添加到 gradle 中。这是我的帮助代码:
public class Connection extends SQLiteOpenHelper {
private static String _dbPath;
private static String _dbName;
private final Context _context;
public Connection(Context context, int dbVer, String dbPath, String dbName) {
super(context, dbName, null, dbVer);
this._context = context;
_dbPath = dbPath;
_dbName = dbName;
CreateDatabase();
}
public void CreateDatabase() {
boolean dbExist = CheckDatabase();
if (!dbExist) {
this.getReadableDatabase();
try {
CopyDatabase();
} catch (IOException e) {
throw new Error("Error.");
}
}
}
private boolean CheckDatabase() {
SQLiteDatabase checkDB = null;
try {
String myPath = _dbPath + "/" + _dbName;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
if (checkDB != null) {
checkDB.close();
}
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
private void CopyDatabase() throws IOException {
InputStream myInput = _context.getAssets().open(_dbName);
String outFileName = _dbPath + "/" + _dbName;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}}
这是我的访问代码:
public static Cursor Select(Context context, Select select, ArrayList<Where> whereList) {
String dbPath, dbName;
Integer dbVer;
SQLiteDatabase database;
Cursor cursor;
dbVer = (Integer) TDTools.ReturnResource(context, R.integer.dbVer, TDTools.ResType.Integer);
dbName = (String) TDTools.ReturnResource(context, R.string.dbName, TDTools.ResType.String);
dbPath = Environment.getExternalStorageDirectory() + (String) TDTools.ReturnResource(context, R.string.dbPath, TDTools.ResType.String);
Connection con = new Connection(context, dbVer, dbPath, dbName);
database = con.getReadableDatabase();
WhereArgs whereArgs = WhereArgs.CreateArguments(whereList);
if (select == null) {
select = new Select();
}
//Here is where i get 'No Such Table' error...
cursor = database.query("Category", select.getColumns(), whereArgs.getWhereClauses(), whereArgs.getArguments(), null, null, null, null);
return cursor;
}
更新(帮助程序代码)
public class Connection extends SQLiteOpenHelper {
public static SQLiteDatabase DataBase;
private String _dbPath;
private String _dbName;
private final Context _context;
public Connection(Context context, int dbVer, String dbPath, String dbName) {
super(context, dbName, null, dbVer);
this._context = context;
this._dbPath = dbPath;
this._dbName = dbName;
CreateDatabase();
}
public void CreateDatabase() {
boolean dbExist = CheckDatabase();
if (!dbExist) {
//this.getReadableDatabase();
try {
CopyDatabase();
} catch (IOException e) {
throw new Error("Veritabanı kopyalanamadı...");
}
}
}
private boolean CheckDatabase() {
SQLiteDatabase checkDB = null;
try {
String myPath = this._dbPath + "/" + this._dbName;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
checkDB = null;
}
return checkDB != null ? true : false;
}
private void CopyDatabase() throws IOException {
InputStream myInput = this._context.getAssets().open(this._dbName);
String outFileName = this._dbPath + "/" + this._dbName;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
最佳答案
尝试大写表名“CATEGORY”。如果这不起作用,请查看您是否真正打开了创建的数据库或只是打开了一个新数据库。
您可以使用以下命令检查数据库的示例:
SELECT name, sql FROM sqlite_master WHERE type='table' ORDER BY name;
<小时/>
更新
一般建议:将 logmeseages 添加到您的代码中,以便您可以了解正在发生的情况。
关于您的代码的一些想法:
} catch (SQLiteException e) {
if (checkDB != null) {
checkDB.close();
}
}
可能您想在此处设置 chechDB = null,因为数据库无法打开并且已损坏(需要重新复制)。
if (!dbExist) {
this.getReadableDatabase();
try {
CopyDatabase();
} catch (IOException e) {
throw new Error("Error.");
}
}
为什么在复制数据库之前调用 this.getReadableDatabase()
?
更新2
您调用super(context, dbName, null, dbVer);
,这意味着数据库文件“dbName”已打开。但是您将数据库复制到 this._dbPath + "/"+ this._dbName
!您必须使用相同的路径。
super(context, dbPath + "/" + dbName, null, dbVer);
关于java - “没有这样的表”SqliteDatabase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51095282/
表字段: _id, street, house_nr 查询: mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_STREET_NAME,
我在 Android 中查询 SQLITE 数据库时遇到问题。我有一个名为“重置”的表,其中包含一些值。目前我只有一篇文章。 reset_timestamp | interval 1479442048
您好,我想知道在 Android 上哪种方法更快。 我有一个处理数千行的循环,我认为 SQLiteDatabase.insert() 方法会影响性能。 在插入方法中,我放置了一个带有 contentv
我有 editText1、editText2 和 EditText3 .用户需要在此区域写入个人信息。当他们按下保存按钮时, editText1、editText2 和 EditText3 必须保存。
我总是收到此错误。我的数据库是我自己创建的。我的意思是,我不是用代码创建它的。它从 Assets 文件夹创建它,如果我通过手机上的 Sqlite 阅读器应用程序打开它,它会完美地显示表格和数据。但是我
在我的应用程序数据库中,我有 2 个表,一个名为“PLAYERS”,其中包含每个用户的数据,另一个名为“FRIENDSLIST”,旨在成为每个注册帐户的个人“ friend ”列表。我的应用程序中的流
我想知道如何使用具有 where 子句和 like 属性的查询方法。基本上我想要的是选择所有列,其中 C_NAME 列是 LIKE keyWord。 我已经试过了,但它不起作用: cursor = d
我想打开一个包含所有短信和彩信的数据库。我想这样做是因为我需要进行原始查询,所以我需要让它工作。我正在尝试这样做: try{ SQLiteDatabase sqLiteDataba
在我的 SQLiteOpenHelper 类中寻址我的数据库时,我收到“没有这样的表”错误,即使调用了 onCreate 方法并且我在该方法中创建了表结构。 public class BVCDbHel
我试图在 SQLiteDatabase 中存储一些信息。当我调用方法 insert 时,它返回 -1。所以发生了错误,但我无法弄清楚哪里出了问题。 代码如下: public class SQLiteH
我有一个扩展 SQLiteOpenHelper 的类和一个声明为的数据库: @Override public void onCreate(SQLiteDatabase db) { db.exe
我正在尝试研究并制作一个简单的数据库,该数据库创建一个只有一行的表。当我使用 SQLiteHelper 的“update()”方法时,我第一次看到它有效。但是,当我尝试使用 SQL 命令“UPDATE
每当我使用数据库时,我都会创建一个新的 SQLOpenHelper 实例。 我有一个屏幕 A,它有一个在 onResume () 中使用 readableDatabase () 的方法。在屏幕 B 中
我正在实现“添加到 Collection 夹”功能。用户应该能够将数据添加到数据库的位置。 DatabaseHandler 正在运行,我已经创建了一个类来处理 get/set 方法。 我可以轻松地将数
我正在编写一个显示有趣事实(及其来源)的应用程序。用户可以一个一个地浏览事实。 这是我想到的设计: 在 SQLiteDatabase 中创建一个表,其中一个文本列存储有趣的事实,第二个列存储它的来源。
我试图存储一个非常大的数字,它大于 INTEGER 和 REAL 字段类型可以容纳的 8 个字节。我需要能够返回此字段中包含小于或大于我指定的另一个大数字的数字的行。我不知道该怎么做。似乎我唯一的选择
已编辑: 是的,SQLite doesn't support嵌套事务,但是 docs声明 SQLiteDatabase 确实如此。 情况 我有一个包含交易的方法,我需要从另一个交易中调用这个方法。 此
有没有一种直接的方法来查询 SQLiteDatabase 的选择参数不是 String 类型? 特别是:如果 arg 是 byte[] 类型? 我能找到的最接近的东西是 SQLiteDatabase.
我试图让 db.update 用新值更新我的数据库中的一行,但它似乎没有保存。我查看了语法,但似乎无法保存数据。插入功能有效但不更新。任何帮助,将不胜感激。下面是我的数据类,它使用 DbHelper
我正在尝试从数据库中删除一些内容然后插入一个新值。我对数据库知之甚少,所以希望得到有关这里出了什么问题的建议。 我不断收到以下错误: Caused by: java.lang.IllegalState
我是一名优秀的程序员,十分优秀!