我是 sqlite 的新手,但我确实尝试自己解决这个问题:我在 stackoverflow 上尝试了各种教程和答案,但没有成功。您可能认识该代码。我找不到我理解或可以用于我的案例的代码示例。
我有一个应用程序,用户可以通过输入以下内容来创建角色:他们的名字、姓氏、年龄。
用户可以按 + 1 年,在这种情况下,我希望年龄列中的所有整数都增加 1 并向用户显示。所有角色显然都应该老一岁。这是我无法在我的应用程序中完成的。
您能否告诉我应该如何修改代码来完成我想要的事情,您能否解释一下您的代码是如何工作的?
MainActivity.java:
public class MainActivity extends Activity {
ListView lv;
EditText firstnameTxt,familynameTxt,ageTxt;
Button savebtn,retrieveBtn,yearBtn;
ArrayList<String> characters=new ArrayList<String>();
ArrayAdapter<String> adapter;
String updatedAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstnameTxt=(EditText) findViewById(R.id.firstnameTxt);
familynameTxt=(EditText) findViewById(R.id.familynameTxt);
ageTxt=(EditText) findViewById(R.id.ageTxt);
savebtn=(Button) findViewById(R.id.saveBtn);
retrieveBtn=(Button) findViewById(R.id.retrievebtn);
yearBtn=(Button) findViewById(R.id.yearBtn);
lv=(ListView) findViewById(R.id.listView1);
lv.setBackgroundColor(Color.LTGRAY);
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_selectable_list_item,characters);
final DatabaseHelper db=new DatabaseHelper(this);
//EVENTS
savebtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//OPEN
db.openDB();
//INSERT …Run Code Online (Sandbox Code Playgroud) Table1是虚拟表,其中fts4和TABLE2是normal table。
查询1 (有效)
SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.id=TABLE2.id WHERE TABLE1 MATCH 'sometext' LIMIT %d,%d
Run Code Online (Sandbox Code Playgroud)
查询 2(不起作用)
SELECT * FROM TABLE2 LEFT OUTER JOIN TABLE1 ON TABLE1.id=TABLE2.id WHERE TABLE1 MATCH 'sometext' LIMIT %d,%d
Run Code Online (Sandbox Code Playgroud)
查询 2 出错
android.database.sqlite.SQLiteException:无法在请求的上下文中使用函数 MATCH(代码 1)
由此看来,FTS 表需要首先出现在 LEFT OUTER JOIN 上。为什么会发生这种情况?连接首先发生在应用 WHERE 子句之前。因此,如果它不适用于表类型不匹配,我假设它也不适用于 query1。请任何人解释一下这一点。内部发生了什么?另外,任何指向参考站点的链接都将不胜感激,以解释这一点。
数据库助手
public class DatabaseHelper extends SQLiteOpenHelper
{
public static final String DBNAME = "sample.sql";
public static final String DBLOCATION = null;/*"/data/data/com.example.final_view.database/databases/"*/
public static final int DATABASE_VERSION = 3;
public static final String TABLE_NAME = "sample";
public static final String S_BUSSTOP_ID="BUSSTOP_ID";
public static final String S_BUSSTOP_NAME="BUSSTOP_NAME";
public static final String S_NAME_E="NAME_E";
public static final String S_LONGITUDE="LONGITUDE";
public static final String S_LATITUDE="LATITUDE";
public static final String S_ARS_ID="ARS_ID";
public static final String S_NEXT_BUS="NEXT_BUS";
public static final String S_NUM="NUM";
public static final String S_STATION_LIST_ID="STATION_LIST_ID"; …Run Code Online (Sandbox Code Playgroud) 在此处将数据插入 sqlite 时出错是堆栈跟踪
E/SQLiteDatabase: Error inserting addhar_number=test profile_pic=null token=null name=Nikhil Patil email=niks34547@gmail.com phone= profile_pic_bg=null gender=test birthday=test
android.database.sqlite.SQLiteException: table user has no column named addhar_number (code 1): , while compiling: INSERT INTO user(addhar_number,profile_pic,token,name,email,phone,profile_pic_bg,gender,birthday) VALUES (?,?,?,?,?,?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
at com.wowoni.bikesharing.bicyclesharing.Helper.SQliteHandler.addUser(SQliteHandler.java:88)
at com.wowoni.bikesharing.bicyclesharing.activity.HomeActivity.loadNavHeader(HomeActivity.java:227)
at com.wowoni.bikesharing.bicyclesharing.activity.HomeActivity.onCreate(HomeActivity.java:129)
at android.app.Activity.performCreate(Activity.java:6684)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2652)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2766)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用房间持久库。我试图在查询中使用“like”子句,但我无法使用。我已经尝试过编译时 (Query) 和运行时查询 (Raw Query)。它既没有给出任何异常,也没有给出任何输出。
我尝试了以下方法,但都没有奏效:-
编译时间查询 -
@Query("select * from recipe where type_of_diet like '%vegetarian%' ")
public abstract DataSource.Factory<Integer, RecipeListPojo>
getRecipeListVeg();
Run Code Online (Sandbox Code Playgroud)原始查询 -
@RawQuery(observedEntities = RecipeListPojo.class)
public abstract DataSource.Factory<Integer,RecipeListPojo>
getAllRecipesList(SupportSQLiteQuery sqLiteQuery);
String query="select * from recipe where type_of_diet like '%vegetarian%' ";
SimpleSQLiteQuery simpleSQLiteQuery = new SimpleSQLiteQuery(query);
recipeDao.getAllRecipesList(simpleSQLiteQuery);
Run Code Online (Sandbox Code Playgroud)compileSdkVersion 27
使用的库 - 实现 "android.arch.persistence.room:runtime:1.1.0-beta3" annotationProcessor "android.arch.persistence.room:compiler:1.1.0-beta3"
请让我知道如何运行这些类型的查询。
android android-sqlite android-room android-architecture-components
是否可以将所有房间数据库以及所有表、条目导出到 json 文件?我看到一些使用 SQLite 完成的示例,但是 Room 数据库怎么样?
当我想使用房间查询在数据库中搜索用户时,我必须输入全名才能获得结果。如何在数据库中逐字母搜索?
@Query("SELECT * FROM database WHERE name LIKE :search")
fun find(search:String?):List<User>
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的纪元时间值1549251913000,我将此值保存到 SQLite。我创建如下表:
CREATE TABLE TABLE_BOOKMARK (COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, COLUMN_TITLE TEXT, COLUMN_SOURCE TEXT, COLUMN_DATEANDTIME INTEGER, COLUMN_GUID TEXT);
Run Code Online (Sandbox Code Playgroud)
该值COLUMN_DATEANDTIME与INTEGER类型无关。但当我获取该值时,它与我的预期不符。就变成这样了-1231280856。请给我一些建议,谢谢
我已经尝试过这个解决方案,但当我从 SQLite 获取它时仍然不匹配(似乎它不能解决我的问题)
sqlite基础文件存储在路径data/data/my-package-name/databases/mybase.db(Android模拟器存储SQLite数据库在哪里?)
有时,我在远程真实设备上获取此文件,我想将其复制到我的 Android Studio 上的 android 模拟器进行调试。换句话说,我希望我在 Android Studio 上的应用程序使用这个基础。我该怎么做?
另一种可能性:如何将这个基地复制到我通过 USB 电缆连接到 PC 的真实设备上
非常感谢,问候
sqlite android android-emulator android-sqlite android-studio
当运行查询以从房间数据库返回一些数据时,我在 API 23 物理设备上遇到此崩溃。
逻辑猫
E/AndroidRuntime: FATAL EXCEPTION: arch_disk_io_2
java.lang.RuntimeException: Exception while computing database live data.
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalArgumentException: column '`allOrNothing`' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
at androidx.room.util.CursorUtil.getColumnIndexOrThrow(CursorUtil.java:108)
at com.example.persistence.dao.DaoPieChart_Impl$2.call(DaoPieChart_Impl.java:169)
at com.example.persistence.dao.DaoPieChart_Impl$2.call(DaoPieChart_Impl.java:164)
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
我已经浏览了表格和模型,但看不到问题所在。列名明确存在。
桌子
@Entity (tableName = "tableDistortedThinking")
public class TableDistortedThinking {
@PrimaryKey(autoGenerate = true)
private long pkDistortedThinking;
@ColumnInfo(name = "reframingId")
private long fkReframingId;
@ColumnInfo(name = "userId")
private long fkUserId;
@ColumnInfo(name = "allOrNothing")
private …Run Code Online (Sandbox Code Playgroud) android ×10
android-sqlite ×10
sqlite ×6
android-room ×4
android-architecture-components ×1
fts4 ×1
java ×1
sql-update ×1