A关系。
参考数据库access2003应用教程人民邮电出版社第6页“每一个关系都是一个二维表”。
表由字段组成。就像一张纸质表一样,假如你有一张人员基本信息表,姓名、性别、年龄、出生年月日、家庭住址、职务、职称,等等这些在数据库表设计中就称为字段,字段;
有一些属性,最重要属性是它数据类型,比如姓名、性别、家庭住址、职务、职称在ACCESS中一般设置成文本类型,出生年月日则是日期类型,年龄可以整数型或者小数类型。
Access拥有的报表
创建功能能够处理任何它能够访问的数据源。Access提供功能参数化的查询,这些查询和Access表格可以被诸如VB6和NET的其它程序通过DAO或ADO访问。在Access中,VBA能够通过ADO访问参数化的存储过程。
与一般的CS关系型数据库管理不同,Access不执行数据库触发,预存程序或交互式登录 *** 作。Access 2010包括了嵌入ACE数据引擎的表级触发和预存程序,在Access 2010中,表格,查询,图表,报表和宏在基于网络的应用上能够进行分别开发。
百度百科-ACCESS数据库
DUAL表的用途
Dual 是 Oracle中的一个实际存在的表 任何用户均可读取 常用在没有目标表的Select语句块中
查看当前连接用户SQL> select user from dual;USER SYSTEM 查看当前日期 时间SQL> select sysdate from dual;SYSDATE SQL> select to_char(sysdate yyyy mm dd hh :mi:ss ) from dual;TO_CHAR(SYSDATE YYYY MM DDHH : : 当作计算器用SQL> select + from dual; + 查看序列值SQL> create sequence aaa increment by start with ;SQL> select aaa nextval from dual;NEXTVAL SQL> select aaa currval from dual;CURRVAL
关于DUAL表的测试与分析
DUAL就是个一行一列的表 如果你往里执行insert delete truncate *** 作 就会导致很多程序出问题 结果也因sqlplus pl/sql dev等工具而异
查看DUAL是什么OBJECT DUAL是属于SYS schema的一个表 然后以PUBLIC SYNONYM的方式供其他数据库USER使用 SQL> select owner object_name object_type from dba_objects where object_name like %DUAL% ;OWNER OBJECT_NAME OBJECT_TYPE SYS DUAL TABLEPUBLIC DUAL SYNONYM 查看表结构 只有一个字段DUMMY 为VARCHAR ( )型SQL> desc dualName Type Nullable Default Comments DUMMY VARCHAR ( ) Y DUAL表的结构 create table SYS DUAL(DUMMY VARCHAR ( ))tablespace SYSTEMpctfree pctused initrans maxtrans storage(initial Knext Kminextents maxextents pctincrease );/
很是困惑 ORACLE为什么要用VARCHAR( )型 用CHAR( )难道不好么?从这样的表结构来看 DUAL表设计的目的就是要尽可能的简单 以减少检索的开销
还有 DUAL表是建立在SYSTEM表空间的 第一是因为DUAL表是SYS这个用户建的 本来默认的表空间就是SYSTEM 第二 把这个可能经常被查询的表和用户表分开来存放 对于系统性能的是有好处的
有了创建了表 创建了同义词还是不够的 DUAL在SYS这个Schema下面 因此用别的用户登录是无法查询这个表的 因此还需要授权
grant select on SYS DUAL to PUBLIC with grant option;
将Select 权限授予公众 接下来看看DUAL表中的数据 事实上 DUAL表中的数据和ORACLE数据库环境有着十分重要的关系(ORACLE不会为此瘫痪 但是不少存储过程以及一些查询将无法被正确执行)
/ 查询行数 在创建数据库之后 DUAL表中便已经 入了一条记录 个人认为 DUMMY字段的值并没有什么关系 重要的是DUAL表中的记录数SQL> select count() from dual;COUNT() SQL> select from dual;DUMMY X 插入数据 再查询记录 只返回一行记录SQL> insert into dual values ( Y ); row created SQL> mit;Commit plete SQL> insert into dual values ( X ); row created SQL> insert into dual values ( Z ); row created SQL> mit;Commit plete SQL> select count() from dual;COUNT() SQL> select from dual;DUMMY X/ 假我们插入一条数据 DUAL表不是返回一行 而是多行记录 那会是什么结果呢?SQL> insert into dual values( Y ); 行 已插入SQL> mit;提交完成SQL> select from dual;DUMMY XYSQL> select sysdate from dual;SYSDATE
这个时候返回的是两条记录 这样同样会引起问题 在通过使用
select sysdate into v_sysdate from dual;
来获取时间或者其他信息的存储过程来说 ORACLE会抛出TOO_MANY_ROWS(ORA )异常 因此 需要保证在DUAL表内有且仅有一条记录 当然 也不能把DUAL表的UPDATE INSERT DELETE权限随意释放出去 这样对于系统是很危险的
/ 把表截掉SQL> truncate table dual;Table truncated SQL> select count() from dual;COUNT() SQL> select from dual;no rows selectedSQL> select sysdate from dual;no rows selected 试着把DUAL表中的数据删除 看看会出现什么结果 SQL> delete from dual; 行 已删除SQL> select from dual;DUMMY SQL> select sysdate from dual;SYSDATE /
我们便取不到系统日期了 因为 sysdate是个函数 作用于每一个数据行 现在没有数据了 自然就不可能取出系统日期 这个对于很多用
select sysdate into v_sysdate from dual;
这种方式取系统时间以及其他信息的存储过程来说是致命的 因为 Oracle会马上抛出一个NO_DATA_FOUND(ORA )的异常 即使异常被捕获 存储过程也将无法正确完成要求的动作
/ 对于DELETE *** 作来说 ORACLE对DUAL表的 *** 作做了一些内部处理 尽量保证DUAL表中只返回一条记录 当然这写内部 *** 作是不可见的 不管表内有多少记录(没有记录除外) ORACLE对于每次DELETE *** 作都只删除了一条数据 SQL> select count() from dual;COUNT() SQL> delete from dual; 行 已删除SQL> mit;提交完成SQL> select count() from dual;COUNT() /附: ORACLE关于DUAL表不同寻常特性的解释There is internalized code that makes this happen Code checks that ensurethat a table scan of SYS DUAL only returns one row Svrmgrl behaviour is incorrect but this is now an obsolete product The base issue you should always remember and keep is: DUAL table should always have ROW Dual is a normal table with one dummy column of varchar ( ) This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or otherprebuilt or application functions If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception If DUAL has more than row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception So DUAL should ALWAYS have and only row/
DUAL表可以执行插入 更新 删除 *** 作 还可以执行drop *** 作 但是不要去执行drop表的 *** 作 否则会使系统不能用 数据库起不了 会报Database startup crashes with ORA 错误
如果DUAL表被 不幸 删除后的恢复 用sys用户登陆 创建DUAL表 授予公众SELECT权限(SQL如上述 但不要给UPDATE INSERT DELETE权限)
向DUAL表插入一条记录(仅此一条) insert into dual values( X );提交修改
用sys用户登陆 SQL> create pfile= d:\pfile bak from spfileSQL> shutdown immediate 在d:\pfile bak文件中最后加入一条 replication_dependency_tracking = FALSE 重新启动数据库 SQL> startup pfile= d:\pfile bak SQL> create table sys DUAL ( DUMMY varchar ( ) )pctfree pctused ;SQL> insert into dual values( X );SQL> mit;SQL> Grant select on dual to Public;
授权成功
Adodc1RecordSource = "select from Table1" 'Adodc1是一个用来绑定数据库的控件,RecordSource是他的一个属性,用来指定所用的记录源,这里记录源是一个select的SQL查询语句 Adodc1Refresh '刷新记录源,一般绑定后不会立即显示,需要刷新 If Adodc1RecordsetRecordCount > 0 Then '如果记录源的行数大于零,也就是不为空的意思 Do While Adodc1RecordsetEOF = False 'DO While 。。。。loop 是一个循环语句, Adodc1RecordsetEOF = False 是他的循环条件,意思是记录源不到最后,则循环继续 MS1TextMatrix(MS1Row, 0) = Adodc1RecordsetFields("学号") '用记录源给MsflexGrid赋值,也算是绑定的意思吧,MS1Row是一个行的变量,0是第一列(依此类推,1是第二列),意思是MsflexGrid的当前行第一列数据是记录集中的 学号 字段的值 MS1TextMatrix(MS1Row, 1) = Adodc1RecordsetFields("姓名") '解释同上 MS1TextMatrix(MS1Row, 2) = Adodc1RecordsetFields("性别") '解释同上 MS1TextMatrix(MS1Row, 3) = Adodc1RecordsetFields("年龄") '解释同上 MS1TextMatrix(MS1Row, 4) = Adodc1RecordsetFields("籍贯") '解释同上 MS1TextMatrix(MS1Row, 5) = Adodc1RecordsetFields("班级") '解释同上 MS1TextMatrix(MS1Row, 6) = Adodc1RecordsetFields("学校") '解释同上 MS1TextMatrix(MS1Row, 7) = Adodc1RecordsetFields("备注") '解释同上 MS1Row = MS1Row + 1 '所 *** 作的表格行数自动加1,也就是下移一行 Adodc1RecordsetMoveNext '记录集的指针下移一行 LOOP '继续循环,达到退出循环条件时就会退出,条件是前面继续循环条件的否定,也就是到达记录集最后一条 END IF 'IF语句结束
例如,要查询值'BBQ CHIC SW',结果如下:
返回三条记录,说明这个值存在于三个表中。
分别为_dts_menudef, g_dts_menudef和g_recipe中,字段名分别为name1, name1, name。
非常好用。
import javasqlConnection;
import javasqlDate;
import javasqlDriverManager;
import javasqlResultSet;
import javasqlSQLException;
import javasqlStatement;
import javasqlPreparedStatement;
public class JDBC {
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
private String driver = "commysqljdbcDriver"; //不同的数据库只要稍加修改即可
private String url="jdbc:mysql://localhost:3306/dataname
characterEncoding=GBK";//连接也要改
private String user = "root";//用户名
private String password = "mysql";//密码
/
准备连接
/
public void startConnection() throws ClassNotFoundException, SQLException {
ClassforName(driver); //注册数据库驱动
con = DriverManagergetConnection(url, user, password); //获得数据库连接
}
/
执行select 并返回结果集 throws SQLException
/
public ResultSet query(String sql) throws SQLException {
stmt = concreateStatement(); //创建Statement
rs = stmtexecuteQuery(sql); //执行查询
return rs;
}
/
执行insert update delete
/
public int update(String sql) throws SQLException {
stmt = concreateStatement();
int r = stmtexecuteUpdate(sql);
return r;
}
/
释放资源(连接)
/
public void releaseConnection() {
try {
if (rs != null)
rsclose();
stmtclose();
if (con != null)
conclose();
} catch (SQLException e) {
eprintStackTrace();
}
}
}
2对数据库表的 *** 作放在另外一包中,不同的 *** 作在不同的类中实现----->只要在其他的包里引入这个类包,再继承这个类即可
*** 作内容:----->调用父类里的方法即可
(1)、使用结果集对数据库表进行 *** 作:先插入一条记录,后删除一条记录;(2)、使用批处理方法插入3个学生的信息;(3)、使用事务实现一个同学转专业---先删除一条记录、后增加一条记录(两者要么同时实现,要么同时不实现)。
3、程序的实现过程中加入异常处理语句
您好!
数据库表中的数据是没有顺序的,所以你说的10-20条的数据就必须的有个条件,也就是说
where
某列名
=
XXX,那么咱们
以Id
列来说吧
sql
语句
select
top
10
from
表名
where
id
not
in(select
top
10
id
from
表名)
这个语句是子查询就是说先查出前10条数据,然后再去查这个表去掉前10条的剩下的所有数据的前10条。明白了吗?以下是
通用的分页语句,比较简单
SELECT
TOP
页大小
FROM
TestTable
WHERE
ID
NOT
IN
(SELECT
TOP
页大小页数
id
FROM
表
ORDER
BY
id))
ORDER
BY
ID
以上就是关于在Access数据库中,表就是全部的内容,包括:在Access数据库中,表就是、详解Oracle数据库中DUAL表的使用、从数据库中获得表中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)