Java 中怎么获得数据库表中行的数目?

Java 中怎么获得数据库表中行的数目?,第1张

//首先,先用SQL查询出来,因为不止一条记录,所以用Lis在去存放
//这里是数据层的代码(参考就行)
public List<Inventory> getByCode() {
List<Inventory> list = new ArrayList();
try {
conn = thisdbgetConnection();
String sql = "select cInvCode,cInvName,cInvStd,cInvAddCode,cInvABC,dSDate," +
"cComUnitCode,cGroupCode ,iSupplyType,bInTotalCost " +
"from Inventory ";
ps = connprepareStatement(sql);
rs = psexecuteQuery();
while (rsnext()) {
Inventory ic = new Inventory();
icsetCInvCode(rsgetString("cInvCode"));
icsetCInvName(rsgetString("cInvName"));
icsetCInvStd(rsgetString("cInvStd"));
icsetCInvABC(rsgetString("cInvABC"));
icsetCInvAddCode(rsgetString("cInvAddCode"));
icsetDSDate(rsgetDate("dSDate"));
icsetCComUnitCode(rsgetString("cComUnitCode"));
icsetCGroupCode(rsgetString("cGroupCode"));
icsetISupplyType(rsgetInt("iSupplyType"));
icsetBInTotalCost(rsgetInt("bInTotalCost"));
listadd(ic);
}
} catch (Exception e) {
eprintStackTrace();
} finally {
try {
rsclose();
thisdbcloseAll(conn, ps);
} catch (SQLException e) {
eprintStackTrace();
}
}
return list;
}
//然后在业务层里调用这个方法
listsize();//这样你就能取到数据库表有多少条记录了

常见聚合函数,max(最大)、min(最小)、sum(求和)、avg(平均)等,

示例如下,

1、创建测试表,

create table test_group(id number, value number);

2、插入测试数据

insert into test_group values(1,1001);

insert into test_group values(1,1002);

insert into test_group values(1,1003);

insert into test_group values(1,1004);

insert into test_group values(1,1005);

3、查询表中所有记录,select t, rowid from test_group t,

4、编写sql,分别求聚合函数max、min、sum、avg,见:select max(value), min(value), sum(value), avg(value) from test_group t,

聚合函数COUNT返回组中项目的数量。语法COUNT({ [ ALL | DISTINCT ] expression ] |})参数ALL对所有的值进行聚合函数运算。ALL 是默认设置。DISTINCT指定 COUNT 返回唯一非空值的数量。expression一个表达式,其类型是除uniqueidentifier、text、image或ntext之外的任何类型。不允许使用聚合函数和子查询。指定应该计算所有行以返回表中行的总数。COUNT() 不需要任何参数,而且不能与 DISTINCT 一起使用。COUNT() 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT() 返回指定表中行的数量而不消除副本。它对每行分别进行计数,包括含有空值的行。重要当使用 CUBE 或 ROLLUP 时,不支持区分聚合,例如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用了,Microsoft�0�3 SQL Server�6�4 将返回错误信息并取消查询。返回类型int注释COUNT() 返回组中项目的数量,这些项目包括 NULL 值和副本。COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。示例A 使用 COUNT 和 DISTINCT下面的示例查找作者所居住的不同城市的数量。USE pubsGOSELECT COUNT(DISTINCT city)FROM authorsGO下面是结果集:----------- 16 (1 row(s) affected)B 使用 COUNT()下面的查询查找图书和书名的总数:USE pubsGOSELECT COUNT()FROM titlesGO下面是结果集:----------- 18 (1 row(s) affected)C 与其它聚合函数一起使用 COUNT()下面的示例显示可以与选择列表中的其它聚合函数结合使用的 COUNT()。USE pubsGOSELECT COUNT(), AVG(price)FROM titlesWHERE advance $1000GO下面是结果集:

