jspdb2數據庫的簡單介紹

本文目錄一覽:

DB2數據庫和JSP結合在一起的級聯查詢

SELECT 1

SCAN

SCATTER MEMVAR

SELECT 2

APPEND BLANK

GATHER MEMVAR

ENDSCAN

為什麼我在使用jsp連接db2數據庫時出現如下問題

meta name=”GENERATOR” content=”Microsoft FrontPage 4.0″

meta name=”ProgId” content=”FrontPage.Editor.Document”/headbodyp align=”center”ufont size=”5″ face=”華文新魏”使用jsp(SUN企業級應用的首選)

連接到Db2數據庫/font/u/p%!String host=”192.1.1.127″; //數據庫主機

String database=”myweb”; //數據庫名

String user=”db2admin”; //用戶名

String pass=”db2admin”; //口令

%% java.sql.Connection sqlConn; //數據庫連接對象

java.sql.Statement sqlStmt; //語句對象

java.sql.ResultSet sqlRst; //結果集對象try{try{//登記JDBC驅動對象

//下面的二中方法均可

//DriverManager.registerDriver (new COM.ibm.db2.jdbc.net.

DB2Driver()); //db2

Class.forName(“COM.ibm.db2.jdbc.net.DB2Driver”).newInstance(); //db2}catch (ClassNotFoundException e)

{ out.print (e);}//連接數據庫

