小编Ada*_*331的帖子

错误1215:使用ON DELETE SET NULL时无法添加外键约束

我正在尝试在MySQL中创建以下表.第一个:

CREATE TABLE IF NOT EXISTS address(
  address_id INT NOT NULL AUTO_INCREMENT,
  address_region VARCHAR(10) NOT NULL,
  address_country VARCHAR(20) NOT NULL,
  address_city VARCHAR(30) NOT NULL,
  PRIMARY KEY(address_id))ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

我成功创建了它,但是当我尝试创建另一个表时如下

CREATE TABLE IF NOT EXISTS spot(
  spot_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  spot_address INT(11) NOT NULL,
  spot_name VARCHAR(50) NOT NULL,
  spot_desc VARCHAR(500) DEFAULT ' ',
  spot_speadd VARCHAR(100) NOT NULL,
  spot_viewtime INT DEFAULT 0,
  FOREIGN KEY(spot_address)
  REFERENCES address(address_id)
  ON DELETE SET NULL
  ON UPDATE SET NULL);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ERROR 1215(HY000):无法添加外键约束

为什么这个create table语句失败了?

mysql

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

如何从意图中获取额外日期?

我正在打包一个intent,其中一个我添加的Extras是一个日期对象,如下所示:

intent.putExtra(DATE_EXTRA, t.getDate());
Run Code Online (Sandbox Code Playgroud)

后来,当我阅读附加内容时,我试着像这样得到日期:

this.date = new Date(intent.getExtras().getString(DATE_EXTRA));
Run Code Online (Sandbox Code Playgroud)

但是,这会返回有关String为空的错误.我不认为以上是正确的方法,因为我不是在找字符串,但我无法在intent.getDateExtra()任何地方找到方法.我该怎么办?

我知道日期传递正确,因为我可以在调试时看到它: 在此输入图像描述

java android date android-intent

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

MySQL 存储过程没有返回正确的结果

我有一个存储过程,用于检查用户是否已经存在,无论它使用数据库中的第一行返回的电子邮件使用什么输入。如果我手动运行 select 语句,我会得到正确的结果。任何建议为什么?

CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN `Email` VARCHAR(30))
BEGIN
    DECLARE User_ID INT(30);
        SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1;

    IF (User_ID > 0) THEN
        SELECT * FROM `Users` WHERE `User ID` = User_ID;
    ELSE
        SELECT concat('No Users Found: ', Customer_Name);
    END IF;
END
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

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

当使用CursorAdapter的回调时,调用initLoader()只能工作一次

在我的活动中,我有一个代表医生的列表视图.每行都有医生的名字和一个复选框.我已经实现了一个回调接口,这样当选择医生时,所有其他医生都会从列表视图中删除,只剩下选定的医生.

它似乎有效,因为一旦我选择了医生,所有其他人都被移除了.当我取消检查医生时,每个人都被加回.但是,如果我现在选择一位不同的医生,原来的医生会停下来而其他所有医生都会被移除.

为了更好地解释这个问题,让我们说当我开始活动时,我在列表视图中有两位医生,Joel和Sam.我想我想选择Joel,所以我这样做,而且Sam从列表中删除了.然后,我意识到我错了,所以我取消选择乔尔,我现在看到列表中的乔尔和萨姆.最后,我选择了Sam.但是,Sam被从列表中删除,只有Joel再次出现.

以下是适配器类的一些代码片段:

@Override
public void bindView(View view, Context context, Cursor cursor) {
    ViewHolder viewHolder = (ViewHolder) view.getTag();

    final long id = cursor.getLong(cursor.getColumnIndex(DoctorEntry._ID));
    String firstName = cursor.getString(cursor.getColumnIndex(DoctorEntry.COLUMN_FIRSTNAME));

    viewHolder.nameView.setText(firstName);

    viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(mCallbacks != null){
                if(isChecked){
                    mCallbacks.onDoctorChecked(id);
                } else{
                    mCallbacks.onDoctorUnchecked();
                }
            }
        }
    });
}

public void onRegisterCallbacks(DoctorAdapterCallbacks activity){
    mCallbacks = activity;
}

