数据库设计和建模必要性•
好的数据库结构有利于:-节省数据的存储空间-能够保证数据的完整性-方便进行数据库应用系统的开发•设计不好的数据库结构将导致-数据冗余、存储空间浪费-内存空间浪费
不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:
–收集信息–标识对象–设计数据模型–标识每个对象 存储的信息类型–标识对象之间的关系
•数据模型
是一种标识实体类型及其实体间联系的模型。典型的数据模型由网状模型、层次模型和关系模型。
什么是规范化
从关系数据库的表中,除去冗余数据的过程称为规范化。精简数据库的结构从表中删除冗余的列标识所有依赖于其它数据的数据
三级范式
第一范式的定义: 如果一个表中没有重复组(即行与列的交叉点上只有一个值,而不是一组值),则这个表属于第一范式(常记成1NF)。简而言之:”每一字段只存储一个值”。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码)
第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF )。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。 将1NF转换成2NF的方法是添加主键。学号,课程名,成绩
第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成3NF)。满足3NF的表中不包含传递依赖。简而言之:没有一个非关键属性依赖于另一个非关键属性。学号,课程号,成绩,学分学号,姓名,所在系,系名称,系地址一、连接各种数据库方式速查表
下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。
1、Oracle8/8i/9i数据库(thin模式)
Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();
String url=”jdbc:oracle:thin:@localhost:1521:orcl”; //orcl为数据库的SID
String user=”test”;
String password=”test”;
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2数据库
Class.forName(“com.ibm.db2.jdbc.app.DB2Driver “).newInstance();
String url=”jdbc:db2://localhost:5000/sample”; //sample为你的数据库名
String user=”admin”;
String password=”";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000数据库
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();
String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”;
//mydb为数据库
String user=”sa”;
String password=”";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase数据库
Class.forName(“com.sybase.jdbc.SybDriver”).newInstance();
String url =” jdbc:sybase:Tds:localhost:5007/myDB”;//myDB为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put(“user”,”userid”);
SysProps.put(“password”,”user_password”);
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix数据库
Class.forName(“com.informix.jdbc.IfxDriver”).newInstance();
String url =
“jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword”; //myDB为数据库名
Connection conn= DriverManager.getConnection(url);
6、MySQL数据库
Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();
String url =”jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1″
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL数据库
Class.forName(“org.postgresql.Driver”).newInstance();
String url =”jdbc:postgresql://localhost/myDB” //myDB为数据库名
String user=”myuser”;
String password=”mypassword”;
Connection conn= DriverManager.getConnection(url,user,password);
8、access数据库直连用ODBC的
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) ;
String url=”jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=”+application.getRealPath(“/Data/ReportDemo.mdb”);
Connection conn = DriverManager.getConnection(url,”",”");
Statement stmtNew=conn.createStatement() ;
何为“事务处理”,谈谈你对它的理解。
事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。
Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。
PreparedStatement对象与Statement对象的不同点在于它的SQL语句是预编译过的,并且可以有占位符使用运行时参数。
JDBC调用数据库的基本步骤
导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象
存储过程和函数的区别
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
事务是什么?
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性,事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性,事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性,由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性,事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
游标的作用?如何知道游标已经到了最后?
游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。
触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
动态查询如何实现?表的结构变化后,如果不需要修改程序,如何设计和实现查询?
答:讲查询封装进存储过程中,通过调用存储过程实现动态调用;表结构发生变化后修改相应的存储过程即可再不修改程序的情况下实现查询。
如何优化数据库,如何提高数据库的性能?
答:优化数据库主要是优化查询语句,通过高性能的查询语句提高数据库的性能。
设计数据库应注意那些问题
答:首先应尽量满足三范式的要求,在一定程度上打破3范式的要求以提高数据库的性能。
表与表之间的关联关系
答:分为3种:一对一、一对多、多对多。
主键和外键的区别
答:主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。
在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。
答:一种分页方法 <%
int i=1; int numPages=14; String pages = request.getParameter("page") ; int currentPage = 1; currentPage=(pages==null)?(1):{Integer.parseInt(pages)} sql = "select count(*) from tables"; ResultSet rs = DBLink.executeQuery(sql) ; while(rs.next()) i = rs.getInt(1) ; int intPageCount=1; intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1); int nextPage ; int upPage; nextPage = currentPage+1; if (nextPage>=intPageCount) nextPage=intPageCount; upPage = currentPage-1; if (upPage<=1) upPage=1; rs.close(); sql="select * from tables"; rs=DBLink.executeQuery(sql); i=0; while((i<numPages*(currentPage-1))&&rs.next()){i++;} %> //输出内容 //输出翻页连接 合计:<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1">第一页</a><a href="List.jsp?page=<%=upPage%>">上一页</a> <% for(int j=1;j<=intPageCount;j++){ if(currentPage!=j){
%> <a href="list.jsp?page=<%=j%>">[<%=j%>]</a> <% }else{ out.println(j); } } %>
<a href=”List.jsp?page=<%=nextPage%>”>下一页</a><a href=”List.jsp?page=<%=intPageCount%>”>最后页 </a>
可能会让你写一段Jdbc连Oracle的程序,并实现数据查询.
答:程序如下: package hello.ant; import java.sql.*; public class jdbc { String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String theUser="admin"; String thePw="manager"; Connection c=null; Statement conn; ResultSet rs=null; public jdbc() { try{ Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); c = DriverManager.getConnection(dbUrl,theUser,thePw); conn=c.createStatement(); }catch(Exception e){ e.printStackTrace(); } } public boolean executeUpdate(String sql) { try { conn.executeUpdate(sql); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public ResultSet executeQuery(String sql) { rs=null; try { rs=conn.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } return rs; }
public void close() { try { conn.close(); c.close(); } catch (Exception e) { e.printStackTrace(); } }
public static void main(String[] args) { ResultSet rs; jdbc conn = new jdbc(); rs=conn.executeQuery("select * from test"); try{ while (rs.next()) { System.out.println(rs.getString("id")); System.out.println(rs.getString("name")); } }catch(Exception e) { e.printStackTrace(); } } }
1、 在Jdbc进行数据库调用时,你经常采用什么方式执行sql语句?为什么不用其他方式(比较一下即可)
2、 你在数据库编程过程中,面临的数据量有多大?如果有一个项目中每天有三张结构完全相同的表,一个365天天天如此,每张表记录在100万条以上,现需要分页查询,根据这样的项目,采用你用过的分页原理,行吗?(这是考的是性能,一般的分页方式不行,遇到这样的题,你可以说,你需要了解更详细的业务,认真的研究一下,是可以的,当然,如果你认为你的方法可以,可以对这样的问题进行交流,等等。这样的题,说不好也行,不影响你的面试,主要是看一下你对问题的态度)
3、 你用java调用过的存储过程吗?当一个存储过程有返回记录集时,该怎样在java中返回?
4、 应该对oracle有所了解,对一些数据库的名词,应该知道词的解释。
分页一 前提 希望最新的纪录在开头给你的表建立查询: 表:mytable
查询:create or replace view as mytable_view from mytable order by id desc 其中,最好使用序列号create sequence mytable_sequence 来自动增加你的纪录id号 二 源程序 <%String sConn=”你的连接”
Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn=DriverManager.getConnection(sConn,”你的用户名”,”密码”);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Statement stmtcount=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery(“select * from mytable_view”); String sqlcount=”select count(*) from mytable_view”; ResultSet rscount=stmtcount.executeQuery(sqlcount); int pageSize=你的每页显示纪录数; int rowCount=0; //总的记录数 while (rscount int pageCount; //总的页数 int currPage; //当前页数
String strPage; strPage=request.getParameter(“page”); if (strPage==null){ currPage=1; } else{
currPage=Integer.parseInt(strPage); if (currPage<1) currPage=1; } pageCount=(rowCount+pageSize-1)/pageSize; if (currPage>pageCount) currPage=pageCount; int thepage=(currPage-1)*pageSize;
int n=0; rs.absolute(thepage+1); while (n<(pageSize)&&!rs %> <%rs.close(); rscount.close(); stmt.close(); stmtcount.close(); conn.close(); %> //下面是 第几页等
<form name=”sinfo” method=”post” action=”sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>” onSubmit=”return testform(this)”> 第<%=currPage%>页 共<%=pageCount%>页 共<%=rowCount%>条
<%if(currPage>1){%><a href=”sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>”>首页</a><%}%>
<%if(currPage>1){%><a href=”sbinfo_index.jsp?page=<%=currPage-1%>&condition=<%=condition%>&type=<%=type%>”>上一页</a><%}%> <%if(currPage<pageCount){%><a href=”sbinfo_index.jsp?page=<%=currPage+1%>&condition=<%=condition%>&type=<%=type%>”>下一页</a><%}%>
<%if(pageCount>1){%><a href=”sbinfo_index.jsp?page=<%=pageCount%>&condition=<%=condition%>&type=<%=type%>”>尾页</a><%}%> 跳到<input type=”text” name=”page” size=”4″ style=”font-size:9px”>页
<input type=”submit” name=”submit” size=”4″ value=”GO” style=”font-size:9px”> </form> 希望大家喜欢!!!!!!
SQLhttp://www.jactiongroup.net/reference/html/index.html //书
http://blog.csdn.net/hbuzhang/archive/2004/12/07/207202.aspx //书
connection connconn.setAuto(false)//表示手动提交conn.commit// 提交conn.rollback();//事务回滚
-内联接use pubsselect a.au_fname, a.au_lname, p.pub_name from authors a inner join publishers p on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
–左外联接use pubs select a.au_fname, a.au_lname, p.pub_name from authors a left join publishers p
on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
-使用子查询USE pubs GO SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_idFROM titlesWHERE type = ‘business’) GO
--如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。
–如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。
–该循环不断地将价格加倍直到最高价格超过 $50 USE pubs GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
—如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。
–如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。
–该循环不断地将价格加倍直到最高价格超过 $50
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
EXECUTE au_info ‘Dull’, ‘Ann’–或者
EXECUTE au_info @lastname = ‘Dull’, @firstname = ‘Ann’–创建存储过程CREATE PROCEDURE titles_sum @TITLE varchar(40),@SUM money OUTPUT
AS
SELECT @SUM = SUM(price)
FROM titles
WHERE title LIKE @TITLE
GO
DECLARE @TOTALCOST money
EXECUTE titles_sum ‘The%’, @TOTALCOST OUTPUT
select @TOTALCOST
go
CREATE PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE city = ‘Oakland’
and state = ‘CA’
ORDER BY au_lname, au_fname
GO
–sp_helptext Oakland_authors
ALTER PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE state = ‘CA’
ORDER BY au_lname, au_fname
GO
–sp_helptext Oakland_authors
–提交事务后,所有书籍支付的版税增加 10%。
begin transaction MyTransaction
update roysched
set royalty = royalty * 1.10
commit transaction MyTransaction
–rollback transaction MyTransaction
select royalty from roysched
–select @@trancount
–1.创建试验实验表
create table temptrigger
( id_temp varchar(2) not null primary key,
temp_name varchar(10) null,
temp_age int null)go
insert temptrigger values(’01′,’张三’,’10′)
insert temptrigger values(’02′,’李四’,’11′)
insert temptrigger values(’03′,’王五’,’12′)
insert temptrigger values(’04′,’赵六’,’11′)
select * from temptrigger go
--2.创建insert , update触发器
create trigger temptrigger_modify
on temptrigger
for insert,update
as
begin
if (select temp_age from inserted) > 15
begin
rollback transaction
print ‘年龄不能超过15岁!’
end
end
–insert temptrigger values(’04′,’大朋’,’17′)
–insert temptrigger values(’05′,’大朋’,’17′)
–insert temptrigger values(’05′,’大朋’,’14′)
–update temptrigger set temp_age=’18′ where id_temp = ’01′
–update temptrigger set temp_age=’9′ where id_temp = ’01′
-3.创建delete 触发器–drop trigger temptrigger_delete
create trigger temptrigger_delete
on temptrigger
for delete
as
begin
print @@rowcount
if @@rowcount > 1
begin
rollback transaction
print ‘一次删除记录不能多于1条’
end
end
–delete from temptrigger
–delete from temptrigger where id_temp=’01′
–创建聚集索引create clustered index clindx_titleid on roysched(title_id)–sp_help roysched
–创建非聚集索引create nonclustered index unclindx_titleid on roysched(title_id)–sp_help roysched
–查看索引统计dbcc show_statistics(roysched,titleidind)
–更新索引统计update statistics authors
–重建索引dbcc dbreindex(‘roysched’,unclindx_titleid)
–删除索引drop index roysched.unclindx_titleid-sp_help roysched
1–创建ssn(社会保险号)的基于varchar的自定义数据类型。
–用于存储11位社会保险号(999-99-999)的列。该列不能
–为null。use pubs exec sp_addtype ssn , ‘varchar(11)’ , ‘NOT NULL’
–查看创建的数据类型–sp_help ssn
–使用创建的数据类型create table mytable( myid varchar(2) primary key, myssn ssn)
4-删除创建的数据类型–drop table mytable–exec sp_droptype ssn
•批是包含一个或多个 Transact-SQL 语句的组,从应用程序一次性地发送到 Microsoft SQL Server 执行。批作为一个整体执行,以GO命令结束。批处理是客户端作为一个单元发出的一个或多个 SQL 语句的集合。每个批处理编译为一个执行计划。
触发器•触发器是在对表进行插入、更新或删除操作时自动执行的存储过程•触发器通常用于强制业务规则•触发器可以确保数据的完整性和一致性
事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位(构成单一逻辑工作单元的操作集合)如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。
如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除
•锁 是在多用户环境中对数据访问的限制封锁就是事务 T 在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务 T 就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。(锁蕴含的基本概念是用户需要对表的排它访问)•从程序员的角度看:分为乐观锁和悲观锁。乐观锁:完全依靠数据库来管理锁的工作。悲观锁:程序员自己管理数据或对象上的锁处理。
子查询:一个 SELECT 语句嵌套在另一个 SELECT 语句中。
索引是一个数据库对象,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,然后根据指定的排序次序排列这些指针 优点提高查询执行的速度。 强制实施数据的唯一性。 提高表之间联接的速度。 缺点 存储索引要占用磁盘空间。数据修改需要更长的时间,因为索引也要更新。
•视图•是一种虚拟表,通常是作为来自一个或多个表 的行或列的子集创建的。•视图本质上讲,就是保存在数据库中的select查询•视图并不是数据库中存储的数据值的集合。•对最终用户的好处– 结果更容易理解– 获得数据更容易
•对开发人员的好处– 限制数据检索更容易– 维护应用程序更方便
存储过程•使用一个名称存储的预编译T-SQL语句和流程控制语句的集合•由数据库开发人员或数据库管理员编写
•用来执行管理任务或应用复杂的业务规则 优点•执行速度更快•首次运行时,进行优化和编译得到执行计划并将该计划存储在系统表中,以后直接运行。•实现多个程序共享应用程序逻辑•组件式编程•能够屏蔽数据库的结构,实现更高的安全性
•减少网络流通量
1. 写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT No , Name AS ‘姓名’ ,Num1 ,Num2,(Num1+Num2) AS ‘总和’
FROM Custom
142 、可能会让你写一段 Jdbc 连 Oracle 的程序 , 并实现数据查询 .
答 : 程序如下:
package hello.ant;
import java.sql.*;
public class jdbc
{
String dbUrl=”jdbc:oracle:thin:@127.0.0.1:1521:orcl”;
String theUser=”admin”;
String thePw=”manager”;
Connection c=null;
Statement conn;
ResultSet rs=null;
public jdbc()
{
try{
Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();
c = DriverManager.getConnection(dbUrl,theUser,thePw);
conn=c.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
public boolean executeUpdate(String sql)
{
try
{
conn.executeUpdate(sql);
return true;
}
catch (SQLException e)
{
e.printStackTrace();
return false;
}
}
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
rs=conn.executeQuery(sql);
}
catch (SQLException e)
{
e.printStackTrace();
}
return rs;
}
public void close()
{
try
{
conn.close();
c.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
ResultSet rs;
jdbc conn = new jdbc();
rs=conn.executeQuery(“select * from test”);
try{
while (rs.next())
{
System.out.println(rs.getString(“id”));
System.out.println(rs.getString(“name”));
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
143 、 ORACLE 大数据量下的分页解决方法。一般用截取 ID 方法,还有是三层嵌套方法。
答 : 一种分页方法
<%
int i=1;
int numPages=14;
String pages = request.getParameter(“page”) ;
int currentPage = 1;
currentPage=(pages==null)?(1):{Integer.parseInt(pages)}
sql = “select count(*) from tables”;
ResultSet rs = DBLink.executeQuery(sql) ;
while(rs.next()) i = rs.getInt(1) ;
int intPageCount=1;
intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
int nextPage ;
int upPage;
nextPage = currentPage+1;
if (nextPage>=intPageCount) nextPage=intPageCount;
upPage = currentPage-1;
if (upPage<=1) upPage=1;
rs.close();
sql=”select * from tables”;
rs=DBLink.executeQuery(sql);
i=0;
while((i<numPages*(currentPage-1))&&rs.next()){i++;}
%>
// 输出内容
// 输出翻页连接
合计 :<%=currentPage%>/<%=intPageCount%><a href=”List.jsp?page=1″> 第一页 </a><a
href=”List.jsp?page=<%=upPage%>”> 上一页 </a>
<%
for(int j=1;j<=intPageCount;j++){
if(currentPage!=j){
%>
<a href=”list.jsp?page=<%=j%>”>[<%=j%>]</a>
<%
}else{
out.println(j);
}
}
%>
<a href=”List.jsp?page=<%=nextPage%>”> 下一页 </a><a href=”List.jsp?page=<%=intPageCount%>”> 最后页
</a>
相关推荐
"Java数据库面试题" Java数据库面试题中涵盖了许多重要的知识点,从数据库设计到性能优化,从基本概念到高级主题。本文将对这些知识点进行详细的解释和总结。 一、数据库设计 在设计数据库时,需要注意三大范式的...
通过阅读"数据库笔试题汇总.doc"和"Java面试题大全.pdf",你将有机会接触到这些主题的实际问题和解答,从而深化理解和应用能力。准备充分的面试者不仅能够解答问题,更能展示出对JAVA和数据库领域的深度理解和实践...
本面试题集旨在帮助求职者准备Java与数据库相关的面试,以展示他们的专业技能和深入理解。以下是对这些主题的详细阐述: 1. **Java基础知识**: - **类与对象**:Java是一种面向对象的语言,理解类的概念、对象的...
java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用
以下是对"Java+数据库面试题.zip"中可能包含的重要知识点的详细说明: 1. **Java基础**: - **面向对象编程**:包括类、对象、封装、继承、多态等核心概念。 - **异常处理**:理解如何使用try-catch-finally语句...
【Java及数据库面试题 包含SSH,数据库和Java基础】 1. SQL查询与数据库操作: 这一题目考察的是基本的SQL查询能力。在给出的示例中,我们看到如何从`Custom`表中选取特定列并重命名显示。`AS`关键字用于重命名列,...
虽然标签中提到了C面试题,但Java面试题和数据库面试题已经占据了主要篇幅。然而,C语言作为基础编程语言,其面试题目可能涵盖指针、内存管理、函数、结构体、预处理器等方面。 1. **指针**:理解指针的运算,指针...
Java基础及数据库面试题是Java开发者在求职过程中必须面对的重要环节。这涵盖了语言特性、编程原理、数据结构、算法、框架应用以及数据库管理等多个方面。下面将对这些关键知识点进行详细解析。 一、Java基础 1. *...
在Java面试中,数据库相关的知识点是必不可少的一部分,因为大多数企业应用都依赖于数据库来存储和检索数据。以下是一些在面试中可能涉及的关键概念和技能: 1. **SQL基础**:掌握SQL语言是基础,包括SELECT查询、...
在IT行业中,Java是一种...以上就是根据标题和描述提炼出的一些Java面试相关知识点,覆盖了从基础到进阶的多个层面。在准备面试时,不仅需要理解这些概念,还要能结合实际项目经验进行深入讨论,以展示自己的实战能力。
- 介绍一些常用的Java数据库连接池实现,如C3P0、DBCP、HikariCP等。 - 如何配置和优化连接池参数? 8. **性能优化** - 如何通过索引优化SQL查询性能? - 什么是SQL查询的执行计划?如何查看和分析? - 何时...
Java编程语言和数据库技术是IT行业的核心组成部分,尤其在面试和笔试中,它们的重要性不言而喻。这里,我们将深入探讨这两个领域的关键知识点,帮助你在准备面试时建立扎实的基础。 一、Java基础知识 1. **Java...
在IT行业的求职过程中,面试是决定能否获得心仪职位的关键环节。...这份压缩包中的Java面试资料和数据库面试资料将帮助求职者系统地复习和巩固这两个领域的关键知识点,为面试做好充分准备,提高成功几率。
文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...
本资料集合了互联网上被广泛讨论的数据库面试经典试题,旨在帮助求职者更好地准备数据库相关的面试。 1. 数据库基本概念 - 数据库(Database):存储和管理数据的系统,提供数据的组织、存储、检索、更新和删除等...
【标题】"尚硅谷JAVA数据库等面试题集"所涵盖的知识点主要集中在Java、SSH(Struts+Spring+Hibernate)框架以及SQL这三大领域,这些都是IT行业尤其是软件开发中的核心技能。面试题集通常会包括各种技术问题,旨在...
在Java数据库笔试面试中,掌握的关键知识点广泛而深入,涵盖了Java基础、JSP、Servlet、EJB、数据库操作以及多线程等多个方面。以下是对这些关键领域的详细解析: 1. **Java基础**: - **数据类型与变量**:了解...
【标题】:“Java+数据库面试题”集合 在IT领域,尤其是Java开发和数据库管理方面,面试题常常涉及广泛的知识点。以下是一些基于“Java+数据库面试题”的核心概念和重要知识点,这些内容可能会在腾讯、中兴等知名...
这里我们将深入探讨一些关键的Java与数据库相关的知识点,这些内容可能会出现在面试或笔试中。 首先,我们需要了解Java如何与数据库进行交互。这通常涉及到JDBC(Java Database Connectivity),它是Java平台的标准...
【Java数据库编程面试题资料PDF】是一份专为准备Java数据库编程面试的求职者精心编纂的资源。这份文档涵盖了Java在数据库交互中所涉及的关键知识点,旨在帮助求职者强化理解,提高应对面试的能力。以下将对其中的...