我学会了最近在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) 我正在尝试使用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) 我的查询是 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中使用哪个查询。

我似乎无法做到这一点.我正在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) 我有一个插入语句,我的应用程序需要大约 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) 我已经看到 MySQL 支持 MEDIUMTEXT,它可以存储大约 16mb 的数据,而 LONGTEXT 支持大约 4gb 的数据。SQLite 是否支持中文本?。提前致谢....
我想知道可以采用 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)
第一个例子更安全吗?
执行时更快?
更容易阅读……
还是一样?
我正在编写可能是最简单的程序来创建一个游标,所以我可以演示一个查询。我遇到了错误“无法解析符号 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 应用程序中,我有一个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)
任何帮助将不胜感激。
我收到以下错误:
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)