我无法弄清楚.query调用的语法.我需要选择与某个列匹配的所有记录,这些列对于第二个(不同的)列没有空值或空值
我最好的尝试:
Cursor cursor = mDatabase.query(DatabaseOpenHelper.TABLE_ROOMS, mAllColumns,
DatabaseOpenHelper.KEY_ROOM_HOSPITAL_ID
+ " =? AND " + DatabaseOpenHelper.KEY_ISO + " IS NOT NULL OR NOT ?",
new String[]{String.valueOf(hospitalId), ""}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
这将返回所有记录.如果我使用AND代替OR,它返回与hospitalId匹配的记录,但忽略NOT NULL或NOT""部分.
有小费吗?我应该使用rawQuery调用吗?谢谢.
当"混合模式组装"和"单独的互操作dll"版本都提供第三方组件时,每种组件的优缺点是什么?
一个很好的例子是System.Data.SQLite.
以上链接有这样的说法:
只有在出于某种原因必须将汇编二进制文件部署到全局程序集缓存的情况下,才应使用[混合模式汇编]程序包.
但为什么?混合模式程序集似乎在我的项目中工作正常,没有安装GAC(只需xcopy到应用程序的exe目录).有一个更少的DLL是很好的.这感觉整洁.那么缺点是什么?
反之亦然,为什么一个人会赞成这两个DLL"native-dll + interop-dll"版本?
所以假设我们有这样一个简单的查询:
Select a.col1, b.col2 from tb1 as a inner join tb2 as b on tb1.col7 = tb2.col8;
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
tb1 col1
tb1 col7
tb2 col2
tb2 col8
Run Code Online (Sandbox Code Playgroud)
我尝试使用一些 python 库来解决这个问题:
1) 即使只使用提取表sqlparse也可能是一个大问题。例如,这本官方书籍根本无法正常工作。
2)使用正则表达式似乎真的很难实现。
3)但后来我发现了这个,这可能会有所帮助。但是问题是我无法连接到任何数据库并执行该查询。
有任何想法吗?
我有一个应用程序,默认选项是将用户数据存储为本地SQLite数据库,但是,如果用户想要登录并将本地数据库传输到在线数据库,我想添加该选项,以便可以在多个设备.
我对云存储解决方案没有多少经验,所以任何建议都会非常感激.我的应用程序Firebase实时数据库 是最好的在线解决方案还是我应该研究另一种方法?
我做了很多研究,无法找到合适的方法来删除SQLite数据库中的所有表.最后,我做了一个代码来从数据库中获取所有表名,我尝试逐个使用检索到的表名删除表.它没有用.
请建议我从数据库中删除所有表的方法.
这是我使用的代码:
public void deleteall(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
do
{
db.delete(c.getString(0),null,null);
}while (c.moveToNext());
}
Run Code Online (Sandbox Code Playgroud)
deleteall()单击按钮时调用函数,代码如下:
public void ButtonClick(View view)
{
String Button_text;
Button_text = ((Button) view).getText().toString();
if(Button_text.equals("Delete Database"))
{
DatabaseHelper a = new DatabaseHelper(this);
a.deleteall();
Toast.makeText(getApplicationContext(), "Database Deleted Succesfully!", Toast.LENGTH_SHORT).show();
}}
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个插件,它将使用EF6.1和SQLite用于我无法更改App.config的应用程序,因此需要在代码中设置所有配置和连接字符串.
我发现这个答案在使用Entity Framework 6和SQLite时看起来很有前途
所以现在我有一个这样的配置类:
public class CollectionDbConfiguration : DbConfiguration
{
public CollectionDbConfiguration()
{
SetProviderServices("System.Data.SQLite"(DbProviderServices)SQLiteProviderFactory.Instance.GetService(typeof(DbProviderServices)));
SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance);
SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经确认在第一次创建上下文之前会遇到这种情况并且所有这些都返回值.
我的上下文看起来像这样
public class MyContext : DbContext
{
public MyContext(string connectionString)
: base(connectionString) { }
public DbSet<MyEntity> MyEntities { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一些代码称之为:
var context = new MyContext("Data Source = mytest.db; Version = 3;");
var entities = context.MyEntities.ToList();
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,看起来上下文假设连接字符串是针对SQL Server的,因为它给了我:
不支持关键字:'版本'.
如果我删除它然后我得到一个错误,它无法连接,它显然尝试连接到SQL Server数据库.
我尝试通过添加构造函数传递SQLite连接:
public MyContext(DbConnection connection)
: base(connection, contextOwnsConnection: true)
{ }
Run Code Online (Sandbox Code Playgroud)
并用它调用它:
var context …Run Code Online (Sandbox Code Playgroud) IFNULL()Postgres 中SQLite的等价物是什么?
我必须跟随查询(Ruby中的sqlite):
SELECT ifnull(max(code_id) + 1, 1)
FROM configentries
WHERE configtable_id = ...
Run Code Online (Sandbox Code Playgroud)
如果我想要与PostgreSQL相同的结果,这应该怎么样?
我有一个类实体如下
@Entity
public class Task {
private String name;
private Integer ParentId;
private Integer userId;
@Ignore
private int noOfSubTask;
}
Run Code Online (Sandbox Code Playgroud)
在DAO类中有一个方法getTaskList()
@Dao
public interface TaskDao extends Dao<Task> {
@Query("SELECT *,(SELECT count(*) FROM Task b WHERE a._id = b.ParentId ) AS noOfSubTask FROM Task a ")
LiveData<List<Task>> getTaskList();
}
Run Code Online (Sandbox Code Playgroud)
我想用noOfSubTask填充由(SELECT count(*)FROM Task b WHERE a._id = b.ParentId)部分查询给出的数字,但问题是它不是一列,所以房间库不会映射它getTaskList方法in dao实现(自动生成)类.
有没有办法用dao类房间库的任何方法来填充实体的非列字段(比如我的情况下的noOfSubTask)?
java sqlite android android-room android-architecture-components
我正在尝试以编程方式备份房间数据库.
为此,我只是复制.sqlite包含整个数据库的文件
但是,在复制之前,由于房间已启用提前写入日志,我们必须关闭数据库,以便将-shm文件和-wal文件合并为单个.sqlite文件.正如这里指出的那样
我.close()在RoomDatabase对象上运行:
一切正常,备份,但是,稍后,当我尝试执行INSERT查询时,我收到此错误:
android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1)
Run Code Online (Sandbox Code Playgroud)
关闭后如何才能正确地重新打开房间数据库?
PS:.isOpen()在RoomDatabase对象返回true前INSERT
房间版: 1.1.1-rc1
sqlite android sqliteopenhelper android-room android-architecture-components
我正在使用Room Persistence Library 1.1.0.我可以/data/data/<package_name>/databases/使用Android Studio的Device File Explorer 找到数据库文件.它包含多个表,我可以使用room-DAOs 访问该表的内容而没有任何问题.但是打开时sqlite-browser,显示没有表格.
可能是什么原因?是否有可能解决这个问题,而无需切换回旧SQLiteOpenHelper的/data/data/<package_name>/databases/?
sqlite android sqlite-browser android-room sqlite-journal-mode
sqlite ×10
android ×6
android-room ×3
android-architecture-components ×2
.net ×1
c# ×1
database ×1
firebase ×1
ifnull ×1
interop ×1
java ×1
mixed-mode ×1
parsing ×1
postgresql ×1
python ×1
regex ×1
sql ×1