我正在创建一个应用程序,我遇到了问题Cursor.当我尝试使用此函数获取值时SQLiteDatabase,我有一个返回给Cursor我:
public Cursor fetchOption(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得该领域的价值Cursor.如果我这样做:
String a = mOptionDb.fetchOption(0).getColumnName(0).toString();
String b = mOptionDb.fetchOption(0).getColumnName(1).toString();
String c = mOptionDb.fetchOption(0).getColumnName(2).toString();
Run Code Online (Sandbox Code Playgroud)
我只获取列(_id, title, body)的名称,但不获取值.有关如何实现这一目标的任何建议?
我需要将一个字符串数组保存到数据库,但它不会让我.这就是我所拥有的:
public long createEntry(String startTime, String endTime, String[] states) {
ContentValues initialValues = new ContentValues();
initialValues.put(START_KEY_TIME , startTime);
initialValues.put(END_KEY_TIME , endTime);
initialValues.put(KEY_STATE, states );
return databaseConnect.insert(DATABASE_TABLE, null, initialValues);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我把string[]状态放入,它说内容值不能参与.我该如何解决这个问题?我以为我在状态中有7个东西,我可以喜欢有7个单独的字符串并在每个中存储东西然后将所有字符串放回字符串数组中吗?或者这是不好的做法?
我在我的应用程序中使用了包含多个表的数据库.我有一个XML解析器,需要在解析时将数据写入两个表.我为这两个表创建了两个数据库适配器,但现在我遇到了问题.当我使用一张桌子时,很容易:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
firstTable.open(); // open and close it every time I need to insert something
// may be hundreds of times while parsing
// it opens not a table but whole DB
firstTable.insertItem(Item);
firstTable.close();
Run Code Online (Sandbox Code Playgroud)
因为它是一个SAX解析器,在我看来(也许我错了),这将更好:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
@Override
public void startDocument() throws SAXException
{
firstTable.open(); // open and close only once
}
...
firstTable.insertItem(Item);
...
@Override
public void endDocument() throws SAXException
{
firstTable.close();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要将数据插入第二个表,我该怎么做?例如,如果我有第二个适配器,我认为这将是一个坏主意:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
SecondDBAdapter secondTable = …Run Code Online (Sandbox Code Playgroud) 在Android Studio中的类中键入SQLite语句作为字符串文字时,IDE会向我发出以下警告:"<expr> expected, got '?'".
我不明白这意味着什么,但代码工作正常,我想禁用检查.但我不知道哪个检查导致它.其中有数千种,并且搜索或预期产量没有有用的结果.
Android Studio的版本是3.0.它发生在一堆不同的语句中,但典型的一个看起来像这样:
SQLiteStatement st = db.compileStatement(
"INSERT OR REPLACE INTO routes(route_code, route_desc) VALUES(?,?)"
);
Run Code Online (Sandbox Code Playgroud) 我正在尝试在真实设备上调试我的应用程序,但是我收到此错误:
ERROR/AndroidRuntime(981):引起:java.lang.IllegalArgumentException:列'_id'不存在
当我在模拟器上进行测试时,不会出现错误.错误在以下代码的最后一行中给出:
adapter = new SimpleCursorAdapter(this, R.layout.list_item, c, new String[] {
DataHandlerDB.CONTACT_NAME_COL,
DataHandlerDB.CONTACT_NUMBER_COL,
DataHandlerDB.CONTACT_DURATION_COL,
DataHandlerDB.CONTACT_DATE_COL }, new int[] {
R.id.contact_name, R.id.phone_number, R.id.duration, R.id.date });
Run Code Online (Sandbox Code Playgroud)
这是我的活动:
public class MyActivity extends Activity {
private static final String LOG_TAG = "MyActivity";
private ListView listview;
private SimpleCursorAdapter adapter;
private DataHandlerDB handler;
private SQLiteDatabase db;
private OpenHelper helper;
private Cursor c;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
helper = new OpenHelper(this);
db = helper.getWritableDatabase();
helper.onCreate(db);
setBasicContent();
c.close();
}
@Override
public void onDestroy(){ …Run Code Online (Sandbox Code Playgroud) 我将SQLite数据库移动到SD卡,但有时会抛出以下异常:
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
Run Code Online (Sandbox Code Playgroud)
关于如何防止这种情况发生的任何建议?
如何在Android SQLite数据库中存储长值?我试图存储长类型格式的时间(毫秒)值.
我试图创建一个SQLite数据库并用它做一些事情.但我发现我的onCreate方法甚至没有被调用!!
我在onCreate方法开始时向LogCat发送消息.
我的假设是,(超级)构造函数将调用onCreate方法.是对的吗?
我的代码:
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.content.Context;
import android.database.Cursor;
import android.content.ContentValues;
import android.util.Log;
public class DatabaseHandler extends SQLiteOpenHelper {
// Static Constants
/*** Database details ***/
// Database version
private static final int DATABASE_VERSION = 1;
// Database name
private static final String DATABASE_NAME = "database_name";
/*** Database Tables ***/
/** Events **/
// Event table
private static final String TABLE_EVENT = "event";
// Event table columns
private static final String …Run Code Online (Sandbox Code Playgroud) 这是我在下面给出的查询.
select * from data where value = "yes";
Run Code Online (Sandbox Code Playgroud)
我的id是自动增量,下面是给定查询的结果.
id || value
1 || yes
3 || yes
4 || yes
6 || yes
9 || yes
Run Code Online (Sandbox Code Playgroud)
如何在sqlite中使用ROW_NUMBER?这样我就可以得到下面给出的结果.
NoId || value
1 || yes
2 || yes
3 || yes
4 || yes
5 || yes
Run Code Online (Sandbox Code Playgroud)
ROW_NUMBER作为NoId.
我在我的Android应用程序中保存了一个数据库,并希望检索插入数据库的最后10条消息.
我用的时候:
Select * from tblmessage DESC limit 10;
Run Code Online (Sandbox Code Playgroud)
它给了我10条消息,但来自TOP.但我想要最后 10条消息.可能吗?
假设整个表数据是 -
1,2,3,4,5....30
Run Code Online (Sandbox Code Playgroud)
我写了查询 select * from tblmessage where timestamp desc limit 10
表明 30,29,28...21
但我希望序列为 - 21,22,23...30