- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的游标和数据库有问题,如果我使用 !cursor.isAfterLast() 一段时间,我在实际非空行之后的空结果与我启动应用程序的次数一样多(并放置一个行中的值)
这是我的代码:
public class DatabaseCreator extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME_WITH_EXTENSION = "drawinguess_local_database.db";
// Table Names
public static final String DB_TABLE = "image_bmp";
// column names
private static final String COLUMN_ID = "_id";
private static final String KEY_NAME = "image_title";
private static final String KEY_AUTHOR = "image_author";
private static final String KEY_IMAGE = "image_data";
// Table create statement
private static final String CREATE_TABLE_IMAGE = "CREATE TABLE " + DB_TABLE + "("+ COLUMN_ID + " integer primary key autoincrement, " + KEY_NAME + " TEXT," + KEY_AUTHOR + " TEXT," + KEY_IMAGE + " BLOB);";
public DatabaseCreator(Context context) {
super(context, DATABASE_NAME_WITH_EXTENSION, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
db.execSQL(CREATE_TABLE_IMAGE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// on upgrade drop older tables
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
// create new table
onCreate(db);
}
public void addEntry(String title, String author, byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, title);
cv.put(KEY_AUTHOR, author);
cv.put(KEY_IMAGE, image);
database.insert( DB_TABLE, null, cv );
}
public void addEntry(String title, byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, title);
cv.put(KEY_IMAGE, image);
database.insert( DB_TABLE, null, cv );
}
public void addEntry(byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_IMAGE, image);
database.insert( DB_TABLE, null, cv );
}
public void updateLastTitle(String title) throws SQLiteException{
SQLiteDatabase database = this.getWritableDatabase();
String strSQL;
//Cursor cursor = database.query(DATABASE_NAME, new String[]{"ID"}, null, null, null, null, null);
Cursor cursor = database.rawQuery("SELECT "+ COLUMN_ID +" FROM " + DB_TABLE, null);
cursor.moveToLast();
strSQL = "UPDATE " + DB_TABLE + " SET "+ KEY_NAME + " = \"" + title +"\" WHERE "+ COLUMN_ID +" = "+ cursor.getColumnCount();
database.execSQL(strSQL);
}
public List<TitledBitmap> getAllTitledBitmap() {
SQLiteDatabase database = this.getReadableDatabase();
List<TitledBitmap> titledBitmaps = new ArrayList<TitledBitmap>();
Cursor cursor = database.query(DB_TABLE, new String[]{"image_title", "image_data"}, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
System.out.println("This is the title : " + cursor.getString(0));
TitledBitmap titledBitmap = cursorToTitledBitmap(cursor);
titledBitmaps.add(titledBitmap);
cursor.moveToNext();
}
cursor.close();
return titledBitmaps;
}
private TitledBitmap cursorToTitledBitmap(Cursor cursor) {
TitledBitmap titledBitmap = new TitledBitmap();
titledBitmap.setTitle(cursor.getString(0));
titledBitmap.setByteArray(cursor.getBlob(1));
return titledBitmap;
}
}
我猜问题出在 getAllTitledBitmap() 中,这要归功于 Syso 的输出:
I/System.out: This is the title : TheValueThatWorked
This is the title : null
This is the title : null
提前谢谢你祝你有个美好的一天
最佳答案
您的问题是您在使用 addEntry
时使用的是 byte[] only 签名,并且这不会设置标题,因此它将为空。
使用 :- 测试您的代码
private void SO50301166() {
DatabaseCreator dc = new DatabaseCreator(this);
dc.addEntry("001 Added with author","Fred",new byte[]{0,1,2,3,4,5,6,7,8,9,0});
dc.addEntry("002 Added",new byte[]{12,13,14,15,16,17,18,19,10});
dc.addEntry(new byte[]{20,21,22,23,24,25,26,27,28,29,30});
dc.getAllTitledBitmap();
}
结果:-
05-11 23:10:28.306 1283-1283/? I/System.out: This is the title : 001 Added with author
This is the title : 002 Added
This is the title : null
即使用 dc.addEntry(new byte[]{20,21,22,23,24,25,26,27,28,29,30});
不设置标题,因此它将为空。
所以你可能想改变:-
public void addEntry(byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_IMAGE, image);
database.insert( DB_TABLE, null, cv );
}
成为:-
public void addEntry(byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_IMAGE, image);
cv.put(KEY_NAME,"No Title Provided"); //<<<< ADDED
database.insert( DB_TABLE, null, cv );
}
但是你可以简化你的代码,也不会遇到与 Author 相同的问题,方法是:-
public void addEntry(String title, String author, byte[] image) throws SQLiteException {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, title);
cv.put(KEY_AUTHOR, author);
cv.put(KEY_IMAGE, image);
database.insert(DB_TABLE, null, cv);
}
public void addEntry(String title, byte[] image) throws SQLiteException {
addEntry(title,"No Author Proivided", image);
}
public void addEntry(byte[] image) throws SQLiteException {
addEntry("No Title Provided",image);
}
即主要代码在最完整的签名中,较小的签名调用下一个更完整的签名。
使用它会导致(使用之前的测试用例):-
This is the title : 001 Added with author
This is the title : 002 Added
This is the title : No Title Provided
关于android - 游标遍历空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301166/
我想用 python 读取串行端口,并用 readline 打印结果,但我在所有结果行之间得到空行。你能告诉我如何删除所有空行吗? 我的代码: #!/usr/bin/python import ser
我正在编写一个程序,该程序存储用户输入的数字,但如果输入空白则退出。 我尝试将其设为字符数组并检查长度。如果长度大于0,则表示有输入,因此它将存储输入。如果长度为0,则表示没有输入,因此退出循环。 d
这个项目要求我通过取出所有注释、空行、额外的空格和括号中的信息来读取处理中的文件,然后将其打印到output.txt中。我在处理数据和删除所有注释、空行、额外的空格和括号中的信息时遇到了麻烦。 这是我
有没有办法从服务器响应中删除空行?我已经尝试过: trimSpaces true 和 这没有正确解决问题,因为在 init param 方法中它甚至删除了
你好, if('\t' == input [0] ||'\v' == input [0] ||'\r' == input [0] ||'\n' == input [0] || '\0' == in
我不知道如何用语言来解释这个场景。所以我在写例子: 我有一个名为 tblType 的表: type_id | type_name --------------------- 1 |
代码如下: <?php /* *读取文件内容至字符串中,同时去除换行、行首行尾空格。 */ header("Content-type: text/html; chars
我正在将行与两个文本文件的行进行比较,ref.txt (引用)和 log.txt .但是我想忽略任一文件中的任意数量的空行;我怎样才能做到这一点? ref.txt one two three end
关于删除jtable中未使用的行的问题我正在使用DefualtTableModel我的表已经有一些数据并且当我更新它时将一些列留空以稍后更新主题,以便它们是空列..我想在保存数据之前用按钮删除主题..
我看到列表,它有适量的行(根据 QStringList 中的元素数量),但行是空的。 我做错了什么? 在 C++ 中我的代码是: QStringList s; s.append("1"); s.app
我怎样才能从这些行中隐藏 UITableView 的行,什么是不使用的。例如,看截图: 我可以只显示 4 行并隐藏其他未使用的行吗?所以,我只显示 4 行,然后是白屏,而不是现在的行 最佳答案 喜欢将
对于我的 bash/html 中的 CGI,我有这个脚本(只是 awk 脚本,其余代码只是一个简单的 hmtl 代码): for fn in /var/www/cgi-bin/LPAR_MAP/*;
一直在尝试使用输出 html 方法转换 xml 文档,以便使用 xsl 样式表(使用 CSS)在浏览器中显示。想显示以下代码 Source A Co
我想在我的 LOG 语句之后添加一个空行,以使我的日志更加分隔和可读。 我该怎么做? 当前声明: LOGGER.info("Person's name is {} .", person.getNa
我正在执行以下假脱机语句: SET VERIFY OFF SET FEEDBACK OFF SET HEADING OFF SET TRIMSPOOL ON SET TERM OFF SPOOL &p
包含五个相关字段的表格; ID (Autoincrement,unique, etc) ID_customer - ties in each row to another table with cus
我有这样的风格: #cytoscape-container { width: 100%; height: 100%; margin: 0 aut
while((fscanf(datafile, " %127[^;] %[^\n]", name, movie)) == 2) { printf("%s\n", movi
我有这个two commands获取 SID 用户帐户 wmic useraccount where name='%username%' get sid | findstr /b /C:"S-1" >
我使用这段代码: window.removeDuplicateLines = function() { "use strict"; var bodyText = $('#text-area')
我是一名优秀的程序员,十分优秀!