Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使来自多个表的查询更短并优化_Java_Sql_Oracle_Jdbc_Multiple Tables - Fatal编程技术网

Java 使来自多个表的查询更短并优化

Java 使来自多个表的查询更短并优化,java,sql,oracle,jdbc,multiple-tables,Java,Sql,Oracle,Jdbc,Multiple Tables,我正在Java中使用PreparedStatement。我有一个来自多个表的sql查询。如果可能的话,我如何使这个查询变得更短和优化?DB是“Oracle 12c数据库”。另外,我的任务是使查询sql注入安全并防止注入 preparedStatement = connection.prepareStatement("delete from " + "TBL_ORG_DATA, " + "TBL_ORG_CONTACTS, " +

我正在Java中使用PreparedStatement。我有一个来自多个表的sql查询。如果可能的话,我如何使这个查询变得更短和优化?DB是“Oracle 12c数据库”。另外,我的任务是使查询sql注入安全并防止注入

preparedStatement = connection.prepareStatement("delete from " +
            "TBL_ORG_DATA, " +
            "TBL_ORG_CONTACTS, " +
            "TBL_HEALTH_SERVICE, " +
            "TBL_EDUCATION, " +
            "TBL_LENGTH_WORK, " +
            "TBL_CONTRACTS, " +
            "TBL_EVENTS, " +
            "TBL_TRADE_UNIONS, " +
            "TBL_COMMITTEES, " +
            "TBL_HEALTH_CHECK, " +
            "TBL_ACCIDENTS, " +
            "TBL_VICTIMS, " +
            "TBL_ACCIDENTS_DAMAGE, " +
            "TBL_ATTESTATION, " +
            "TBL_ATTESTATION_FIVE_YEAR, " +
            "TBL_TRANING, " +
            "TBL_TRAINING_MANAGER, " +
            "TBL_TRANING_THREE_YEAR, " +
            "TBL_MANAGEMENT " +
            "where TBL_ORG_DATA.ORG_ID = ? AND\n" +
            "TBL_ORG_CONTACTS.ORG_ID = ? AND\n" +
            "TBL_HEALTH_SERVICE.ORG_ID = ? AND\n" +
            "TBL_EDUCATION.ORG_ID = ? AND\n" +
            "TBL_LENGTH_WORK.ORG_ID = ? AND\n" +
            "TBL_CONTRACTS.ORG_ID = ? AND\n" +
            "TBL_EVENTS.ORG_ID = ? AND\n" +
            "TBL_TRADE_UNIONS.ORG_ID = ? AND\n" +
            "TBL_COMMITTEES.ORG_ID = ? AND\n" +
            "TBL_HEALTH_CHECK.ORG_ID = ? AND\n" +
            "TBL_ACCIDENTS.ORG_ID = ? AND\n" +
            "TBL_VICTIMS.ORG_ID = ? AND\n" +
            "TBL_ACCIDENTS_DAMAGE.ORG_ID = ? AND\n" +
            "TBL_ATTESTATION.ORG_ID = ? AND\n" +
            "TBL_ATTESTATION_FIVE_YEAR.ORG_ID = ? AND\n" +
            "TBL_TRANING.ORG_ID = ? AND\n" +
            "TBL_TRAINING_MANAGER.ORG_ID = ? AND\n" +
            "TBL_TRANING_THREE_YEAR.ORG_ID = ? AND\n" +
            "TBL_MANAGEMENT.ORG_ID = ? AND\n" +                
            "TBL_ORG_DATA.DATE_PERIOD = ? AND\n" +
            "TBL_ORG_CONTACTS.DATE_PERIOD = ? AND\n" +
            "TBL_HEALTH_SERVICE.DATE_PERIOD= ? AND\n" +
            "TBL_EDUCATION.DATE_PERIOD= ? AND\n" +
            "TBL_LENGTH_WORK.DATE_PERIOD = ? AND\n" +
            "TBL_CONTRACTS.DATE_PERIOD = ? AND\n" +
            "TBL_EVENTS.DATE_PERIOD = ? AND\n" +
            "TBL_TRADE_UNIONS.DATE_PERIOD = ? AND\n" +
            "TBL_COMMITTEES.DATE_PERIOD = ? AND\n" +
            "TBL_HEALTH_CHECK.DATE_PERIOD = ? AND\n" +
            "TBL_ACCIDENTS.DATE_PERIOD = ? AND\n" +
            "TBL_VICTIMS.DATE_PERIOD = ? AND\n" +
            "TBL_ACCIDENTS_DAMAGE.DATE_PERIOD = ? AND\n" +
            "TBL_ATTESTATION.DATE_PERIOD = ? AND\n" +
            "TBL_ATTESTATION_FIVE_YEAR.DATE_PERIOD = ? AND\n" +
            "TBL_TRANING.DATE_PERIOD = ? AND\n" +
            "TBL_TRAINING_MANAGER.DATE_PERIOD = ? AND\n" +
            "TBL_TRANING_THREE_YEAR.DATE_PERIOD = ? AND\n" +
            "TBL_MANAGEMENT.DATE_PERIOD = ?");

据我所知,在Oracle中,您必须为每个表创建单独的
delete
命令

delete from a where org_id = 101 and date_period = date '2018-05-25';
delete from b where org_id = 101 and date_period = date '2018-05-25';
如果可以修改表,则可以在删除级联上使用约束
。我不知道您的表是如何组织的,但如果您可以在其中一个表中定义唯一约束,则rest可能依赖于它,如下所示:

create table a (
    id number primary key, org_id number, date_period date, cola varchar2(5),
    constraint uq_org_id_period unique (org_id, date_period) );
insert into a values (1, 101, date '2018-05-25', 'DEL');
insert into a values (2, 101, date '2018-05-26', 'PQR');
insert into a values (3, 102, date '2018-06-17', 'CBA');

create table b (
    id number primary key, org_id number, date_period date, colb varchar2(5),
    constraint fk_org_id_period 
        foreign key (org_id, date_period) 
        references a(org_id, date_period) on delete cascade);
insert into b values (1, 101, date '2018-05-26', 'AAXXX');
insert into b values (2, 102, date '2018-06-17', 'PCCQR');
insert into b values (3, 101, date '2018-05-25', 'DEL1');
insert into b values (4, 101, date '2018-05-25', 'DEL2');
insert into b values (5, 102, date '2018-06-17', 'XYZYX');
现在,如果您运行:

delete from a where (org_id, date_period) in ((101, date '2018-05-25'));

不仅表
a
中的第1行将被删除,而且
b
中的第3行和第4行也将被删除。您也可以使用触发器,但约束在这里更合适。

这些表位于
from
部分的
中,现在位于
where
中的join子句中。我觉得不太对。这些桌子有什么关系吗对不起,我弄错了。在这个查询中,我应该使用“删除”而不是“选择”。这些表具有相同的字段:ORG\u ID、DATE\u PERIOD。您当前的
DELETE
有什么问题需要解决?@mick助记符查询非常庞大,字符串重复多次。是否存在重新生成此查询的方法?您正在从约20个表中删除数据,因此是的,SQL将很长。我个人会将这些内容分为单独的删除,但在不了解数据库模式的情况下,很难给出建议。感谢您的回复。不幸的是,在我的数据库中应用“级联删除”并非不可能。