sqlConn= java.sql.DriverManager.getConnection (“jdbc:db2://”+host+”/”+database,user,pass);//創建語句對象

out.print (“連接數據庫成功!”);%/body%//關閉結果集對象

//sqlRst.close();

//關閉語句對象

//sqlStmt.close ();

//關閉數據庫連接

jsp用jdbc連接db2數據庫的方法

數據庫版本:db2

UDB

v7.2

服務器操作系統:aix4.3.3

1、關閉服務器上的web服務;

2、停止jdbc偵聽進程db2jd,db2jd一般啟動的是6789的端口服務,

先用ps

-ef

|

grep

db2jd

查看到它的進程號

然後用kill

-9

進程號

命令停止;

3、在數據庫服務器中,進入/usr/lpp/db2_07_01/java12目錄,執行./usejdbc2以啟用jdbc2;

4、將/usr/lpp/db2_07_01/java12下的db2java.zip拷貝到自己所在web工程的WEB-INFlib下,如果使用的是tomcat,將拷貝後的文件更名為db2java.jar;

5、在服務器上,su

數據庫實例用戶名

執行db2jstrt

6789

(這句啟動了db2jd進程,6789是默認的服務器偵聽jdbc2連接的端口,也可以設置成另外的任意不衝突的端口。)

6、在自己所建立工程中,建立一個測試的jsp文件,內容如下:

%@

page

contentType=text/html;

charset=gb2312

language=java

import=java.sql.*%

html

body

以下是從db2數據庫讀取的數據:hr

table

border=1

%

Class.forName(COM.ibm.db2.jdbc.net.DB2Driver).newInstance();

Connection

con=java.sql.DriverManager.getConnection(jdbc:db2://192.168.168.2:6789/chaodb,db2inst1,mima);

Statement

stmt=con.createStatement();

ResultSet

rst=stmt.executeQuery(select

username

from

tname);

while(rst.next())

{

out.println(tr);

out.println(td+rst.getString(username)+/td);

out.println(/tr);

}

//關閉連接、釋放資源

rst.close();

stmt.close();

con.close();

%

/table

/body

/html

說明:

192.168.168.2是服務器的IP地址;

6789是jdbc2偵聽的端口號,需和服務器端設置一致,如果服務器本身用的就是6789,那麼程序的這個地方引用時,可省略這個號碼。

chaodb是建立在服務器上的一個數據庫;

db2inst1是擁有chaodb數據庫的實例用戶;

mima是實例用戶db2inst1的密碼;

先在數據庫中建立一個表,名字是tname,其中有一列是username,錄入一些數據進去。

jsp頁面怎麼獲取DB2數據庫創建的時間

ry:使用工具類實現通用分頁處理

author: evan_zhao

email: evan_zhao@hotmail.com

目前比較廣泛使用的分頁方式是將查詢結果緩存在HttpSession或有狀態bean中,翻頁的時候從緩存中取出一頁數據顯示。這種方法有兩個主要的缺點:一是用戶可能看到的是過期數據;二是如果數據量非常大時第一次查詢遍歷結果集會耗費很長時間,並且緩存的數據也會佔用大量內存,效率明顯下降。

其它常見的方法還有每次翻頁都查詢一次數據庫,從ResultSet中只取出一頁數據(使用rs.last();rs.getRow()獲得總計錄條數,使用rs.absolute()定位到本頁起始記錄)。這種方式在某些數據庫(如oracle)的JDBC實現中差不多也是需要遍歷所有記錄,實驗證明在記錄數很大時速度非常慢。

至於緩存結果集ResultSet的方法則完全是一種錯誤的做法。因為ResultSet在Statement或Connection關閉時也會被關閉,如果要使ResultSet有效勢必長時間佔用數據庫連接。

因此比較好的分頁做法應該是每次翻頁的時候只從數據庫里檢索頁面大小的塊區的數據。這樣雖然每次翻頁都需要查詢數據庫,但查詢出的記錄數很少,網絡傳輸數據量不大,如果使用連接池更可以略過最耗時的建立數據庫連接過程。而在數據庫端有各種成熟的優化技術用於提高查詢速度,比在應用服務器層做緩存有效多了。

在oracle數據庫中查詢結果的行號使用偽列ROWNUM表示(從1開始)。例如select * from employee where rownum10 返回前10條記錄。但因為rownum是在查詢之後排序之前賦值的,所以查詢employee按birthday排序的第100到120條記錄應該這麼寫:

[pre] select * from (

select my_table.*, rownum as my_rownum from (

select name, birthday from employee order by birthday

) my_table where rownum 120

) where my_rownum=100

[/pre]

mySQL可以使用LIMIT子句:

select name, birthday from employee order by birthday LIMIT 99,20

DB2有rownumber()函數用於獲取當前行數。

SQL Server沒研究過,可以參考這篇文章:

在Web程序中分頁會被頻繁使用,但分頁的實現細節卻是編程過程中比較麻煩的事情。大多分頁顯示的查詢操作都同時需要處理複雜的多重查詢條件,sql語句需要動態拼接組成,再加上分頁需要的記錄定位、總記錄條數查詢以及查詢結果的遍歷、封裝和顯示,程序會變得很複雜並且難以理解。因此需要一些工具類簡化分頁代碼,使程序員專註於業務邏輯部分。下面是我設計的兩個工具類:

PagedStatement 封裝了數據庫連接、總記錄數查詢、分頁查詢、結果數據封裝和關閉數據庫連接等操作,並使用了PreparedStatement支持動態設置參數。

RowSetPage 參考PetStore的page by page iterator模式, 設計RowSetPage用於封裝查詢結果(使用OracleCachedRowSet緩存查詢出的一頁數據,關於使用CachedRowSet封裝數據庫查詢結果請參考JSP頁面查詢顯示常用模式)以及當前頁碼、總記錄條數、當前記錄數等信息, 並且可以生成簡單的HTML分頁代碼。

PagedStatement 查詢的結果封裝成RowsetPage。

下面是簡單的使用示例:

//DAO查詢數據部分代碼:

public RowSetPage getEmployee(String gender, int pageNo) throws Exception{

String sql=”select emp_id, emp_code, user_name, real_name from employee where gender =?”;

//使用Oracle數據庫的分頁查詢實現,每頁顯示5條

PagedStatement pst =new PagedStatementOracleImpl(sql, pageNo, 5);

pst.setString(1, gender);

return pst.executeQuery();

}

//Servlet處理查詢請求部分代碼:

int pageNo;

try{

//可以通過參數pageno獲得用戶選擇的頁碼

pageNo = Integer.parseInt(request.getParameter(“pageno”) );

}catch(Exception ex){

//默認為第一頁

pageNo=1;

}

String gender = request.getParameter(“gender” );

request.setAttribute(“empPage”, myBean.getEmployee(gender, pageNo) );

//JSP顯示部分代碼

%@ page import = “page.RowSetPage”%

script language=”javascript”

function doQuery(){

form1.actionType.value=”doQuery”;

form1.submit();

}

/script

form name=form1 method=get

input type=hidden name=actionType

性別:

input type=text name=gender size=1 value=”%=request.getParameter(“gender”)%”

input type=button value=” 查詢 ” onclick=”doQuery()”

%

RowSetPage empPage = (RowSetPage)request.getAttribute(“empPage”);

if (empPage == null ) empPage = RowSetPage.EMPTY_PAGE;

%

table cellspacing=”0″ width=”90%”

tr tdID/td td代碼/td td用戶名/td td姓名/td /tr

%

javax.sql.RowSet empRS = (javax.sql.RowSet) empPage.getRowSet();

if (empRS!=null) while (empRS.next() ) {

%

tr

td%= empRS.getString(“EMP_ID”)%/td

td%= empRS.getString(“EMP_CODE”)%/td

td%= empRS.getString(“USER_NAME”)%/td

td%= empRS.getString(“REAL_NAME”)%/td

/tr

%

}// end while

%

tr

%

//顯示總頁數和當前頁數(pageno)以及分頁代碼。

//此處doQuery為頁面上提交查詢動作的javascript函數名, pageno為標識當前頁碼的參數名

%

td colspan=4%= empPage .getHTML(“doQuery”, “pageno”)%/td

/tr

/table

/form

效果如圖:

因為分頁顯示一般都會伴有查詢條件和查詢動作,頁面應已經有校驗查詢條件和提交查詢的javascript方法(如上面的doQuery),所以RowSetPage.getHTML()生成的分頁代碼在用戶選擇新頁碼時直接回調前面的處理提交查詢的javascript方法。注意在顯示查詢結果的時候上次的查詢條件也需要保持,如input type=text name=gender size=1 value=”%=request.getParameter(“gender”)%”。同時由於頁碼的參數名可以指定,因此也支持在同一頁面中有多個分頁區。

另一種分頁代碼實現是生成每一頁的URL,將查詢參數和頁碼作為QueryString附在URL後面。這種方法的缺陷是在查詢條件比較複雜時難以處理,並且需要指定處理查詢動作的servlet,可能不適合某些定製的查詢操作。

如果對RowSetPage.getHTML()生成的默認分頁代碼不滿意可以編寫自己的分頁處理代碼,RowSetPage提供了很多getter方法用於獲取相關信息(如當前頁碼、總頁數、 總記錄數和當前記錄數等)。

在實際應用中可以將分頁查詢和顯示做成jsp taglib, 進一步簡化JSP代碼,屏蔽Java Code。

附:分頁工具類的源代碼, 有注釋,應該很容易理解。

1.Page.java

2.RowSetPage.java(RowSetPage繼承Page)

3.PagedStatement.java

4.PagedStatementOracleImpl.java(PagedStatementOracleImpl繼承PagedStatement)

您可以任意使用這些源代碼,但必須保留author evan_zhao@hotmail.com字樣

///////////////////////////////////

//

// Page.java

// author: evan_zhao@hotmail.com

//

///////////////////////////////////

package page;

import java.util.List;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

/**

* Title: 分頁對象br

* Description: 用於包含數據及分頁信息的對象br

* Page類實現了用於顯示分頁信息的基本方法,但未指定所含數據的類型,

* 可根據需要實現以特定方式組織數據的子類,br

* 如RowSetPage以RowSet封裝數據,ListPage以List封裝數據br

* Copyright: Copyright (c) 2002 br

* @author evan_zhao@hotmail.com br

* @version 1.0

*/

public class Page implements java.io.Serializable {

public static final Page EMPTY_PAGE = new Page();

public static final int DEFAULT_PAGE_SIZE = 20;

public static final int MAX_PAGE_SIZE = 9999;

private int myPageSize = DEFAULT_PAGE_SIZE;

private int start;

private int avaCount,totalSize;

private Object data;

private int currentPageno;

private int totalPageCount;

/**

* 默認構造方法,只構造空頁

*/

protected Page(){

this.init(0,0,0,DEFAULT_PAGE_SIZE,new Object());

}

/**

* 分頁數據初始方法,由子類調用

* @param start 本頁數據在數據庫中的起始位置

* @param avaCount 本頁包含的數據條數

* @param totalSize 數據庫中總記錄條數

* @param pageSize 本頁容量

* @param data 本頁包含的數據

*/

protected void init(int start, int avaCount, int totalSize, int pageSize, Object data){

this.avaCount =avaCount;

this.myPageSize = pageSize;

this.start = start;

this.totalSize = totalSize;

this.data=data;

//System.out.println(“avaCount:”+avaCount);

//System.out.println(“totalSize:”+totalSize);

if (avaCounttotalSize) {

//throw new RuntimeException(“記錄條數大於總條數?!”);

}

this.currentPageno = (start -1)/pageSize +1;

this.totalPageCount = (totalSize + pageSize -1) / pageSize;

if (totalSize==0 avaCount==0){

this.currentPageno = 1;

this.totalPageCount = 1;

}

//System.out.println(“Start Index to Page No: ” + start + “-” + currentPageno);

}

public Object getData(){

return this.data;

}

/**

* 取本頁數據容量(本頁能包含的記錄數)

* @return 本頁能包含的記錄數

*/

public int getPageSize(){

return this.myPageSize;

}

/**

* 是否有下一頁

* @return 是否有下一頁

*/

public boolean hasNextPage() {

/*

if (avaCount==0 totalSize==0){

return false;

}

return (start + avaCount -1) totalSize;

*/

return (this.getCurrentPageNo()this.getTotalPageCount());

}

/**

* 是否有上一頁

* @return 是否有上一頁

*/

public boolean hasPreviousPage() {

/*

return start 1;

*/

return (this.getCurrentPageNo()1);

}

/**

* 獲取當前頁第一條數據在數據庫中的位置

* @return

*/

public int getStart(){

return start;

}

/**

* 獲取當前頁最後一條數據在數據庫中的位置

* @return

*/

public int getEnd(){

int end = this.getStart() + this.getSize() -1;

if (end0) {

end = 0;

}

return end;

}

/**

* 獲取上一頁第一條數據在數據庫中的位置

* @return 記錄對應的rownum

*/

public int getStartOfPreviousPage() {

return Math.max(start-myPageSize, 1);

}

/**

* 獲取下一頁第一條數據在數據庫中的位置

* @return 記錄對應的rownum

*/

public int getStartOfNextPage() {

return start + avaCount;

}

/**

* 獲取任一頁第一條數據在數據庫中的位置,每頁條數使用默認值

* @param pageNo 頁號

* @return 記錄對應的rownum

*/

public static int getStartOfAnyPage(int pageNo){

return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE);

}

/**

* 獲取任一頁第一條數據在數據庫中的位置

* @param pageNo 頁號

* @param pageSize 每頁包含的記錄數

* @return 記錄對應的rownum

*/

public static int getStartOfAnyPage(int pageNo, int pageSize){

int startIndex = (pageNo-1) * pageSize + 1;

if ( startIndex 1) startIndex = 1;

//System.out.println(“Page No to Start Index: ” + pageNo + “-” + startIndex);

return startIndex;

}

/**

* 取本頁包含的記錄數

* @return 本頁包含的記錄數

*/

public int getSize() {

return avaCount;

}

/**

* 取數據庫中包含的總記錄數

* @return 數據庫中包含的總記錄數

*/

public int getTotalSize() {

return this.totalSize;

}

/**

* 取當前頁碼

* @return 當前頁碼

*/

public int getCurrentPageNo(){

return this.currentPageno;

}

/**

* 取總頁碼

* @return 總頁碼

*/

public int getTotalPageCount(){

return this.totalPageCount;

}

/**

*

* @param queryJSFunctionName 實現分頁的JS腳本名字,頁碼變動時會自動回調該方法

* @param pageNoParamName 頁碼參數名稱

* @return

*/

public String getHTML(String queryJSFunctionName, String pageNoParamName){

if (getTotalPageCount()1){

return “input type=’hidden’ name='”+pageNoParamName+”‘ value=’1’ “;

}

if (queryJSFunctionName == null || queryJSFunctionName.trim().length()1) {

queryJSFunctionName = “gotoPage”;

}

if (pageNoParamName == null || pageNoParamName.trim().length()1){

pageNoParamName = “pageno”;

}

String gotoPage = “_”+queryJSFunctionName;

StringBuffer html = new StringBuffer(“\n”);

html.append(“script language=\”Javascript1.2\”\n”)

.append(“function “).append(gotoPage).append(“(pageNo){ \n”)

.append( ” var curPage=1; \n”)

.append( ” try{ curPage = document.all[\””)

.append(pageNoParamName).append(“\”].value; \n”)

.append( ” document.all[\””).append(pageNoParamName)

.append(“\”].value = pageNo; \n”)

.append( ” “).append(queryJSFunctionName).append(“(pageNo); \n”)

.append( ” return true; \n”)

.append( ” }catch(e){ \n”)

// .append( ” try{ \n”)

// .append( ” document.forms[0].submit(); \n”)

// .append( ” }catch(e){ \n”)

.append( ” alert(‘尚未定義查詢方法:function “)

.append(queryJSFunctionName).append(“()’); \n”)

.append( ” document.all[\””).append(pageNoParamName)

.append(“\”].value = curPage; \n”)

.append( ” return false; \n”)

// .append( ” } \n”)

.append( ” } \n”)

.append( “}”)

.append( “/script \n”)

.append( “”);

html.append( “table border=0 cellspacing=0 cellpadding=0 align=center width=80% \n”)

.append( ” tr \n”)

.append( ” td align=leftbr \n”);

html.append( ” 共” ).append( getTotalPageCount() ).append( “頁”)

.append( ” [“) .append(getStart()).append(“..”).append(getEnd())

.append(“/”).append(this.getTotalSize()).append(“] \n”)

.append( ” /td \n”)

.append( ” td align=right \n”);

if (hasPreviousPage()){

html.append( “[a href=’javascript:”).append(gotoPage)

.append(“(“) .append(getCurrentPageNo()-1)

.append( “)’上一頁/a] \n”);

}

html.append( ” 第”)

.append( ” select name='”)

.append(pageNoParamName).append(“‘ onChange=’javascript:”)

.append(gotoPage).append(“(this.value)’\n”);

String selected = “selected”;

for(int i=1;i=getTotalPageCount();i++){

if( i == getCurrentPageNo() )

selected = “selected”;

else selected = “”;

html.append( ” option value='”).append(i).append(“‘ “)

.append(selected).append(“”).append(i).append(“/option \n”);

}

if (getCurrentPageNo()getTotalPageCount()){

html.append( ” option value='”).append(getCurrentPageNo())

.append(“‘ selected”).append(getCurrentPageNo())

.append(“/option \n”);

}

html.append( ” /select頁 \n”);

if (hasNextPage()){

html.append( ” [a href=’javascript:”).append(gotoPage)

.append(“(“).append((getCurrentPageNo()+1))

.append( “)’下一頁/a] \n”);

}

html.append( “/td/tr/table \n”);

return html.toString();

}

}

///////////////////////////////////

//

// RowSetPage.java

// author: evan_zhao@hotmail.com

//

///////////////////////////////////

package page;

import javax.sql.RowSet;

/**

* pTitle: RowSetPage/p

* pDescription: 使用RowSet封裝數據的分頁對象/p

* pCopyright: Copyright (c) 2003/p

* @author evan_zhao@hotmail.com

* @version 1.0

*/

public class RowSetPage extends Page {

private javax.sql.RowSet rs;

/**

*空頁

*/

public static final RowSetPage EMPTY_PAGE = new RowSetPage();

/**

*默認構造方法,創建空頁

*/

public RowSetPage(){

this(null, 0,0);

}

/**

*構造分頁對象

*@param crs 包含一頁數據的OracleCachedRowSet

*@param start 該頁數據在數據庫中的起始位置

*@param totalSize 數據庫中包含的記錄總數

*/

public RowSetPage(RowSet crs, int start, int totalSize) {

this(crs,start,totalSize,Page.DEFAULT_PAGE_SIZE);

}

/**

*構造分頁對象

*@param crs 包含一頁數據的OracleCachedRowSet

*@param start 該頁數據在數據庫中的起始位置

*@param totalSize 數據庫中包含的記錄總數

*@pageSize 本頁能容納的記錄數

*/

public RowSetPage(RowSet crs, int start, int totalSize, int pageSize) {

try{

int avaCount=0;

if (crs!=null) {

crs.beforeFirst();

if (crs.next()){

crs.last();

avaCount = crs.getRow();

}

crs.beforeFirst();

}

rs = crs;

super.init(start,avaCount,totalSize,pageSize,rs);

}catch(java.sql.SQLException sqle){

throw new RuntimeException(sqle.toString());

}

}

/**

*取分頁對象中的記錄數據

*/

public javax.sql.RowSet getRowSet(){

return rs;

}

}

///////////////////////////////////

//

// PagedStatement.java

// author: evan_zhao@hotmail.com

//

///////////////////////////////////

package page;

import foo.DBUtil;

import java.math.BigDecimal;

import java.util.List;

import java.util.Iterator;

import java.util.Collections;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.PreparedStatement;

import java.sql.Timestamp;

import javax.sql.RowSet;

/**

* pTitle: 分頁查詢/p

* pDescription: 根據查詢語句和頁碼查詢出當頁數據/p

* pCopyright: Copyright (c) 2002/p

* @author evan_zhao@hotmail.com

* @version 1.0

*/

public abstract class PagedStatement {

public final static int MAX_PAGE_SIZE = Page.MAX_PAGE_SIZE;

protected String countSQL, querySQL;

protected int pageNo,pageSize,startIndex,totalCount;

protected javax.sql.RowSet rowSet;

protected RowSetPage rowSetPage;

private List boundParams;

/**

* 構造一查詢出所有數據的PageStatement

* @param sql query sql

*/

public PagedStatement(String sql){

this(sql,1,MAX_PAGE_SIZE);

}

/**

* 構造一查詢出當頁數據的PageStatement

* @param sql query sql

* @param pageNo 頁碼

*/

public PagedStatement(String sql, int pageNo){

this(sql, pageNo, Page.DEFAULT_PAGE_SIZE);

}

/**

* 構造一查詢出當頁數據的PageStatement,並指定每頁顯示記錄條數

* @param sql query sql

* @param pageNo 頁碼

* @param pageSize 每頁容量

*/

public PagedStatement(String sql, int pageNo, int pageSize){

this.pageNo = pageNo;

this.pageSize = pageSize;

this.startIndex = Page.getStartOfAnyPage(pageNo, pageSize);

this.boundParams = Collections.synchronizedList(new java.util.LinkedList());

this.countSQL = “select count(*) from ( ” + sql +”) “;

this.querySQL = intiQuerySQL(sql, this.startIndex, pageSize);

}

/**

*生成查詢一頁數據的sql語句

*@param sql 原查詢語句

*@startIndex 開始記錄位置

*@size 需要獲取的記錄數

*/

protected abstract String intiQuerySQL(String sql, int startIndex, int size);

/**

*使用給出的對象設置指定參數的值

*@param index 第一個參數為1,第二個為2

怎樣用JSP語言查詢數據庫中的數據,並可以修改

查詢什麼數據庫?

testsqlserver.jsp如下

%@ page contentType=”text/html;charset=gb2312″%

%@ page import=”java.sql.*”%

html

body

%Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();

String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs”;

//pubs為你的數據庫的

String user=”sa”;

String password=””;

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql=”select * from test”;

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%

您的第一個字段內容為:%=rs.getString(1)%

您的第二個字段內容為:%=rs.getString(2)%

%}%

%out.print(“數據庫操作成功,恭喜你”);%

%rs.close();

stmt.close();

conn.close();

%

/body

/html

testoracle.jsp如下:

%@ page contentType=”text/html;charset=gb2312″%

%@ page import=”java.sql.*”%

html

body

%Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();

String url=”jdbc:oracle:thin:@localhost:1521:orcl”;

//orcl為你的數據庫的SID

String user=”scott”;

String password=”tiger”;

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql=”select * from test”;

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%

您的第一個字段內容為:%=rs.getString(1)%

您的第二個字段內容為:%=rs.getString(2)%

%}%

%out.print(“數據庫操作成功,恭喜你”);%

%rs.close();

stmt.close();

conn.close();

%

/body

/html

testdb2.jsp如下:

%@ page contentType=”text/html;charset=gb2312″%

%@ page import=”java.sql.*”%

html

body

%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);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql=”select * from test”;

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%

您的第一個字段內容為:%=rs.getString(1)%

您的第二個字段內容為:%=rs.getString(2)%

%}%

%out.print(“數據庫操作成功,恭喜你”);%

%rs.close();

stmt.close();

conn.close();

%

/body

/html

testmysql.jsp如下:

%@ page contentType=”text/html;charset=gb2312″%

%@ page import=”java.sql.*”%

html

body

%Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();

String url=”jdbc:mysql://localhost/softforum?user=softpassword=soft1234useUnicode=truecharacterEncoding=8859_1″

//testDB為你的數據庫名

Connection conn= DriverManager.getConnection(url);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql=”select * from test”;

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%

您的第一個字段內容為:%=rs.getString(1)%

您的第二個字段內容為:%=rs.getString(2)%

%}%

%out.print(“數據庫操作成功,恭喜你”);%

%rs.close();

stmt.close();

conn.close();

%

/body

/html

有了 這些代碼,不代表你就能連接數據庫了,你還得有相應java連接各個數據庫的.jar包加入到你的工程當中!

jsp連接數據庫方法(詳細的)

上面的給出了jsp內嵌java的最初模式,現在一般是三層結構了即MVC結構,就這個例子我來給你解釋下是怎麼做的,java對連接數據庫提供了統一的接口,各個數據庫廠商根據提供的接口規範開發自己的連接方法順序如下:1、用Class.forName()方法加載驅動:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance(); 黑體部分為數據庫廠商自己開發的驅動。2、定義好連接數據庫的url地址,連接串String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs”;黑體部分為固定寫法不用理會。回到你最初的問題,如何創建數據庫,這裡你可以去baidu下每個數據庫創建的方法,一般數據庫安裝的時候都有默認的數據庫名,和對應的系統管理員工號和密碼,DatabaseName=pubs這裡說明sql serv 2000中建立了一個名字叫pubs的數據庫jdbc:microsoft:sqlserver://localhost:1433固定寫法唯一不同的是1433端口號,可能你在安裝sql serv 2000的時候改變了該端口號為1500那麼這裡就應該為jdbc:microsoft:sqlserver://localhost:15003、定義好DatabaseName=pubs的登錄用戶名和密碼 String user=”sa”;用戶名

String password=””;密碼4、創建Connection對象,通過調用DriverManager.getConnection方法獲得。 Connection conn= DriverManager.getConnection(url,user,password);黑體部分就是你定義好的連接串,用戶名,密碼,不可改變順序。到這裡為止數據庫就連接上了,但是連接好了數據庫還要做點什麼,比如打印出來,接下看。5、通過獲得的Connection對象conn創建Statement 對象stmtStatement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);黑體部分是定義ResultSet的一些屬性的,具體含義可以參考JDK的api。6、定義好你準備取得數據的sql語句,比如下面 select * from test說明想從test表中取得所有的數據,關於sql語句可以去查找相關數據庫資料。 String sql=”select * from test”;定義好語句後,就用上一步創建好的Statement 對象stmt來執行這個sql語句,並返回一個ResultSet對象。

  ResultSet rs=stmt.executeQuery(sql);執行完這步後rs中已經取得了test表所有的數據,那麼接下來要展現在網頁上。7、rs.next()對你取得的記錄集做一個循環直到沒有值為止,rs.getString(1)代表你test表中的第一個字段rs.getString(2)代表你test中的第二個字段,如果還有更多字段可以繼續rs.getString(3)..rs.getString(N) while(rs.next()) {%

您的第一個字段內容為:%=rs.getString(1)%

您的第二個字段內容為:%=rs.getString(2)%

%}%8、當所有數據展現完畢,調用close()方法將所有資源關閉。 rs.close();

stmt.close();

conn.close();回顧下大致過程:加載驅動 Class.forName();定義好相關的數據,調用DriverManager.getConnection(driver,user,password)獲得一個數據庫連接conn通過conn創建Statement對象stmt,conn.createStatement();通過stmt執行定義好的sql語句獲得數據集ResultSet rs=stmt.executeQuery(“select * from test”);通過rs.next()方法循環遍曆數據集的數據,通過rs.getString(1)獲得第一條數據的第一個字段內容,這裡要注意的是getString是對應數據庫是字符類型,如果test表的第一個字段不是字符類型則用rs.getInt(1)獲得。展現完畢後關閉所有資源conn stmt rs close方法。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237940.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:08
下一篇 2024-12-12 12:08

相關推薦

  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28

發表回復

登錄後才能評論