我正在尝试在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语句失败了?
我正在打包一个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()任何地方找到方法.我该怎么办?
我知道日期传递正确,因为我可以在调试时看到它:

我有一个存储过程,用于检查用户是否已经存在,无论它使用数据库中的第一行返回的电子邮件使用什么输入。如果我手动运行 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) 在我的活动中,我有一个代表医生的列表视图.每行都有医生的名字和一个复选框.我已经实现了一个回调接口,这样当选择医生时,所有其他医生都会从列表视图中删除,只剩下选定的医生.
它似乎有效,因为一旦我选择了医生,所有其他人都被移除了.当我取消检查医生时,每个人都被加回.但是,如果我现在选择一位不同的医生,原来的医生会停下来而其他所有医生都会被移除.
为了更好地解释这个问题,让我们说当我开始活动时,我在列表视图中有两位医生,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
我有一个包含三列的表,id,comment和parent.如果父id为null,则注释是根注释,如果不是,则表示注释是对另一个注释的回复.我使用以下查询:
SELECT *
FROM `comment`
ORDER BY COALESCE( parent, id ) DESC
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
这个查询用它的回复命令最后插入的注释,但我不明白逻辑.为什么这样订购?

在我正在研究的项目中,我发现自己为某些类型编写了一些扩展方法,如果可选项为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)
我想知道是否有一种方法可以做到这一点,所以我可以写一个扩展方法,我可以用于所有类型?
我已经看到许多问题,询问用户如何优化他们的查询,因为它们太慢,即使它们持续不到一秒钟.试图理解定义慢查询的内容,我发现这个问题表明用户抱怨的是什么.
这是有道理的,但它不是万无一失的.如果前端用户不知道更好,那么可能会忽略糟糕的非优化查询.我也理解查询的速度可以根据上下文而改变.
查询速度有经验法则吗?例如,假设我可以在50毫秒(编号)中查询一万亿条记录,但我有另一个查询需要50毫秒才能查询100条记录.显然,一个是有效的,但两者对于前端用户都是相同的.是否有类似于可以应用于SQL查询的Big-O表示法?
我有一个员工表,看起来像这样:
| 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) 我正在创建一个处理处方的药房数据库.在设计数据库时,我考虑到医生可以在许多办公室工作,办公室可以是许多医生的家,所以我创建了以下多对多的关系:
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 ×6
android ×3
sql ×3
database ×2
java ×2
callback ×1
date ×1
generics ×1
kotlin ×1
optimization ×1
performance ×1
php ×1
postgresql ×1
textview ×1