導航:首頁 > 編程語言 > java資料庫操作類

java資料庫操作類

發布時間:2022-05-19 18:36:40

java 多線程操作資料庫

//將資料庫中的數據條數分段
publicvoiddivision(){
//獲取要導入的總的數據條數
Stringsql3="SELECTcount(*)FROM[CMD].[dbo].[my1]";
try{
pss=cons.prepareStatement(sql3);
rss=pss.executeQuery();

while(rss.next()){
System.out.println("總記錄條數:"+rss.getInt(1));
sum=rss.getInt(1);
}
//每30000條記錄作為一個分割點
if(sum>=30000){
n=sum/30000;
resie=sum%30000;
}else{
resie=sum;
}

System.out.println(n+""+resie);

}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}
線程類
publicMyThread(intstart,intend){
this.end=end;
this.start=start;
System.out.println("處理掉余數");
try{

System.out.println("--------"+Thread.currentThread().getName()+"------------");
Class.forName(SQLSERVERDRIVER);
System.out.println("載入sqlserver驅動...");
cons=DriverManager.getConnection(CONTENTS,UNS,UPS);
stas=cons.createStatement();
System.out.println("連接SQLServer資料庫成功!!");

System.out.println("載入mysql驅動.....");
Class.forName(MYSQLDRIVER);
con=DriverManager.getConnection(CONTENT,UN,UP);
sta=con.createStatement();
//關閉事務自動提交
con.setAutoCommit(false);
System.out.println("連接mysql資料庫成功!!");

}catch(Exceptione){
e.printStackTrace();
}
//TODOAuto-generatedconstructorstub
}


publicArrayList<Member>getAll(){
Membermember;
Stringsql1="select*from(selectrow_number()over(orderbypmcode)asrowNum,*"+
"from[CMD].[dbo].[my1])astwhererowNumbetween"+start+"and"+end;
try{
System.out.println("正在獲取數據...");
allmembers=newArrayList();
rss=stas.executeQuery(sql1);
while(rss.next()){
member=newMember();
member.setAddress1(rss.getString("address1"));
member.setBnpoints(rss.getString("bnpoints"));
member.setDbno(rss.getString("dbno"));
member.setExpiry(rss.getString("expiry"));
member.setHispoints(rss.getString("hispoints"));
member.setKypoints(rss.getString("kypoints"));
member.setLevels(rss.getString("levels"));
member.setNames(rss.getString("names"));
member.setPmcode(rss.getString("pmcode"));
member.setRemark(rss.getString("remark"));
member.setSex(rss.getString("sex"));
member.setTelephone(rss.getString("telephone"));
member.setWxno(rss.getString("wxno"));
member.setPmdate(rss.getString("pmdate"));
allmembers.add(member);
//System.out.println(member.getNames());
}
System.out.println("成功獲取sqlserver資料庫數據!");
returnallmembers;

}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.out.println("獲取sqlserver資料庫數據發送異常!");
e.printStackTrace();
}
try{
rss.close();
stas.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnnull;
}

publicvoidinputAll(ArrayList<Member>allmembers){
System.out.println("開始向mysql中寫入");
Stringsql2="insertintotest.my2values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try{
ps=con.prepareStatement(sql2);
System.out.println("-------------------------等待寫入數據條數:"+allmembers.size());
for(inti=0;i<allmembers.size();i++){
ps.setString(1,allmembers.get(i).getPmcode());
ps.setString(2,allmembers.get(i).getNames());
//System.out.println(allmembers.get(i).getNames());
ps.setString(3,allmembers.get(i).getSex());
ps.setString(4,allmembers.get(i).getTelephone());
ps.setString(5,allmembers.get(i).getAddress1());
ps.setString(6,allmembers.get(i).getPmdate());
ps.setString(7,allmembers.get(i).getExpiry());
ps.setString(8,allmembers.get(i).getLevels());
ps.setString(9,allmembers.get(i).getDbno());
ps.setString(10,allmembers.get(i).getHispoints());
ps.setString(11,allmembers.get(i).getBnpoints());
ps.setString(12,allmembers.get(i).getKypoints());
ps.setString(13,allmembers.get(i).getWxno());
ps.setString(14,allmembers.get(i).getRemark());
//插入命令列表
//ps.addBatch();
ps.executeUpdate();
}
//ps.executeBatch();
con.commit();

ps.close();
con.close();
this.flag=false;
System.out.println(Thread.currentThread().getName()+"--->OK");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.out.println("向mysql中更新數據時發生異常!");
e.printStackTrace();
}
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true&&flag){
this.inputAll(getAll());
}
}

