我正在重温C++并且一直在关注一个没有实际问题的教程.但是,我有一个关于结构的部分,它说在c ++ 14中你可以使用非静态初始化和unifrom初始化.按照:-
但是,在C++ 14中,这个限制被解除了,两者都可以使用.如果两者都提供,则初始化列表/统一初始化语法优先.在上面的例子中,Triangle x将被初始化为长度和宽度2.0.
我的代码是: -
struct Triangle
{
double length = 1.23; // non-static member initialization
double width = 2.45;
};
int Triangular()
{
Triangle x{ 2.0, 2.0 }; // uniform initialization
return 0;
}
......
int main() ......
Run Code Online (Sandbox Code Playgroud)
但是,我无法编译(我在Windows 7上使用Code :: Blocks).如果我删除非静态初始化并使用(即删除= 1.23
和= 2.45
),那么它确实编译: -
struct Triangle
{
double length; // non-static member initialization
double width;
};
int Triangular()
{
Triangle x{ …
Run Code Online (Sandbox Code Playgroud) 我有几个定期从服务器更新的表 ( Benefit
, Branch
, Coupon
) 和另外两个仅本地的表 ( FavoriteBenefit
, UsedCoupon
)。ER图如下所示:
每当Benefit
在服务器上删除a 时,我还想从FavoriteBenefit
. 为此,我可以使用onDelete = ForeignKey.CASCADE
,每当Benefit
数据库中不再存在父级时,它FavoriteBenefit
也会被删除。听起来不错。
每当我@Insert(onConflict = OnConflictStrategy.REPLACE)
用来更新数据库中的好处时就会出现问题
。REPLACE
实际上是一个执行DELETE
和INSERT
,但DELETE
在内部触发onDelete
的FavoriteBenefit
,因此,在该表中的所有数据被删除。
(Coupon
和UsedCoupon
表也会出现类似的问题。)
我正在寻找一种方法来暂时禁用外键约束,直到事务结束。也就是说,不要在事务期间验证外键,而只在事务结束时验证。我仍然希望 Room 自动删除没有有效父级的实体。
似乎通过在定义上设置将外键标记为延迟应该完全符合我想要实现的目标。deferred = true
@ForeignKey
布尔延迟 ()
外键约束可以推迟到事务完成。如果您在单个事务中对数据库进行批量插入,这将非常有用。默认情况下,外键约束是即时的,但您可以通过将此字段设置为 true 来更改它。
但即使我设置了deferred
标志,它似乎也没有效果,因为FavoriteBenefit
每次仍然被删除。
我是否deferred
错误地理解了标志?
特别是在readUnshared()
方法的背景下,ObjectInputStream
"反向引用"是什么意思?
我在这里遇到了这个词
如果调用readUnshared反序列化反向引用(先前已写入流的对象的流表示),则抛出ObjectStreamException.
参考:https://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readUnshared()
DB文件恢复后如何正确重新打开数据库?我在 AppModule 中打开它,如下所示:
@Singleton
@Provides
fun provideDb(app: Application): FastcountDb {
val db: FastcountDb = Room.databaseBuilder(app, FastcountDb::class.java, AppConfig.DB_NAME + ".db")
.fallbackToDestructiveMigration()
.setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
.build()
return db
}
Run Code Online (Sandbox Code Playgroud)
当我备份或恢复数据库文件时,我只需调用 RoomDatabase.close() 复制数据库文件,然后需要重新打开数据库。有什么方法可以再次触发provideDb(app:Application)吗?
我正在使用 Room,并在资产文件夹中预填充数据库。对于应用程序更新,我想通过添加新列并用新数据预填充此列来更改此数据库。
数据库从版本 1 自动迁移到版本 2(添加了一个表)。从版本 2 到版本 3,我现在想通过在资产文件夹中提供不同的“database.db”文件并允许破坏性迁移来应用上述更改。
@Database(entities = [Object1::class, Object2::class], version = 3, autoMigrations = [
AutoMigration (from = 1, to = 2)], exportSchema = true)
abstract class AppDatabase : RoomDatabase() {
abstract fun dao(): Dao
companion object {
private const val DB_NAME = "database.db"
@Volatile
private var instance: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return instance ?: synchronized(this) {
instance ?: buildDatabase(context).also { instance = it }
}
}
private fun buildDatabase(context: Context): AppDatabase …
Run Code Online (Sandbox Code Playgroud) 最初我是在卡片视图中添加信息(字符串)和照片(来自可绘制的)。我让它从列表中工作,并使用适配器等将其添加到回收器视图中的卡片中。现在我正在尝试使用 Room Persistence Library 迁移到保存这些信息,而不是在代码中添加虚拟信息,我将使其来自用户输入,因为我正在尝试实现这一点,我发现保存图像到 Room DB 也不是太容易。字符串现在工作正常,我只需要一种方法来保存从相机拍摄的图像。
我无法使用 Image、Bitmap、URI、Drawables 类型在 Room DB 中存储图像。
@Entity(tableName = "machines_table")
public class Machines {
@PrimaryKey(autoGenerate = true)
private int id;
private Drawable photoId;
private String name;
private String location;
public Machines(String name, String location, Drawable photoId) {
this.name = name;
this.location = location;
this.photoId = photoId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public String getLocation() …
Run Code Online (Sandbox Code Playgroud) 我在弄清楚如何让IEBGENER以我想要的方式工作时遇到了一些麻烦.我应该首先说明我在学术大型机上的z/OS环境中运行IEBGENER.
我有三个JCL过程(PROC)内联到我正在使用的一些COBOL代码,我需要IEBGENER作为将我的PROC放入"我的MVS ID下的永久过程库"的第一步,以及放入我的COBOL源"进入我的MVS ID下的永久顺序数据集".
教师提到"记得为这些数据集编写正确的LRECL和BLKSIZE信息."
我对IEBGENER不是很熟悉,也没有发现任何真正向我解释如何做我想做的事情.
任何"大铁"人都能提供帮助吗?
我正在关注下载android studio以及如何设置它的课程,我已经为我的手机下载了正确的驱动程序但是当我尝试运行我的hello world程序时我遇到了问题.
请记住,课程本身建议我更新名为activity_main.xml的文件.这是该文件的先前内容:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.udacity.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintLeft_toLeftOf="@+id/activity_main"
app:layout_constraintTop_toTopOf="@+id/activity_main"
app:layout_constraintRight_toRightOf="@+id/activity_main"
app:layout_constraintBottom_toBottomOf="@+id/activity_main" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
必须更新此代码才能与视频保持一致.新细分:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.udacity.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
当我尝试在手机上运行应用程序时,我得到的是:
Error:(7, 28) No resource found that matches the given name (at ‘paddingBottom’ with value ‘@dimen/activity_vertical_margin’).
Error:(8, 26) No resource found that matches the given name (at ‘paddingLeft’ with value ‘@dimen/activity_horizontal_margin’).
Error:(9, 27) …
Run Code Online (Sandbox Code Playgroud) 如何使用 Kotlin、Coroutines、ViewModel、LiveData 处理查询方法的返回类型 room
构建失败,我收到很多错误,这些错误指向我的 Dao 类,错误是
错误1:
不确定如何处理查询方法的返回类型(java.lang.Object)。DELETE 查询方法必须返回 void 或 int (已删除的行数)。
错误2:
错误:查询方法参数应该是可以转换为数据库列的类型或包含此类类型的列表/数组。您可以考虑为此添加一个类型适配器。kotlin.coroutines.Continuation<? 超级 kotlin.Unit> 延续);
错误3:
错误:未使用的参数:延续公共抽象java.lang.Object清除(@org.jetbrains.annotations.NotNull()
错误4:
错误:参数的类型必须是用@Entity注释的类或其集合/数组。kotlin.coroutines.Continuation<? 超级 kotlin.Unit> 延续);
错误5:
错误:不确定如何处理插入方法的返回类型。公共抽象 java.lang.Object insert(@org.jetbrains.annotations.NotNull()
**这是我的完整代码: https://drive.google.com/drive/folders/1qWoud5XogzkTmpa-GWxLJStfdUPSoV7r ?usp=sharing
android kotlin - 协程 Room ViewModel LiveData MainActivity.kt
package com.example.coroutine
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import kotlinx.android.synthetic.main.activity_main.*
import java.util.UUID
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
private lateinit var model: StudentViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// make text …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用带有预填充数据库的 Room,myDatabase.db
然后使用以下代码访问该数据库:
private val database = Room
.databaseBuilder(context.applicationContext, AppDatabase::class.java, dbName)
.createFromAsset("myDatabase.db")
.build()
Run Code Online (Sandbox Code Playgroud)
该文件myDatabase.db
存储在 /assets/ 文件夹中。然后我必须在这样的数据库中的表中添加一些新行。之后,我得到了一个更新的myDatabase.db
文件,我将其复制到 /assets/ 文件夹中替换旧文件。问题来了:安装应用程序后,它仍然使用旧数据。我做了一些搜索,但只找到了与迁移相关的结果。但是,就我而言,表的架构没有变化,只添加了一些新行。此外,我不明白为什么该应用程序不选择新myDatabase.db
文件而仍然使用旧文件。
让应用程序使用新文件的唯一解决方案myDatabase.db
是卸载应用程序,然后再次安装,但这是我想避免的事情。那么,如何更改myDatabase.db
assets文件夹中的文件并让应用程序通过Room选择新文件中的数据?
android android-assets android-room android-room-prepackageddatabase