标签: android-sqlite

为什么SQLiteOpenHelper在"onUpgrade"方法中删除表?

我学会了最近在Android OS上使用SQLite3的方法.但它有一个不可接受的部分.

我无法理解为什么在调用SQLiteOpenHelper的"onUpgrade"方法时删除表.为什么需要"onUpgarde"方法?

如果代码执行"drop table",旧版本DB的表数据将被删除,不是吗?

为什么要删除旧数据库的现有数据?

删除表时如何恢复现有的DB数据?


[这是学习代码]

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    final String CONFIRMED_SHEETS_TABLE = "confirmed_sheets";

    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql = "create table" +
                CONFIRMED_SHEETS_TABLE +
                "_id integer primary key autoincrement, " +
                "group text, " +
                "num001 text, " +
                "num002 text, " +
                "num003 text, " +
                "num004 text, " +
                "num005 text, " +
                "num006 …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite

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

ActiveAndroid Model类未正确初始化

我正在尝试使用ActiveAndroid来处理我的应用程序中的数据库.

这是我的模型类:

package ro.adrian.trivia.datamodel;

import java.io.Serializable;

import ro.adrian.trivia.database.TriviaSQLiteHelper;

import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;

@Table(name = TriviaSQLiteHelper.TABLE_USERS)
public class User extends Model implements Serializable, Comparable<User>{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Column(name = TriviaSQLiteHelper.COLUMN_USER_NAME)
    private String username;
    @Column(name = TriviaSQLiteHelper.COLUMN_FIRST_NAME)
    private String first_name;
    @Column(name = TriviaSQLiteHelper.COLUMN_LAST_NAME)
    private String last_name;
    @Column(name = TriviaSQLiteHelper.COLUMN_PASSWORD)
    private String password;

    public User(){
        super();
        this.username="";
        this.first_name="";
        this.last_name="";
        this.password="";
    }

