标签: sql

PreparedStatement.setString()方法没有引号

我正在尝试使用类似于此的代码的PreparedStatement:

SELECT * FROM ? WHERE name = ?
Run Code Online (Sandbox Code Playgroud)

显然,当我使用setString()设置表和名称字段时会发生什么:

SELECT * FROM 'my_table' WHERE name = 'whatever'
Run Code Online (Sandbox Code Playgroud)

并且查询不起作用.有没有办法设置没有引号的字符串,所以行看起来像这样:

SELECT * FROM my_table WHERE name = 'whatever'
Run Code Online (Sandbox Code Playgroud)

或者我应该放弃它并使用常规语句(参数来自系统的另一部分,这些都不是由用户输入的)?

java sql jdbc prepared-statement

11
推荐指数
2
解决办法
4万
查看次数

如何在存储过程中使用局部变量?

如果我想从表中选择任何id并希望将其值作为外键插入另一个表中,那么我将如何通过存储过程执行此操作?

sql sql-server variables stored-procedures

11
推荐指数
1
解决办法
6万
查看次数

数据库仓库设计:事实表和维度表

我正在使用RDBMS构建一个穷人的数据仓库.我已经确定了要记录的关键"属性":

  • 性别(真/假)
  • 人口统计分类(A,B,C等)
  • 出生地
  • 出生日期
  • 体重(每日记录):正在记录的事实

我的要求是能够运行'OLAP'查询,允许我:

  • '切片和骰子'
  • '向上/向下钻取'数据和
  • 通常,能够从不同的角度查看数据

在阅读了这个主题领域之后,普遍的共识似乎是最好使用维度表而不是规范化表来实现.

假设这个断言是正确的(即最好使用事实和维度表来实现解决方案),我想在这些表的设计中寻求一些帮助.

'自然'(或明显)维度是:

  • 日期维度
  • 地理位置

哪个具有分层属性.但是,我正在努力如何建模以下字段:

  • 性别(真/假)
  • 人口统计分类(A,B,C等)

我正在努力解决这些领域的原因是:

  1. 它们没有明显的层次属性,这将有助于聚合(AFAIA) - 这表明它们应该在事实表中
  2. 它们大多是静态的或很少变化 - 这表明它们应该在维度表中.

也许我上面使用的启发式太粗糙了?

我将举例说明我希望在数据仓库中进行的分析类型 - 希望这将进一步澄清事情.

我想按性别和人口统计分类汇总和分析数据 - 例如回答以下问题:

  • 在不同的人口统计分类中,男性和女性的权重如何比较?
  • 其中人口统计分类(男性和女性),本季度体重增加最多.

等等

任何人都可以澄清性别和人口统计分类是否属于事实表,或者它们是否(我怀疑)是维度表.

还假设它们是维度表,有人可以详细说明表结构(即字段)吗?

'明显'架构:

CREATE TABLE sex_type (is_male int);
CREATE TABLE demographic_category (id int, name varchar(4));
Run Code Online (Sandbox Code Playgroud)

可能不是正确的.

sql olap database-design data-warehouse

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

在C#中使用部分SQL

我需要解析部分SQL查询(它是用于SQL注入审计工具).例如

'1' AND 1=1--
Run Code Online (Sandbox Code Playgroud)

应该分解成令牌

[0] => [SQL_STRING, '1']
[1] => [SQL_AND]
[2] => [SQL_INT, 1]
[3] => [SQL_AND]
[4] => [SQL_INT, 1]
[5] => [SQL_COMMENT]
[6] => [SQL_QUERY_END]
Run Code Online (Sandbox Code Playgroud)

他们至少是基于我的SQL的词法分析器,还是C#的bison等任何好工具(尽管我不想编写我自己的语法,因为我需要支持大部分,如果不是所有MySQL 5的语法)

c# mysql sql parsing lexer

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

从ORACLE中的TimeStamp列中提取时间部分

目前我正在使用MyTimeStampField-TRUNC(MyTimeStampField)从Oracle中的时间戳列中提取时间部分.

SELECT CURRENT_TIMESTAMP-TRUNC(CURRENT_TIMESTAMP) FROM DUAL
Run Code Online (Sandbox Code Playgroud)

这回来了

+00 13:12:07.100729

这对我来说很合适,从时间戳字段中提取时间部分,但我想知道是否有更好的方法(可能使用ORACLE的内置函数)来执行此操作?

sql oracle

11
推荐指数
2
解决办法
8万
查看次数

Guid主要/外键困境SQL Server

我面临着将主键从int身份更改为Guid的困境.我会直接提出问题.这是一个典型的零售管理应用程序,具有POS和后台功能.有大约100张桌子.数据库与其他数据库同步并接收/发送新数据.

大多数表没有频繁的插入,更新或在其上执行的select语句.但是,有些人经常插入并选择它们,例如.产品和订单表.

有些表中最多有4个外键.如果我将主键从"int"更改为"Guid",那么在插入或查询具有许多外键的表中的数据时是否会出现性能问题.我知道有人说索引会碎片化,16个字节是个问题.