set echo off
set feedback off
set newpage none
set pagesize 5000
set linesize 500
set verify off
set pagesize 0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\drop_tablesql
SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;
1.使用SQLPLUS动态生成批量脚本
将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。
例1:
生成一个脚本,删除SCOTT用户下的所有的表:
a 创建gen_drop_tablesql文件,包含如下语句:
SPOOL c:\drop_tablesql
SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;
SPOOL OFF
b 以SCOTT用户登录数据库
SQLPLUS > @ …\gen_dorp_tablesql
c 在c盘根目录下会生成文件drop_tablesql文件,包含删除所有表的语句,如下所示:
'DROPTABLE'||TABLE_NAME||';'
--------------------------------------------------------------------------------
DROP TABLE DEPT;
DROP TABLE EMP;
DROP TABLE PARENT;
DROP TABLE STAT_VENDER_TEMP;
DROP TABLE TABLE_FORUM;
5 rows selected
SQL> SPOOL OFF
d 对生成的drop_tablesql文件进行编辑去掉不必要的部分,只留下drop table …语句
e 在scott用户下运行dorp_tablesql文件,删除scott用户下所有的表。
SQLPLUS > @ c:\dorp_tablesql
在上面的 *** 作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的 *** 作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。
a 创建gen_drop_tablesql文件,包含如下语句:
set echo off
set feedback off
set newpage none
set pagesize 5000
set linesize 500
set verify off
set pagesize 0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\drop_tablesql
SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;
SPOOL OFF
b 以SCOTT用户登录数据库
SQLPLUS > @ …\gen_dorp_tablesql
c 在c盘根目录下会生成文件drop_tablesql文件,包含删除所有表的语句,如下所示:
DROP TABLE DEPT;
DROP TABLE EMP;
DROP TABLE PARENT;
DROP TABLE STAT_VENDER_TEMP;
DROP TABLE TABLE_FORUM;
d 在scott用户下运行dorp_tablesql文件,删除scott用户下所有的表。
SQLPLUS > @ c:\dorp_tablesql
2.将一个表中的数据导出生成一个文本文件,列与列之间以”,”隔开
set echo off
set feedback off
set newpage none
set pagesize 5000
set linesize 500
set verify off
set pagesize 0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\drop_tablesql
select DEPTNO || ',' || DNAME FROM DEPT;
SPOOL OFF
将上面的内容保存为一个文本文件后,以scott登录,执行该文件后显示结果:
10,ACCOUNTING
20,RESEARCH
30,SALES
40,OPERATIONS
通过上面的两个例子,我们可以将:
set echo off
set feedback off
set newpage none
set pagesize 5000
set linesize 500
set verify off
set pagesize 0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\具体的文件名
你要运行的sql语句
SPOOL OFF
作为一个模版,只要将必要的语句假如这个模版就可以了。
在oracle的较新版本中,还可以用set colsep命令来实现上面的功能:
SQL> set colsep ,
SQL> select from dept;
10,ACCOUNTING ,NEW YORK
20,RESEARCH ,DALLAS
30,SALES ,CHICAGO
40,OPERATIONS ,BOSTON
35,aa ,bb
3.动态生成spool命令所需的文件名
在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要每天spool一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢?
column dat1 new_value filename;
select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual;
spool c:\&&filenametxt
select from dept;
spool off;
4.如何从脚本文件中得到WINDOWS环境变量的值:
在windos中:
spool c:\temp\%ORACLE_SID%txt
select from dept;

spool off
在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcltxt
在UNIX中:
spool c:\temp\$ORACLE_SIDtxt
select from dept;