    public User(String username, String password, String firstName, String lastName){
        super();
        this.username = username; …
Run Code Online (Sandbox Code Playgroud)

android activeandroid android-sqlite

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

使用游标在android中查询SQlite

我的查询是 SELECT DefaultId FROM tblsample where ('567' = DefaultId) || ('567' = Name)

在上面的查询中

table name = tblsample 
Column Names = DefaultId , Name
Input Value  = 567
Run Code Online (Sandbox Code Playgroud)

现在我想检查这个值在表中的哪一列中可用并返回它的DefaultId。我能够在 Sqlite 中实现这一点,想知道是否还有更好的方法来优化查询和在 android 中使用

database.query(boolean distinct, String table, String[] columns,String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
Run Code Online (Sandbox Code Playgroud)

我必须在android中使用哪个查询。

sqlite android android-cursor android-sqlite

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

无法在Android Studio中解析符号getReadableDatabse

我似乎无法做到这一点. 我正在android studio中复制一个关于SQLite数据库的youtube视频教程,我遇到了这个错误. 有人可以帮忙吗? 谢谢!

我似乎无法做到这一点.我正在android studio中复制一个关于SQLite数据库的youtube视频教程,我遇到了这个错误.有人可以帮忙吗?谢谢!

public class DataListActivity extends ActionBarActivity {
    ListView listView;
    SQLiteDatabase sqLiteDatabase;
    UserDBHelper userDBHelper;
    Cursor cursor;
    ListDataAdapter listDataAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data_list_layout);

    listView = (ListView) findViewById(R.id.list_view);
    listDataAdapter = new ListDataAdapter(getApplication(), R.layout.row_layout);
    listView.setAdapter(listDataAdapter);
   userDBHelper = new UserDBHelper(getApplicationContext());
    sqLiteDatabase = new userDBHelper.getReadableDatabase();
    cursor = userDBHelper.getInformations(sqLiteDatabase);
    if (cursor.moveToFirst()) {
        do {

            String Fname, Lname, Email, Password, Contact, Address;
            Fname = cursor.getString(0);
            Lname = cursor.getString(1);
            Email = cursor.getString(2);
            Password = cursor.getString(3);
            Contact = cursor.getString(4);
            Address = cursor.getString(5);
            DataProvider dataProvider = …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite android-studio

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

使用事务的 Android SQLite 批量插入

我有一个插入语句,我的应用程序需要大约 25 秒才能插入 ~1000 行。我试图用它Transactions来加快我的处理时间,但我在实现它时遇到了麻烦。

下面是我的方法inserting在我的DatabaseHandler

public boolean insertQuestions(String gid, String qid, String qname) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.beginTransaction();
    try {
        ContentValues contentValues = new ContentValues();
        contentValues.put(KEY_GID, gid);
        contentValues.put(KEY_QID, qid);
        contentValues.put(KEY_QNAME, qname);

        long result = db.insert(TABLE_QUESTIONS, null, contentValues);
        db.setTransactionSuccessful();
        if (result == -1) {
            db.close();
            return false;
        } else {
            db.close();
            return true;
        }
    } finally {
        db.endTransaction(); //Error is here
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行上述方法时出现以下错误:

08-28 15:50:40.961  20539-20539/? E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.murrion.navigationdrawer, …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-asynctask android-sqlite

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

SQLite 数据库是否像 android 中的 MySQL 一样支持 MEDIUMTEXT?

我已经看到 MySQL 支持 MEDIUMTEXT,它可以存储大约 16mb 的数据,而 LONGTEXT 支持大约 4gb 的数据。SQLite 是否支持中文本?。提前致谢....

sqlite android android-sqlite

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

execSQL:bindargs 更好吗?

我想知道可以采用 1 或 2 个参数的 execSQL 方法。
为什么使用第二种方法,如果我可以使用对象直接在SQLite db上进行操作?

例如:

db.execSQL("INSERT INTO "+ TableName +" VALUES (null, ?)",
        new Object[] { type.getName() })
Run Code Online (Sandbox Code Playgroud)

这比使用这个更好吗

db.execSQL("INSERT INTO "+ TableName +" VALUES (null,"+  type.getName() +")")
Run Code Online (Sandbox Code Playgroud)

第一个例子更安全吗?
执行时更快?
更容易阅读……
还是一样?

sqlite android android-sqlite

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

无法解析符号 getReadableDatabase();

我正在编写可能是最简单的程序来创建一个游标,所以我可以演示一个查询。我遇到了错误“无法解析符号 getReadableDatabase()”

PS:我已经尝试使缓存无效并重新启动。

    package com.example.arjunrao.databasedemo;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.database.Cursor;
import android.widget.EditText;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void onclick(View view){
        EditText editText = (EditText) findViewById(R.id.editText);
         String drink_name = (String)editText.getText().toString();

        try{
            SQLiteOpenHelper database = new Database_class(this);
            SQLiteDatabase db = new database.getReadableDatabase();
            db.query("DRINK",new String[] {"NAME","DESCRIPTION","FAVORITE"});
        }catch(SQLiteException ex){
           final AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
            alertDialog.setTitle("SQLITE EXCEPTION GENERATED");
            alertDialog.setPositiveButton("OK", new …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite

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

Android SQL DATETIME CURRENT_TIMESTAMP

在我的 android 应用程序中,我有一个CURRENT_TIMESTAMP默认值的日期时间字段。问题是它插入的值与模拟器的时间不同。

  • 如何插入设备的当前日期和时间。

  • 我可以使用此列对表进行排序或删除 24 小时之前的记录吗?

这是我的代码:

public void onCreate(SQLiteDatabase db) {
   String query = "CREATE TABLE " + TABLE_BLOCKEDSMS + " (" +
            COLUMN_BLOCKEDSMS + " TEXT," +
            COLUMN_DATETIME + "DATETIME DEFAULT CURRENT_TIMESTAMP);";
    db.execSQL(query);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

sqlite android android-sqlite

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

android.database.CursorIndexOutOfBoundsException: 请求索引 0,Android 中的大小为 0 错误

我收到以下错误:

01-12 22:19:27.787 20308-20308/com.pos.example E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.pos.example, PID: 20308
                                                                         java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                             at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                             at android.view.View.performClick(View.java:5226)
                                                                             at android.view.View$PerformClick.run(View.java:21266)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:168)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5845)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
                                                                          Caused by: java.lang.reflect.InvocationTargetException
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                             at android.view.View.performClick(View.java:5226) 
                                                                             at android.view.View$PerformClick.run(View.java:21266) 
                                                                             at android.os.Handler.handleCallback(Handler.java:739) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                             at android.os.Looper.loop(Looper.java:168) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5845) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
                                                                          Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                             at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) …
Run Code Online (Sandbox Code Playgroud)

android cursor android-sqlite

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