在我的情况下,空间不是问题,显然索引碎片也可以使用'NEWSEQUENTIALID()'函数.有人可以告诉我,根据经验,如果Guid在带有许多外键的表中会有问题.

我会非常感谢你对它的看法......

sql database-design guid

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

如何组合两行并计算MySQL中两个时间戳值之间的时差?

我有一种情况,我确信这是非常普遍的,我真的很困扰我,我无法弄清楚如何做或搜索什么来找到相关的示例/解决方案.我对MySQL比较陌生(之前一直在使用MSSQL和PostgreSQL),我能想到的每种方法都被MySQL缺乏的一些功能所阻挡.

我有一个"日志"表,它只是列出了许多不同的事件及其时间戳(存储为日期时间类型).表中有很多数据和列与此问题无关,因此我们假设我们有一个这样的简单表:

CREATE TABLE log (  
  id INT NOT NULL AUTO_INCREMENT,  
  name VARCHAR(16),  
  ts DATETIME NOT NULL,  
  eventtype VARCHAR(25),  
  PRIMARY KEY  (id)  
)
Run Code Online (Sandbox Code Playgroud)

假设某些行有一个eventtype ='start'而其他行有一个eventtype ='stop'.我想做的是以某种方式将每个"startrow"与每个"stoprow"结合起来并找到两者之间的时间差(然后将每个名称的持续时间相加,但这不是问题所在的位置).每个"开始"事件应该在某个阶段发生相应的"停止"事件,然后发生"开始"事件,但由于数据收集器出现问题/错误/崩溃,可能会丢失一些事件.在这种情况下,我想在没有"伙伴"的情况下忽视这一事件.这意味着给定数据:

foo, 2010-06-10 19:45, start  
foo, 2010-06-10 19:47, start  
foo, 2010-06-10 20:13, stop
Run Code Online (Sandbox Code Playgroud)

..我想忽略19:45开始事件而不是仅仅使用20:13停止事件作为停止时间获得两个结果行.

我试图以不同的方式加入表格,但对我来说关键问题似乎是找到一种方法来正确识别给定"名称"的"开始"事件的相应"停止"事件.这个问题与您在员工上下班的工作表并希望了解他们实际工作量有多少完全相同.我敢肯定必须有一个众所周知的解决方案,但我似乎无法找到它们......

mysql sql

11
推荐指数
2
解决办法
2万
查看次数

数据库触发器什么时候坏?

可能重复:
数据库是否触发了恶意?

关于数据库触发器有很多负面信息,只是想让社区在好的和坏的时候采取行动.

sql database sql-server triggers

11
推荐指数
3
解决办法
1万
查看次数

C#using语句,SQL和SqlConnection

这是否可以使用using语句C#SQL?

private static void CreateCommand(string queryString,
    string connectionString)
{
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果打开连接时出错,该怎么办?

using语句是try,最后是
no catch

因此,如果我抓到外面的使用支架,捕获会捕获连接打开错误吗?

如果没有,如何使用using上面显示的语句实现这一点?

c# sql using-statement

11
推荐指数
2
解决办法
4万
查看次数

在Snow Leopard上启动MySQL错误

原始邮政

我刚刚删除并重新安装了Snow Leopard.我安装了MySQL 5.1.48 64位清理.我遇到了MySQL服务器的问题......当我启动计算机并登录时,服务器没有运行.我尝试通过单击"启动MySQL服务器"使用首选项窗格启动它,但它所做的只是突出显示按钮蓝色并想一会儿,然后按钮恢复正常并且没有任何反应.

然后我尝试从终端启动它:

Hristo$ sudo /usr/local/mysql/support-files/mysql.server start
Starting MySQL
.....................................................................
ERROR! Manager of pid-file quit without updating file.
Run Code Online (Sandbox Code Playgroud)

所以我检查了状态:

Hristo$ sudo /usr/local/mysql/support-files/mysql.server status
Password:
/usr/local/mysql/support-files/mysql.server: line 418: pidof: command not found
 ERROR! MySQL is not running
Run Code Online (Sandbox Code Playgroud)

我试过这个:

Hristo$ /usr/local/mysql/bin/mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)

所以我不知道该怎么做.当我第一次安装时,服务器正在工作,但我去了偏好窗格试图阻止它...同样的事情发生了...我点击了"停止MysQL服务器"按钮,它做了一些思考,然后什么都没有.所以我重新启动计算机,现在我遇到了上述问题,显然,mysql.sock文件不在/ tmp /中.我安装的时候就在那里,重新启动电脑后就不存在了.

有任何想法吗?

UPDATE

这是我的/etc/my.cnf档案.

[client]
socket = /var/mysql/mysql.sock

[mysqld]
socket = /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

更新2

在设置Apache,PHP和MySQL时,我按照以下说明操作:http: …

mysql sql macos osx-snow-leopard

11
推荐指数
2
解决办法
2万
查看次数