- 博客(1)
- 资源 (19)
- 收藏
- 关注
原创 1.为什么要写博客
常有写笔记的习惯,但都没有搬到网上写,之前有想法在网上写,但都没有坚持写下去,这次坚持写下去。网上写最大的好处就是便于查阅和分享;纸质上写最大好处便于整理和书写。自从2005年正式从事JAVA应用软件的开发至今,越来越有强烈写作冲动,很多时候静下来写些工作总结,采用思维脑图的方式分类梳理,对技术的应用和理解的提升,我深有体会。
2015-11-10 16:46:09 222
jsp + oracle分页简单实用
<%--
作者:何志强[[email protected]]
日期:2000-08-03
版本:1.0
功能:JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle
--%>
<%@ page contentType="text/html;charset=8859_1" %>
<%
//变量声明
java.sql.Connection sqlCon; //数据库连接对象
java.sql.Statement sqlStmt; //SQL语句对象
java.sql.ResultSet sqlRst; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i;
//设置一页显示的记录数
intPageSize = 2;
//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//装载JDBC驱动程序
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//设置数据库连接字符串
strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb";
//连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq");
//创建一个可以滚动的只读的SQL语句对象
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
//准备SQL语句
strSQL = "select name,age from test";
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){
%>
<tr>
<td><%=sqlRst.getString(1)%></td>
<td><%=sqlRst.getString(2)%></td>
</tr>
<%
sqlRst.next();
i++;
}
}
%>
</table>
第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a><%}%> <%if(intPage>1){%><a href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a><%}%>
</body>
</html>
<%
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
sqlCon.close();
%>
2009-02-19
java生成RSS的jar,大家看看就知道了
多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加
2009-01-16
数据结构与算法(JAVA篇)之递归算法(二)
/**
*
* @author SunnyMoon
*/
/**
* 概念介绍:
*
* 递归的二分查找: 想用最少的比较次数在一个有序的数组中找到一个给定的数据项。
*
* 非递归的二分查找:二分查找也可以用非递归的算法,但是分治算法通常要回到递归。分治算
* 法常常是一个方法,在这个方法中含有两个对自身的递归的调用。
*
* 分治算法:递归的二分查找是分治算法的一种实现方法。把一个是问题分成两个更小的问题,
* 并且解决它们。这个过程一直持续下去直到易于求解的基值情况,就不需再分了。
* 分治算法常常是一上方法,在这个方法中含有两个对自身的递归调用,分别对应于
* 问题的两个部分。在二分查找中,就有两个这样的调用,但是只有一个真的执行了
* (调用哪一个取决于关键字的值)。
* 递归的效率:调用一个方法会有一定的代价和开销。首先,控制必须须从当前位置转移到调用
* 方法的开始处。其次,传给这个方法的参数以及这个方法返回地址都要初压到一
* 个栈里,为的是方法能够访问参数以及知道返回值在存储在哪里,这个过程也称
* "保存现场"。递归方法的使用的本质是从概念上简化了问题,而不是因为它更有
* 效率。当使用递归的效率很低的时候,就可以考虑如果把递归转化成非递归。
*/
class OrdArray {
private long[] a;
private int nElems;
public OrdArray(int max) {
a = new long[max];
nElems = 0;
}
public int size() {
return nElems;
}
public int find(long searchKey) {
return recFind(searchKey, 0, nElems - 1);//调用递归方法
//return recFind2(searchKey, 0, nElems - 1);//调用非递归方法
}
public int recFind(long searchKey, int lowerBound, int upperBound) {//递归方法定义
int curIn = (lowerBound + upperBound) / 2;
if (a[curIn] == searchKey) {
return curIn;
} else if (lowerBound > upperBound) {
return nElems;
} else {
if (a[curIn] < searchKey) {
return recFind(searchKey, curIn + 1, upperBound);
} else {
return recFind(searchKey, lowerBound, curIn - 1);
}
}
}
public int recFind2(long searchKey, int lowerBound, int upperBound){//非递归方法定义
int curIn=0;
while(true){
curIn=(lowerBound+upperBound)/2;
if(a[curIn]==searchKey)
return curIn;
else if(lowerBound>upperBound)
return nElems;
else{
if(a[curIn]<searchKey){
lowerBound=curIn+1;
}
else{
upperBound=curIn-1;
}
}
}
}
public void insert(long value){
int j;
for(j=0; j<nElems; j++)
if(a[j]>value)
break;
for(int k=nElems; k>j; k--)
a[k]=a[k-1];
a[j]=value;
nElems++;
}
public void display(){
for(int j=0; j<nElems; j++){
System.out.println(a[j]+"");
}
}
}
class BinarySearchApp{
public static void main(String[] args){
int maxSize=100;
OrdArray arr=new OrdArray(maxSize);
arr.insert(72);
arr.insert(90);
arr.insert(45);
arr.insert(126);
arr.insert(54);
arr.insert(99);
arr.insert(144);
arr.insert(27);
arr.insert(135);
arr.insert(81);
arr.insert(18);
arr.insert(100);
arr.insert(9);
arr.insert(117);
arr.insert(63);
arr.insert(36);
arr.display();
int searchKey=100;
if(arr.find(searchKey) !=arr.size())
System.out.println("Found "+searchKey);
else
System.out.println("Can't find "+ searchKey);
}
}
/**
* 运行结果:
* 9
* 18
* 27
* 36
* 45
* 54
* 63
* 72
* 81
* 90
* 99
* 100
* 117
* 126
* 135
* 144
* Found 100
*/
/**
* 总结:
* 很多的数学问题都使用递归的方法解决,比如找两个数的最大公约数,求一个数的
* 乘方等等。如果有效率需求的时候,可以再考虑将递归转化成非递归。
*/
2008-11-26
数据结构与算法(JAVA篇)之递归算法
/**
*
* @author SunnyMoon
*/
//////////////////////////////////////////////////////////////////////////////
/**
* 概念介绍:
*
* 消除递归:
* 一个算法作为一个递归的方法通常从概念上很容易理解,但实际使用中递归的效率不高,在这种
* 情况下,把递归算法转换成非递归的算法是非常有用的,这种转换经常用到栈。
*
* 递归和栈:
* 递归和栈之间有着紧密的联系,大部分的编译器使用栈实现递归的。
*
* 调用方法的时候发生什么:
* 1. 编译器会把这个方法所有当前参数及返回地址压入栈中;
* 2. 将控制权交给这个方法,方法通过获得栈顶元素值访问参数;
* 3. 方法运行结束的时候,值退栈,参数消失且控制权重新回到返回地址;
*
* 模拟递归方法:
* 可以将任意一个递归方法转换为非递归的基于栈的方法。在一些简单的情况可以完全消除栈,只
* 使用一个简单的循环,但是在很复杂的情况,算法中必须须要保留栈。本例子是简单的情况,可
* 以进一步完全消除栈。
*/
/////////////////////////////////////////////////////////////////////////////
/**
* 计算三角数字的问题:
* 递归算法描述如下
* int triiangle(int n){
* if(n==1)
* return 1;
* else
* return (n+triangle(n-1));
* }
*/
import java.io.*;
/**
* 模拟一个递归方法,通用的方式消除递归
*/
class Params {//封装了方法的返回地址和方法的参数
public int number;
public int returnAddress;
public Params(int num, int returnAdd) {
number = num;
returnAddress = returnAdd;
}
}
class StackX {//模拟递归时使用的栈
private int maxSize;
private Params[] stackArray;
private int top;
public StackX(int s) {
maxSize = s;
stackArray = new Params[maxSize];
top = -1;
}
public void push(Params p) {
stackArray[++top] = p;
}
public Params pop() {
return stackArray[top--];
}
public Params peek() {
return stackArray[top];
}
}
class StackTriangleApp {
static int theNumber;
static int theAnswer;
static StackX theStack;
static int logicAddress;
static Params theseParams;
public static void main(String[] args) throws IOException{//主方法
System.out.print("Number = ");
theNumber = getInt();
stackTriangle();
System.out.println("");
System.out.println("Trriangle = " + theAnswer);
}
@SuppressWarnings("empty-statement")
public static void stackTriangle() {//计算三角数字的方法,模拟递归方法
theStack = new StackX(100);
logicAddress = 1;//设置一个逻辑地址为入口地址
while (step() == false);
}
public static boolean step() {
switch (logicAddress) {
case 1:
theseParams = new Params(theNumber, 6);//设定循环返回的地址
theStack.push(theseParams);
logicAddress = 2;
break;
case 2:
theseParams = theStack.peek();
if (theseParams.number == 1) {
theAnswer = 1;
logicAddress = 5;
} else {
logicAddress = 3;
}
break;
case 3:
Params newParams = new Params(theseParams.number - 1, 4);
theStack.push(newParams);
logicAddress = 2;
break;
case 4:
theseParams = theStack.peek();
theAnswer = theAnswer + theseParams.number;
logicAddress = 5;
break;
case 5:
theseParams = theStack.peek();
logicAddress = theseParams.returnAddress;
theStack.pop();
break;
case 6:
return true;
}
return false;
}
public static String getString() throws IOException{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}
public static int getInt() throws IOException{
String s=getString();
return Integer.parseInt(s);
}
}
/**
* 总结:
* 当要求效率的时候可以把弟归转化为基于栈的非递归,进而可以把基于栈的转化为仅有循环的
* 非递归,这种情况下效率是最高的。
* 但是一些复杂的情况可以转化为基于栈的非递归,但是无法消除栈的。
* 一些递归的算法是非常优秀的,比如分治算法。
*/
2008-11-26
javascript小技巧
<html>
<head>
<title>网页特效|Linkweb.cn/Js|---重要信息说明脚本</title>
<style type="text/css">
<!--
body { font-family: "宋体"; font-size: 9pt; margin-top: 0px; margin-left: 0px; margin-right: 0px}
A { COLOR: black; FONT-SIZE: 11pt; FONT-WEIGHT: 400; TEXT-DECORATION: none }
A:hover { COLOR: red; FONT-SIZE: 11pt; FONT-WEIGHT: 400; TEXT-DECORATION: underline }
a:active { font: 11pt "宋体"; cursor: hand; color: #FF0033 }
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<script language="javascript">
//显示的信息,可以使用HTML语法,注意引号用法,单套双。
var message='<b><font size=5 face=arial color=red><a href="#" target="_blank">请点击进入本站</a></font></b>'
//背景色
var backgroundcolor="#eeffee"
//0 代表信息永远显示,1 代表信息只显示一段时间,2为随机显示模式;
var displaymode=1
//如果显示模式为在指定时间内显示,输入时间段(1000为1秒);
var displayduration=10000
//1代表闪烁,0代表不闪烁;
var flashmode=1
//如果设置了闪烁,输入闪烁的颜色;
var flashtocolor="lightgreen"
////下面不必修改///
function regenerate(){
window.location.reload()
}
var which=0
function regenerate2(){
if (document.layers)
setTimeout("window.onresize=regenerate",700)
}
function display2(){
if (document.layers){
if (topmsg.visibility=="show")
topmsg.visibility="hide"
else
topmsg.visibility="show"
}
else if (document.all){
if (topmsg.style.visibility=="visible")
topmsg.style.visibility="hidden"
else
topmsg.style.visibility="visible"
setTimeout("display2()",Math.round(Math.random()*10000)+10000)
}
}
function flash(){
if (which==0){
if (document.layers)
topmsg.bgColor=flashtocolor
else
topmsg.style.backgroundColor=flashtocolor
which=1
}
else{
if (document.layers)
topmsg.bgColor=backgroundcolor
else
topmsg.style.backgroundColor=backgroundcolor
which=0
}
}
if (document.all){
document.write('<span id="topmsg" style="position:absolute;visibility:hidden">'+message+'</span>')
}
function logoit(){
document.all.topmsg.style.left=document.body.scrollLeft+document.body.clientWidth/2-document.all.topmsg.offsetWidth/2
document.all.topmsg.style.top=document.body.scrollTop+document.body.clientHeight-document.all.topmsg.offsetHeight-4
}
function logoit2(){
topmsg.left=pageXOffset+window.innerWidth/2-topmsg.document.width/2
topmsg.top=pageYOffset+window.innerHeight-topmsg.document.height-5
setTimeout("logoit2()",90)
}
function setmessage(){
document.all.topmsg.style.left=document.body.scrollLeft+document.body.clientWidth/2-document.all.topmsg.offsetWidth/2
document.all.topmsg.style.top=document.body.scrollTop+document.body.clientHeight-document.all.topmsg.offsetHeight-4
document.all.topmsg.style.backgroundColor=backgroundcolor
document.all.topmsg.style.visibility="visible"
if (displaymode==1)
setTimeout("topmsg.style.visibility='hidden'",displayduration)
else if (displaymode==2)
display2()
if (flashmode==1)
setInterval("flash()",1000)
window.onscroll=logoit
window.onresize=new Function("window.location.reload()")
}
function setmessage2(){
topmsg=new Layer(window.innerWidth)
topmsg.bgColor=backgroundcolor
regenerate2()
topmsg.document.write(message)
topmsg.document.close()
logoit2()
topmsg.visibility="show"
if (displaymode==1)
setTimeout("topmsg.visibility='hide'",displayduration)
else if (displaymode==2)
display2()
if (flashmode==1)
setInterval("flash()",1000)
}
if (document.layers)
window.onload=setmessage2
else if (document.all)
window.onload=setmessage
</script>
<center>
<br>
<br>
<br><center>
<table border=1 bordercolor=#000000 borderlight=green style="border-collapse: collapse" cellpadding="0" cellspacing="0">
<tr><td align=center><font size=5 color=red face="Arial, Helvetica, sans-serif"><strong>下面为脚本显示区!</strong></font></td></tr><tr><td align=left height=110 width=240>下面的信息说明10秒后消失,你也可以设置更长时间或不消失.
</td></tr>
</table></center>
<br>
<br>
<center>
<SCRIPT LANGUAGE="JavaScript">
<!-- hide
function goHist(a)
{
history.go(a);
}
//-->
</script></center>
<br>
<br>
</body>
</html>
2008-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人