spool off
在上面的例子中,通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcltxt
5.如何指定缺省的编辑脚本的目录
在sqlplus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?
通过SQL> set editfile c:\temp\filesql 命令,可以设置其缺省目录为c:\tmpe,缺省文件名为filesql。
6.如何除去表中相同的行
找到相同的行:
SELECT FROM dept a
WHERE ROWID <> (SELECT MAX(ROWID)
FROM dept b
WHERE adeptno = bdeptno
AND adname = bdname -- Make sure all columns are compared
AND aloc = bloc);
注释:
如果只找deptno列相同的行,上面的查询可以改为:
SELECT FROM dept a
WHERE ROWID <> (SELECT MAX(ROWID)
FROM dept b
WHERE adeptno = bdeptno)
删除相同的行:
DELETE FROM dept a
WHERE ROWID <> (SELECT MAX(ROWID
FROM dept b
WHERE adeptno = bdeptno
AND adname = bdname -- Make sure all columns are compared
AND aloc = bloc);
注意:上面并不删除列值为null的行。
7.如何向数据库中插入两个单引号(’’)
Insert inot dept values(35,’aa’’’’bb’,’a’’b’);
在插入时,用两个’表示一个’。
8.如何设置sqlplus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。
设置SQLPATH环境变量。
如:
SQLPATH = C:\ORANT\DBS;C:\APPS\SCRIPTS;C:\MYSCRIPTS
9.@与@@的区别是什么?
@等于start命令,用来运行一个sql脚本文件。
@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。
@@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。
10.&与&&的区别
&用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
&&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
select count() from emp where deptno = &deptnoval;
select count() from emp where deptno = &deptnoval;
select count() from emp where deptno = &deptnoval;
将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
select count() from emp where deptno = &deptnoval;
select count() from emp where deptno = &deptnoval;
select count() from emp where deptno = &deptnoval;
11.引入copy的目的
Copy命令在两个数据库之间拷贝数据时特别有用,特别是该命令可以在两个数据库之间传递long型字段的数据。
缺点:
在两个数据库之间传递数据时,有可能丢失精度(lose precision)。
12.问什么在修改大量的行时,我的脚本会变得很慢?
当通过PL/SQL块修改一个表中的许多行时,你会创建在表上创建一个cursor,但是只有在你关闭cursor时,才会释放ROLLBACK SEGMENT,这样,当cursor仍然打开时,修改过程会变慢,这是因为数据库不得不搜寻大量的rollback segment以便于维护读一致性。为了避免这样情况,试着在表上加一个标志字段来描述该行是否已经被修改,然后关闭该cursor,然后再打开该 cursor。每次可以修改5000行
SPOOL OFF
需要写一个简单的脚本,将所有数据文件、控制文件、在线日志文件等输出到一个文件中,一口气写完之后,发现输出结果中每行之间都有一空行,非常不爽,研究了一下 sqlplus 的设置参数之后解决了问题,把几个常用的参数在这里做一个小结,方便以后查询。
set echo on/off 是否显示脚本中的需要执行的命令
set feedback on/off 是否显示 select 结果之后返回多少行的提示
set linesize n 设置一行最多显示多少字符,之前就是因为 n 设得过大,导致行与行之间有空白行
set termout on/off 在执行脚本时是否在屏幕上输出结果,如果 spool 到文件可以将其关闭
set heading on/off 是否显示查询结果的列名,如果设置为 off,将用空白行代替,如果要去除该空白行,可以用 set pagesize 0
set pagesize n 设置每页的行数,将 n 设为 0 可以不显示所有 headings, page breaks, titles, the initial blank line, and other formatting information
set trimspool on/off 在 spool 到文件时是否去除输出结果中行末尾的空白字符,之前的隔行可以用该参数去掉,和该参数对应的是 trimout,后者用于屏幕输出
set trimout on/off 是否去掉屏幕上输出结果行末尾的空白字符
SQL> select from aa;
BB CC
---------- ----------
1 99999999
SQL> col bb format ''''999'''';
SQL> select from aa;
BB CC
----- ----------
10 99999999
SQL> col bb head ''''999'''';
SQL> select from aa;
999 CC
----- ----------
10 99999999
SQL> col bb head ''''学号'''';
SQL> select from aa;
学号 CC
----- ----------
10 99999999
SQL> col bb format ''''99'''';
SQL> select from aa;
学号 CC
---- ----------
1 99999999
SQL> col bb head ''''学|号'''';
SQL> select from aa;

号 CC
--- ----------
1 99999999
SQL> select count(bb),sum(cc) from aa;
COUNT(BB) SUM(CC)
---------- ----------
8192 8191999918
SQL> col sum(cc) format ''''999999999999'''';
SQL> select count(bb),sum(cc) from aa;
COUNT(BB) SUM(CC)
---------- --------------
8192 819199991808
SQL> col sum(cc) format ''''999999999999'''' head ''''总分'''';
SQL> col count(bb) format ''''999999'''' head ''''人数'''';
SQL> select count(bb),sum(cc) from aa;
人数 总分
------- --------------
8192 819199991808

聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?我们来一一看一下:

AVG  返回指定组中的平均值,空值被忽略。

例:select  prd_no,avg(qty) from sales group by prd_no

2 COUNT  返回指定组中项目的数量。

例:select  count(prd_no) from sales

3 MAX  返回指定数据的最大值。

例:select  prd_no,max(qty) from sales group by prd_no

4 MIN  返回指定数据的最小值。

例:select  prd_no,min(qty) from sales group by prd_no

5 SUM  返回指定数据的和,只能用于数字列,空值被忽略。

例:select  prd_no,sum(qty) from sales group by prd_no

6 COUNT_BIG  返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。

例:select  count_big(prd_no) from sales

7 GROUPING  产生一个附加的列,当用CUBE或ROLLUP运算符添加行时,输出值为1当所添加的行不是由CUBE或ROLLUP产生时,输出值为0

例:select  prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup

8 BINARY_CHECKSUM  返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。

例:select  prd_no,binary_checksum(qty) from sales group by prd_no

9 CHECKSUM_AGG  返回指定数据的校验值,空值被忽略。

例:select  prd_no,checksum_agg(binary_checksum()) from sales group by prd_no

10 CHECKSUM  返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。

11 STDEV  返回给定表达式中所有值的统计标准偏差。

例:select  stdev(prd_no) from sales

12 STDEVP  返回给定表达式中的所有值的填充统计标准偏差。

例:select  stdevp(prd_no) from sales

13 VAR  返回给定表达式中所有值的统计方差。

例:select  var(prd_no) from sales

14 VARP  返回给定表达式中所有值的填充的统计方差。

例:select  varp(prd_no) from sales

1、可以在SQL sever中用设计表,直接更改
2、如果是别名的话,可以在查询的字段名后加 AS + 想加的名字
如:SELECT name AS 名字 FROM SANG
3、可以通过修改表来实现,ALTER TABLE sang 命令进行修改sang为表名


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13377586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存