标签: android-sqlite

使用SQLite数据库时的几个例外

这段代码:

public void foo() {
    new Thread() {
        @Override
        public void run() {
            ShaufelDatabaseHelper dbHelper = ShaufelDatabaseHelper.getInstance(parentActivity);
            SQLiteDatabase connection = null;
            Cursor queryData = null;

            final String[] values = new String[8];

            try{
                connection = dbHelper.getReadableDatabase();

                queryData = connection.rawQuery(         // line 132
                    "SELECT name, firstname, section, row, gravenr, type, workorder, comment "+
                    "FROM orders, graves "+
                    "WHERE orders.id=? AND graves.id=orders.id"
                    , new String[] {orderID});

                queryData.moveToFirst(); // line 138

                // ...
        } catch(Throwable t) {
            // ...
        }
    }.start();
}
Run Code Online (Sandbox Code Playgroud)

给我这些例外:

10-29 …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite

6
推荐指数
1
解决办法
5864
查看次数

SQL:按优先级排序,但最后输入0

我有一个名为"priority"的(int)列.当我选择我的项目时,我希望最高优先级(最低编号)是第一个,最低优先级(最高编号)是最后一个.

但是,没有优先级的项目(当前优先级为0)应该在具有优先级的列之后由其他列列出.

换一种说法.如果我有这些优先事项:

 1 2 0 0 5 0 8 9
Run Code Online (Sandbox Code Playgroud)

我该如何对它们进行排序:

 1 2 5 8 9 0 0 0 
Run Code Online (Sandbox Code Playgroud)

我想我可以使用Int.max而不是0,但是0组成了一个很好的默认值,我会尽量保留.

sql sqlite sql-order-by android-sqlite

6
推荐指数
2
解决办法
5973
查看次数

从我清除Application中的数据时删除了Sqlite数据库

我Sqlite在app中创建了数据库.当从我清楚数据settings->applications->manage applications的Sqlite删除分贝.保持sqlite数据库原样的任何建议.

android application-management android-sqlite

6
推荐指数
1
解决办法
8382
查看次数

SQLiteQueryBuilder中的selectionArgs不适用于列中的整数值

我正在尝试从数据库中选择一些数据,我有两片代码来做:

cursor = builder.query(db,
                    new String[]{"col1", "col2", "col3"},
                    "id = ?", new String[]{getSID(db)}, null, null, null);
Run Code Online (Sandbox Code Playgroud)

和

cursor = builder.query(db,
                    new String[]{"col1", "col2", "col3"},
                    "id = " + getSID(db), null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

它们之间的区别在于,根据文档,第一个似乎更正确,但它也不起作用 - 光标是空的.而不是第二个 - 我得到了我需要的所有数据.

所以我尝试在我的电脑上使用数据库副本执行不同的SQL查询,这就是我所拥有的:

SELECT col1, col2, col3 FROM SomeTables WHERE (id = '42')
Run Code Online (Sandbox Code Playgroud)

这个不起作用(这个查询显然等于查询,由第一个代码示例生成)

SELECT col1, col2, col3 FROM SomeTables WHERE (id = 42)
Run Code Online (Sandbox Code Playgroud)

这个工作正常(等于从第二个代码示例查询).

据我所知,SQLite应该自动执行类型转换,但出了点问题,我不知道为什么.您对如何修复第一个代码示例有什么想法吗?(或者,也许,数据库?)

如果重要的话,这里是CREATE带有id字段的表的简化脚本:

CREATE TABLE SomeTable ( ID PRIMARY KEY, col1, col2, [...] )
Run Code Online (Sandbox Code Playgroud)

UPD:顺便说一下,getSID(db)返回String …

sql sqlite android android-sqlite

6
推荐指数
2
解决办法
5503
查看次数

SQL中是否需要分号?

如果我忘了它,它有时会起作用;.但有时却没有.

在JDBC和Android SQLite中,似乎我根本不需要;.我很迷惑.

我什么时候应该使用分号?

sql jdbc android-sqlite

6
推荐指数
1
解决办法
7323
查看次数

Android SQLiteOpenHelper - 每个表的不同类?

我正在阅读这篇文章(http://www.vogella.com/tutorials/AndroidSQLite/article.html),以了解Android应用程序中的SQLite数据库.

在文章中他有一个提示:

最好为每个表创建一个单独的类.此类定义静态onCreate()和onUpgrade()方法.这些方法在SQLiteOpenHelper的相应方法中调用.这样,即使您有多个表,SQLiteOpenHelper的实现仍然可读.

如果我正确理解了这个提示,我应该为我的数据库中的每个表都有一个类?

这真的是最好的做法吗?

如果是这样,那么使用多个表的复杂查询呢?如果创建在不同的类中,我该如何管理?

如何正确保存数据库版本?对于每个表的更改,我会更改数据库版本号吗?

谢谢

sqlite android android-sqlite

6
推荐指数
1
解决办法
2865
查看次数

如何在SQLite中存储日期时间

这非常类似于另一个被关闭的问题,而不是一个真正的问题.我试图编辑它以使其有效重新开放,但被告知我最好不要问一个新问题.

我正在开发android并需要在sqlite数据库中存储datetime值来跟踪将生成通知的重复事件.我还需要能够根据时间范围查询数据库.

在SQLite的文档指出它不支持特定的日期类型但日期可以使用文本,REAL,或整型表示:

TEXT为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS").

真实如朱利安日数,根据公历4714年11月24日格林威治中午以来的天数.

INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数.

最初的优点似乎是:

  • TEXT对于数据库中的可读性非常有用,能够在以后直接显示(无需转换),但如果需要对它们执行计算则成本很高.从时区引入可能的错误.
  • 真正适用于1970年以前的日期,适合计算或日期比较.不代表时间,只代表几天.
  • INTEGER可用于计算或日期时间比较,非常好的兼容性,因为它是一个广泛支持的标准.

这听起来不错吗?使用INTEGER作为日期时间会使查询时间范围明显快于使用TEXT时的速度吗?还有什么我还没考虑过吗?

鉴于我的用例,哪些解决方案最好?

sqlite datetime android database-performance android-sqlite

6
推荐指数
1
解决办法
2479
查看次数

Android SQLite替代品

我正在构建一个简单的Android RPG.每位玩家最多可以获得约50名士兵.每个士兵都有一些统计数据(等级,hp,攻击等)和三个库存槽.游戏中只有大约100个项目可以填充这些库存位置.我希望建立一个关系数据库,它有一个士兵表,一个拥有物品的表,以及一些其他各种表.

速度是我的主要关注点.SQLite是明显的首选.但是,它看起来非常笨重,并且面向具有1000行的数据库.小型数据库有更好的选择吗?我不需要复杂的查询或任何东西,只是一种存储数据并将其备份到服务器的方法.

sqlite android database-performance android-sqlite

6
推荐指数
1
解决办法
1万
查看次数

Expandablelistview扩展simplecursoradapter以从sqlite填充

如何在片段内实现android SQLite,而不是将其扩展到片段以外的任何其他片段,同时将这些条目放在可扩展listview的子元素中.

这就是我所实现的:http://wptrafficanalyzer.in/blog/implementing-horizo​​ntal-view-swiping-using-viewpager-and-fragmentpageradapter-in-android/

我正在我的主要活动中实现视图寻呼机,因此我必须在其中做我必须做的事情.我不知道如何使用SQLite与片段和自定义Expandablelist适配器请帮助我.

在这里,我基本上将用户名和年龄作为用户条目,我希望在expandablelistview的子项中显示.

因此,日期表的问题无法打开参与活动,即活动2

更新:: SQLiteAdapter:

public class SQLiteDBAdapter {

private static final String TAG = "DBAdapter"; //used for logging database version changes
// DataBase info:
public static final String DATABASE_NAME = "entry";
public static final String DATABASE_TABLE2 = "entryTable";
public static final String DATABASE_TABLE1= "dateTable";
public static final int DATABASE_VERSION = 7; // The version number must be incremented each time a change to DB structure occurs.

//Field Names(date table):
public static final String …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-fragments android-sqlite

6
推荐指数
0
解决办法
1423
查看次数

拖放后,将RecyclerView项目的新位置存储在SQLite中

我有一个二维ArrayList类型String,它是适配器类的输入RecyclerView.每次onResume()调用时,列表中的数据都来自SQLite数据库.我已经实现了拖放功能和一个onMove()成功交换列表元素的功能.但是,我需要在onResume()调用之前存储修改后的列表,这将重写列表并用旧位置填充它.我的猜测是在onStop()事件中实现重写功能.这是我的主要活动:

RecyclerView recyclerView;
RecyclerViewAdapter adapter;
RecyclerView.LayoutManager layoutManager;

ArrayList<ArrayList<String>> data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    assert fab != null;
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(MainActivity.this, ViewDbActivity.class);
            startActivity(i);
        }
    });

    recyclerView = (RecyclerView) findViewById(R.id.myRecyclerView);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();

    ItemTouchHelper item …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop android-sqlite android-recyclerview

6
推荐指数
1
解决办法
1993
查看次数