public static interface DoctorAdapterCallbacks{
    void onDoctorChecked(long id);

    void onDoctorUnchecked();
}
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我有以下实现:

@Override
public void onDoctorChecked(long id) { …
Run Code Online (Sandbox Code Playgroud)

java android callback android-cursorloader android-cursoradapter

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

从TextView获取文本

如何从textview获取文本字符串?

我试过了:

myTextView.getText(); 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

android textview

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

为什么COALESCE以这种方式订购?

我有一个包含三列的表,id,comment和parent.如果父id为null,则注释是根注释,如果不是,则表示注释是对另一个注释的回复.我使用以下查询:

SELECT * 
FROM  `comment` 
ORDER BY COALESCE( parent, id ) DESC 
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)

这个查询用它的回复命令最后插入的注释,但我不明白逻辑.为什么这样订购?

在此输入图像描述

php mysql

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

如何在Kotlin中编写通用扩展方法?

在我正在研究的项目中,我发现自己为某些类型编写了一些扩展方法,如果可选项为null,则返回默认值.

例如,我可能有一个Boolean?对象,我想在条件表达式中使用它默认为false,所以我会写:

if (myOptional?.default(false)) { .. }
Run Code Online (Sandbox Code Playgroud)

我写了几个类型:

fun Boolean?.default(default: Boolean): Boolean {
    return this ?: default
}

fun Long?.default(default: Long): Long {
    return this ?: default
}

fun Int?.default(default: Int): Int {
    return this ?: default
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以做到这一点,所以我可以写一个扩展方法,我可以用于所有类型?

generics extension-methods kotlin

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

如何判断我的查询应该优化?

我已经看到许多问题,询问用户如何优化他们的查询,因为它们太慢,即使它们持续不到一秒钟.试图理解定义慢查询的内容,我发现这个问题表明用户抱怨的是什么.

这是有道理的,但它不是万无一失的.如果前端用户不知道更好,那么可能会忽略糟糕的非优化查询.我也理解查询的速度可以根据上下文而改变.

查询速度有经验法则吗?例如,假设我可以在50毫秒(编号)中查询一万亿条记录,但我有另一个查询需要50毫秒才能查询100条记录.显然,一个是有效的,但两者对于前端用户都是相同的.是否有类似于可以应用于SQL查询的Big-O表示法?

mysql sql database optimization performance

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

如何获取最小函数结果的列名?

我有一个员工表,看起来像这样:

| id | name | q1 | q2 | q3 | q4 |
+----+------+----+----+----+----+
| 1  | John | 20 | 30 | 10 | 4  |
| 2  | Ram  | 07 | 10 | 03 | 4  |
| 3  | John | 05 | 03 | 15 | 40 |
| 4  | Sree | 12 | 05 | 20 | 25 |
Run Code Online (Sandbox Code Playgroud)

我需要获取 id 等于 4 的问题的最小值和最大值。在这种情况下,我需要返回 5 和 25。我使用以下查询实现了这一点:

SELECT id, name,
  LEAST(q1, q2, …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql

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

如何引用多对多关系的交集表?

我正在创建一个处理处方的药房数据库.在设计数据库时,我考虑到医生可以在许多办公室工作,办公室可以是许多医生的家,所以我创建了以下多对多的关系:

doctor:

| id | name | // more

office:

| id | name | address | // more

doctors_offices:

| doctor_id | office_id |
Run Code Online (Sandbox Code Playgroud)

我遵循了我在数据库教科书中看到的设计以及许多在线资源,但我现在在尝试创建prescription表时遇到了一些困惑.在这张表中,我想知道不仅是哪位医生写了处方,而是在哪个位置.

我发现自己有几个选择:

  • doctors_offices表中添加auto_increment键,以便为每个dr/office配对提供唯一标识符
  • 将复合外键添加到引用的处方表中doctors_offices.(这可能吗?)
  • 在处方表中添加两个外键.一个引用doctors,一个引用offices.

哪些选项最常规化?我知道第三个可能是最不规范化的,因为它开启了我选择医生不属于的办公室的可能性,但我觉得很重要,因为它可能是一些初学数据库设计者的共同本能.

mysql database database-design normalization

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