Ⅱ java中對資料庫的操作Statement和PrepareStatement這兩個方法有什麼不同它們是一個類還是一個方法

它們是JDBC提供的類:statement 與preparestatement 區別 1.
PreparedStatement對象不僅包含了SQL語句,而且大多數情況下這個語句已經被預編譯過,因而當其執行時,只需DBMS運行SQL語句,而不必先編譯。當你需要執行Statement對象多次的時候,PreparedStatement對象將會大大降低運行時間,當然也加快了訪問資料庫的速度。這種轉換也給你帶來很大的便利,不必重復SQL語句的句法,而只需要更改其中變數的值,便可重新執行SQL語句。選擇 PreParedStatement對象與否,在於相同的句法的SQL語句是否執行了多次,而且兩次之間的差別僅僅是變數不同,如果僅僅執行了一次的話,它應該和普通的對象毫無差異,體現不出她預編譯的優越性。 2.prepareStatement是把你的sql語句預先「編譯」好,每次只替換定義的變數,
他的作用是減少與資料庫的通信量,從而加快執行速度,主要用在循環執行SQL語句 3.
prepareStatement已經予編譯,速度比Statement快些
prepareStatement解決有關特殊字元插入到資料庫的問題。如(',",),?) 4.
Statement ─ 由方法 createStatement 所創建。Statement 對象用於發送簡單的 SQL 語句。
PreparedStatement ─ 由方法 prepareStatement 所創建。PreparedStatement 對象用於發送帶有一個或多個輸入參數( IN 參數)的 SQL 語句。PreparedStatement 擁有一組方法,用於設置 IN 參數的值。執行語句時,這些 IN 參數將被送到資料庫中。PreparedStatement 的實例擴展了 Statement ,因此它們都包括了 Statement 的方法。PreparedStatement 對象有可能比 Statement 對象的效率更高,因為它已被預編譯過並存放在那以供將來使用。
CallableStatement ─ 由方法 prepareCall 所創建。CallableStatement 對象用於執行 SQL 儲存程序 ─ 一組可通過名稱來調用(就象函數的調用那樣)的 SQL 語句。CallableStatement 對象從 PreparedStatement 中繼承了用於處理 IN 參數的方法,而且還增加了用於處理 OUT 參數和 INOUT 參數的方法。

以下所列提供的方法可以快速決定應用哪個 Connection 方法來創建不同類型的 SQL 語句:

createStatement 方法用於:

簡單的 SQL 語句(不帶參數)

prepareStatement 方法用於:

帶一個或多個 IN 參數的 SQL 語句

經常被執行的簡單 SQL 語句

prepareCall 方法用於:
調用已儲存過程 Statement用法 stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')"); prepareStatement用法
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();
Statement沒有設置緩存,prepareStatement有,並且一次性可以插入n個數據 利用PreparedStatement對象提高資料庫的總體效率
在使用PreparedStatement對象執行SQL命令時,命令被資料庫進行解析和編譯,然後被放到命令緩沖區。然後,每當執行同一個 PreparedStatement對象時,它就會被再解析一次,但不會被再次編譯。在緩沖區中可以發現預編譯的命令,並且可以重新使用。在有大量用戶的企業級應用軟體中,經常會重復執行相同的SQL命令,使用PreparedStatement對象帶來的編譯次數的減少能夠提高資料庫的總體性能。如果不是在客戶端創建、預備、執行PreparedStatement任務需要的時間長於Statement任務,我會建議在除動態SQL命令之外的所有情況下使用PreparedStatement對象

Ⅲ JAVA用實現類操作資料庫有點不好懂····我是初學者、求高手講解講解

我給你一個oracle的JDBC驅動的簡單的例子吧:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class TestOracle { public static Connection dbConn; public static void main(String[] srg) { String driverName = "oracle.jdbc.driver.OracleDriver"; // 載入JDBC驅動 // String dbURL = // "jdbc:sqlserver://192.168.216.222:1500; DatabaseName=HYData"; // //連接伺服器和資料庫test String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = fengwei)))"; // 連接伺服器和資料庫test String userName = "lygtaxi"; // 默認用戶名 String userPwd = "lygtaxi"; // 安裝sql server 2005時的密碼 try { Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); // 如果連接成功 // 控制台輸出Connection myQueue();// Successful! } catch (Exception e) { e.printStackTrace(); } } // 查詢方法 public static List<Procts> myQueue() { List<Procts> list = new ArrayList<Procts>(); String sql = "select XXX,YYY from AAA"; Statement stm; try { stm = dbConn.createStatement(); ResultSet rs = stm.executeQuery(sql); System.out.println("OKOKOK:"); while (rs.next()) { Procts p = new Procts(); //p.setProctName(rs.getString("LSCHB_SSDW")); //p.setUnitPrice(rs.getString("LSCHB_CPH")); System.out.println("rs.getString(\"XXX\"):"+rs.getString("XXX")); System.out.println("rs.getString(\"YYY\"):"+rs.getString("YYY")); list.add(p); } } catch (SQLException e) { e.printStackTrace(); } finally{ try { //stm.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return list; } }

連接資料庫的時候需要驅動,我給的測試代碼中已經給出。
同時需要驅動包ojdbc14.jar

Ⅳ java連接資料庫(mysql)寫入和讀取的類怎麼寫,請帶詳細注釋



importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.Statement;

public class InsertDemo01{

//定義MySQL的資料庫驅動程序

public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;

//定義MySQL資料庫的連接地址

public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;

//MySQL資料庫的連接用戶名

public static final String DBUSER = "root" ;

//MySQL資料庫的連接密碼

public static final String DBPASS = "mysqladmin" ;

public static void main(Stringargs[]) throws Exception {//所有的異常拋出

Connectionconn= null ;//資料庫連接

Statement stmt = null ;//資料庫操作

Class.forName(DBDRIVER) ;//載入驅動程序

Stringsql= "INSERT INTO user(name,password,age,sex,birthday) "+

" VALUES ('李興華','www.mldn.cn',30,'男','2008-08-27')" ;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;

stmt =conn.createStatement() ;//實例化Statement對象

stmt.executeUpdate(sql) ;//執行資料庫更新操作

stmt.close() ;//關閉操作

conn.close() ;//資料庫關閉

}

};


Ⅳ java程序是怎麼操作資料庫的(高分懸賞)

Java 實現連接sql server 20002007-12-16 13:28:00.0
第一種:通過ODBC連接資料庫

JAVA語言的跨平台的工作能力(Write Once ,Run Anywhere)、優秀的圖像處理能力(我相信現在沒有那種語言可以超過JAVA在網路上的圖形處理能力)、網路通信功能、通過JDBC資料庫訪問技術等等,讓我們誰都不可否認JAVA語言是SUN公司對於計算機界的一個巨大的貢獻。筆者可以描述這樣一個場景:有一天你上網完全可以不用IE 或者NETSCAPE,上網就像是玩游戲,你可以獲得游戲那麼精美的圖像和互動的感覺,如果你玩過UO,也許你就知道那種感覺了,但是JAVA做成的東西一定會超過UO的,因為不單單是游戲,也不是單單是瀏覽器,如果你願意(要你有錢,有時間,有優秀的JAVA人才)你可以把所有的這一切用Java完全集成出來!!!我不是誇大JAVA的功能,大家可以訪問一下http://www.simchina.net的那個社區程序,你就能找到一種感覺了:相信我沒有說什麼假話 。好了,不說廢話了,現在我向你介紹JAVA的資料庫訪問技術----JDBC資料庫訪問技術(你可千萬不要搞成ODBC了喲!)。

JDBC技術事實上是一種能通過JAVA語言訪問任何結構化資料庫的應用程序介面(API)(Sun這樣說的,我也不知道是不是真的),而且現在的JDBC 3.0據Sun說也能訪問Execel等電子表格程序!

JDBC對於資料庫的訪問有四種方式,我們這里只是介紹兩種:

第一種是通過ODBC做為「橋」(Bridge)對資料庫訪問,第二種是直接對資料庫訪問。

我們先來看看第一種JDBC<-->ODBC訪問的流程:

JDBC Driver Mannager->JDBC<->ODBC橋->ODBC->資料庫客戶機驅動庫->資料庫伺服器->返回查詢結果,在這種訪問中值的我們注意的是雖然JAVA是"Write Once ,Run Anywhere",但是如果通過這種訪問的話,需要客戶端必須設置ODBC和有相應的資料庫客戶機的驅動,當你看了下面的另外一個流程的時候或許你會想:明明下一種更方面,為什麼還要有這個東西的產生!呵呵,因為,未必所有的資料庫伺服器提供商都提供下面的JDBC驅動程序(給JDBC訪問提供相應的介面),所以就有了JDBC<->ODBC Bridge。

接著再讓我們來看看第二種訪問流程:

JDBC Driver Mannager->局部JDBC驅動->客戶端資料庫->資料庫伺服器->返回查詢結果,這種訪問事實上是轉換JDBC調用為相應的資料庫(Oracle, Sybase, Informix, DB2, 和其他的資料庫資料庫管理系統)的客戶端API調用(這么說,不知道大家能不能懂,說簡單點就好像ASP不是通過DSN對資料庫訪問而是通過OLEDB訪問,說道這里我還是不知道大家能不能明白我的意思。哎呀,不要扔雞蛋嘛!),這種方式的訪問需要相應的資料庫提供商提供相應的JDBC驅動程序,但是有一種好處,可以獨立於odbc用於可以隨處可Run的客戶端的瀏覽器中的Applet程序。
我們下面將給大家一個通過JDBC-ODBC橋資料庫訪問的實例,但是在看下面的事例前我想問大家一次:JDK1.3裝了嗎?資料庫驅動裝了嗎(我使用的是SQLserver)?你該沒有使用Linux吧?雖然java支持Linux,但是老兄我可沒有使用Linux喲(這同JAVA的Write Once ,Run Anywhere沒有關系),由於使用了運行於Win下面的ODBC,我建議你看看這篇東西http://www.aspcn.com/showarticle.asp?id=112,否則你要是有了問題,出不了結果那豈不是要怪我(不過欲加之罪,何患無吃... ...),冤枉呀!

哎呀,說了這么多的廢話,還是讓我們來看看到底JDBC的調用吧!既然我們是通過odbc訪問資料庫,所以這個odbc是跑不了的,我們先來設置你的odbc:打開你的odbc數據源->選擇系統dsn(Click加新的dsn-)->接下來輸入選擇資料庫類型、輸入dsn名:、選擇伺服器、連接資料庫的方式、輸入資料庫的登陸用戶和密碼->測試連接,如果測試成功的話,那麼你的dsn就建立好了,我的dsn名為Sqlserver.使用的是sqlserver7.0,以 「sa」登陸,密碼為空。這些東西都是後面要用道的!

好了下面讓我們來看程序代碼: (該代碼已經通過運行)
//###########################################################
//代碼開始
//###########################################################

import java.sql.*;
//載入java數據連接包,java基本所有的資料庫的調用的都在這個東西裡面

public class InsertCoffees {

public static void main(String args[]) {

String url = "jdbc:odbc:sqlserver";
//取得連接的url名,注意sqlserver是dsn名
Connection con;
//實例化一個Connection對象
Statement stmt;
String query = "select * from col_link";
//選擇所有的Col_link表中的數據輸出

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//載入jdbc-odbc橋驅動

} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
//載入jdbc-odbc橋錯誤
System.err.println(e.getMessage());
//其他錯誤
}

try {

con = DriverManager.getConnection(url, "sa", "");
//資料庫連接

stmt = con.createStatement();
//Create 一個聲明
stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) ");
//執行了一個sql語句生成了一個表col_link的表
stmt.executeUpdate("insert into col_link values('ASP中華網','http://www.aspcn.com')");
stmt.executeUpdate("insert into col_link values('永遠到底有多遠','http://xuankong.com')");
//執行一個insert into語句
stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'");
//執行一個update語句,更新資料庫
ResultSet rs = stmt.executeQuery(query);
//返回一個結果集
System.out.println("Col_link表中的數據如下(原始數據)");
//下面的語句使用了一個while循環列印出了col_link表中的所有的數據
System.out.println("站點名 "+" "+"站點地址");
System.out.println("---------------"+" "+"----------------");
while (rs.next()) {
String s = rs.getString("sitename");
String f = rs.getString("siteurl");
//取得資料庫中的數據
System.out.println(s + " " + f);
/*String t = rs.getString(1);
String l = rs.getString(2);
System.out.println(t + " " + l);*/
/*jdbc提供了兩種方法識別欄位,一種是使用getXXX(注意這里的getXXX表示取不同類型欄位的不同的方法)獲得欄位名,
第二種*是通過欄位索引,在這里我把第二種方法注釋了*/
/*你可以訪問這個連接獲得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/
}
stmt.close();
con.close();
//上面的語句關閉聲明和連接
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
//顯示資料庫連接錯誤或者查詢錯誤
}
}
}
//###########################################################
//代碼結束
//###########################################################

在上面這個程序中我想你展示了如何使用JDBC-ODBC連接資料庫,使用SQL語句生成一個表,使用SELECT、INSERT 、UPDATE語句取的、插入和更新一個表中的數據,如何通過欄位名和欄位索引訪問資料庫中的東東!我希望你能從上面的代碼真正的學習到一些東西!

發揮你的想像力,設想一下JAVA到底,比如說可以通過資料庫做一個不需要GUI(圖形用戶界面)的聊天室,呵呵,感覺起來就像在DOS環境下打字的聊天室!哈哈!

最後需要說的是筆者的調試上面程序的環境:WIN2000 , JDK1.3,MS SQLSERVER編輯軟體:EDITPLUS 2.01a(這最後的東西可不是廢話,雖然早就了一些專業的JAVA開發工具,但是筆者建議JAVA初學者使用文本軟體開發JAVA程序)

第二種:直接用jdbc訪問資料庫

(1) 該實例已經運行通過

jsp連接Sql Server7.0/2000資料庫
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>

(2)java訪問sqlserver伺服器

第一步:安裝jdbc

點擊SQL Server for JDBC驅動程序安裝程序setup.exe(可以到微軟網站下載 http://msdn.microsoft.com/library/default.asp?rul=/downloads/list/sqlserver.asp下載)

第二步:設置系統變數classpath

假設SQL Server for JDBC 驅動程序安裝在d:\jdbc\,則classpath應該設置如下:

classpath:=.;…;d:\jdbc\lib; d:\jdbc\lib\mssqlserver.jar; d:\jdbc\lib\msutil.jar; d:\jdbc\lib\msbase.jar;

注意:設置時要在最前面的點號和分號

第三步:編輯java程序並且運行

實例1如下:

//import com.microsoft.*;

//注意:在java與sql server 連接時不需要這個包,其他書上說這個包是必需的,這個問題有待進一步討論

import java.sql.*;

import java.net.URL;

class insert

{

public static void main(String[] args)

{

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=northwind";

String query="select * from categories";

String query1="insert categories values(10,'Hanbao','Sweet')";

String query2="insert categories values(11,'Naicha','Coffee taste')";

try

{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

Connection con=DriverManager.getConnection(url,"sa","739555");

Statement stmt=con.createStatement();

stmt.executeUpdate(query1);

stmt.executeUpdate(query2);

stmt.close();

con.close();

}

catch(SQLException ex)

{

}

catch(java.lang.Exception ex)

{

ex.printStackTrace();

}

}

}

實例2如下:

//import com.microsoft.*;

//注意:在java與sql server 連接時不需要這個包,其他書上說這個包是必需的,這個問題有待進一步討論

import java.sql.*;

import java.net.URL;

class java2sqlserver

{

public static void main(String[] args)

{

String url="jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=739555;DatabaseName=northwind";

String query="Select * From Categories";

try

{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//DriverManager.setLogStream(System.out);

Connection con=DriverManager.getConnection(url);

checkForWarning(con.getWarnings());

Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery(query);

dispResultSet(rs);

rs.close();

stmt.close();

con.close();

}

catch(SQLException ex)

{

System.out.println(ex.toString()+"----SQLException caught----");

while(ex!=null)

{

System.out.print("SQLState:"+ex.getSQLState());

System.out.print("Message:"+ex.getMessage());

System.out.print("Vendor:"+ex.getErrorCode());

ex=ex.getNextException();

System.out.println("");

}

}

catch(java.lang.Exception ex)

{

ex.printStackTrace();

}

}

private static boolean checkForWarning(SQLWarning warn)

{

boolean rc=false;

if(warn!=null)

{

System.out.println("----Warning----");

rc=true;

while(warn!=null)

{

System.out.print("SQLState:"+warn.getSQLState());

System.out.print("Message:"+warn.getMessage());

System.out.print("Vendor:"+warn.getErrorCode());

System.out.println("");

warn=warn.getNextWarning();

}

}

return rc;

}

private static void dispResultSet(ResultSet rs) throws SQLException

{

int i;

ResultSetMetaData rsmd=rs.getMetaData();

int numCols=rsmd.getColumnCount();

for(i=1;i<=numCols;i++)

{

if(i>1) System.out.print(", ");

System.out.print(rsmd.getColumnLabel(i));

}

System.out.println("");

boolean more=rs.next();

while(more)

{

for(i=1;i<numCols;i++)

{

if(i<1) System.out.print(", ");

System.out.println(rs.getString(i));

}

System.out.println("");

more=rs.next();

}

}

//System.out.println("Hello World!");

}

以上兩個實例筆者已經通過運行!

Ⅵ Java中對資料庫操作實例

可以以普通的jdbc連接的使用習慣來使用連接池。 資料庫連接池在編寫應用服務是經常需要用到的模塊,太過頻繁的連接資料庫對服務性能來講是一個瓶頸,使用緩沖池技術可以來消除這個瓶頸。我們可以在互聯網上找到很多關於資料庫連接池的源程序,但是都發現這樣一個共同的問題:這些連接池的實現方法都不同程度地增加了與使用者之間的耦合度。很多的連接池都要求用戶通過其規定的方法獲取資料庫的連接,這一點我們可以理解,畢竟目前所有的應用伺服器取資料庫連接的方式都是這種方式實現的。但是另外一個共同的問題是,它們同時不允許使用者顯式的調用Connection.close()方法,而需要用其規定的一個方法來關閉連接。這種做法有兩個缺點:第一:改變了用戶使用習慣,增加了用戶的使用難度。首先我們來看看一個正常的資料庫操作過程:int executeSQL(String sql) throws SQLExceptionfinallycatch(Exception e)catch(Exception e)return res;}使用者在用完資料庫連接後通常是直接調用連接的方法close來釋放資料庫資源,如果用我們前面提到的連接池的實現方法,那語句conn.close()將被某些特定的語句所替代。第二:使連接池無法對之中的所有連接進行獨占控制。由於連接池不允許用戶直接調用連接的close方法,一旦使用者在使用的過程中由於習慣問題直接關閉了資料庫連接,那麼連接池將無法正常維護所有連接的狀態,考慮連接池和應用由不同開發人員實現時這種問題更容易出現。綜合上面提到的兩個問題,我們來討論一下如何解決這兩個要命的問題。首先我們先設身處地的考慮一下用戶是想怎麼樣來使用這個資料庫連接池的。用戶可以通過特定的方法來獲取資料庫的連接,同時這個連接的類型應該是標準的java.sql.Connection。用戶在獲取到這個資料庫連接後可以對這個連接進行任意的操作,包括關閉連接等。通過對用戶使用的描述,怎樣可以接管Connection.close方法就成了我們這篇文章的主題。為了接管資料庫連接的close方法,我們應該有一種類似於鉤子的機制。例如在Windows編程中我們可以利用Hook API來實現對某個Windows API的接管。在JAVA中同樣也有這樣一個機制。JAVA提供了一個Proxy類和一個InvocationHandler,這兩個類都在java.lang.reflect包中。我們先來看看SUN公司提供的文檔是怎麼描述這兩個類的。public interface is the interface implemented by the invocation handler of a proxy instance. Each proxy instance has an associated invocation handler. When a method is invoked on a proxy instance, the method invocation is encoded and dispatched to the invoke method of its invocation handler.SUN的API文檔中關於Proxy的描述很多,這里就不羅列出來。通過文檔對介面InvocationHandler的描述我們可以看到當調用一個Proxy實例的方法時會觸發Invocationhanlder的invoke方法。從JAVA的文檔中我們也同時了解到這種動態代理機制只能接管介面的方法,而對一般的類無效,考慮到java.sql.Connection本身也是一個介面由此就找到了解決如何接管close方法的出路。首先,我們先定義一個資料庫連接池參數的類,定義了資料庫的JDBC驅動程序類名,連接的URL以及用戶名口令等等一些信息,該類是用於初始化連接池的參數,具體定義如下:public class ConnectionParam implements Serializable /** * 從連接池工廠中獲取指定名稱對應的連接池

Ⅶ java中使用JDBC完成資料庫操作的基本步驟是什麼

創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}

Ⅷ java,怎麼把對資料庫的操作封裝到資料庫鏈接的類中,方便使用到操作的時候直接調用

盡量使用PreparedStatement ,可以做到一定的封裝。。。。。。如果想完美封裝,使用 mybatis或hibernate這樣的框架 ~~~~~~~

Ⅸ 在Java中如何對資料庫中的數據進行操作

package com.;import java.sql.*;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;public class BaseDao {
/**
* 創建資料庫連接及關閉
*/
// 打開連接
public static Connection getConnection() {
Connection con = null; /*************************** oracl 的連接 ***************************************/
// try { // Class.forName("oracle.jdbc.driver.OracleDriver");
// con = DriverManager.getConnection(
// "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "bbs", "sa");
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
/******************************* sqlerver 的連接 ******************************/
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(
"jdbc:sqlserver://127.0.0.1:1433;databasename=bbs", "sa",
"zhou");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
/*********************************************************************/
return con;
} // 關閉
public static void closeAll(Connection connection,
PreparedStatement pStatement, ResultSet res) {
try {
if (connection != null && (!connection.isClosed())) {
connection.close();
}
if (res != null) {
res.close();
res = null;
}
if (pStatement != null) {
pStatement.close();
pStatement = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
對資料庫增刪改查package com.;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import com.entity.News;public class NewsDao {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

/**
* 添加新聞
* @param news
* @return
*/
public boolean newsAdd(News news){
boolean result=false;
String sql="insert into news values(?,?)";
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement(sql);
pstmt.setString(1, news.getContent());
pstmt.setString(2, FormatTime.newTime());

int i = 0;
i = pstmt.executeUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* 修改新聞
* @param news
* @return
*/
public boolean updateNews(News news){
boolean result=false;
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement("update news set content=? ,writedate=? where newsid=?");
pstmt.setString(1, news.getContent());
pstmt.setString(2, FormatTime.newTime());
pstmt.setInt(3, news.getNewsID());
int i = 0;
i = pstmt.executeUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* 刪除新聞
* @param news
* @return
*/
public boolean deleteNews(News news){
boolean result=false;
String sql=String.format("delete from news where newsid=%d", news.getNewsID());
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement(sql);

int i = 0;
i = pstmt.executeUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

/**
* 刪除新聞 重載
* @param newsId
* @return
*/
public boolean deleteNews(int newsId){
boolean result=false;
String sql=String.format("delete from news where newsid=%d", newsId);
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement(sql);
int i = 0;
i = pstmt.executeUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* 查詢所有的新聞
* @return
*/
public List<News> selectAllNews(){
List<News> list=new ArrayList<News>();
String sql="select * from Users";
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
News news=new News();
news.setNewsID(rs.getInt(1));
news.setContent(rs.getString(2));
news.setWriteDate(rs.getString(3));

list.add(news);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, pstmt, con);
}
return list;
}
/**
* 查詢單個
* @return
*/
public News selectOneNews(){
News news=new News();
con=BaseDao.getConnection();
try {
pstmt=con.prepareStatement("select top 1 * from news order by newsid desc");
rs=pstmt.executeQuery();
while(rs.next()){
news.setNewsID(rs.getInt(1));
news.setContent(rs.getString(2));
news.setWriteDate(rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, pstmt, con);
}
return news;
}

}
實體類package com.entity;import java.io.Serializable;
public class News implements Serializable{
private int newsID;
private String content;
private String writeDate; public News() {
super();
// TODO Auto-generated constructor stub
} public News(String content, String writeDate) {
super();
this.content = content;
this.writeDate = writeDate;
} public News(int newsID, String content, String writeDate) {
super();
this.newsID = newsID;
this.content = content;
this.writeDate = writeDate;
} public int getNewsID() {
return newsID;
} public void setNewsID(int newsID) {
this.newsID = newsID;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public String getWriteDate() {
return writeDate;
} public void setWriteDate(String writeDate) {
this.writeDate = writeDate;
}
}

Ⅹ java操作資料庫的方式有哪些

JDBC是java資料庫連接技術的簡稱,它提供了連接各種資料庫的能力,這便使程序的可維護性和可擴展性大大的提高了.JDBC連接資料庫常見的驅動方式有兩種,一種是jdbc-odbc即橋連另外一種是純java驅動.一般在做java開發的時候用第二種.so前一種我就不說了,純java驅動方式連接步驟如下:

1.先把一個jdbc的jar包導入到項目(用MyEclipse開發)的lib中.

2.代碼如下:

[c-sharp]view plain

閱讀全文

與java資料庫操作類相關的資料

熱點內容
python導出sap 瀏覽:513
車智匯app如何下載 瀏覽:434
python如何將圖片輸出到雲伺服器 瀏覽:838
貴陽螺桿壓縮冷凝機組組成 瀏覽:115
掃描製作pdf 瀏覽:515
2016奇駿車機如何安裝app 瀏覽:764
phpvc9x64 瀏覽:73
蜜語星球解壓 瀏覽:476
c語言編譯器怎麼打不開 瀏覽:818
海印程序員 瀏覽:648
為什麼華為手機找不到伺服器 瀏覽:664
pdf增減 瀏覽:608
雲伺服器怎麼公網架設網站 瀏覽:91
pythonrequests慢 瀏覽:140
excel保存沒有pdf 瀏覽:922
冰箱壓縮機管囗示意圖 瀏覽:497
許振民編譯局 瀏覽:625
雙網路加什麼伺服器好用 瀏覽:211
linux命令中文 瀏覽:839
python怎麼做物聯網 瀏覽:731