亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDBC案例演示,供參考

2019-11-11 07:49:36
字體:
來源:轉載
供稿:網友

在這寫一下JDBC的案例,將JDBC的一些功能演示下,供參考,至于實體類在此我就不寫出來了,大家根據需求不同記得導入對應的驅動包到項目中,我這里演示的是以MySQL為例,其實區別都不大,如有不對的地方歡迎糾正。

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import com.mysql.jdbc.PReparedStatement;import java.sql.ResultSet;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.Clob;import java.sql.DatabaseMetaData;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Savepoint;public class JDBCDemo { // 數據庫地址 localhost表示本地, //3306是mysql默認的端口,db_bank是要鏈接的數據庫 private static String dbUrl="jdbc:mysql://localhost:3306/db_bank"; // 用戶名 private static String dbUserName="root"; // 密碼 private static String dbPassWord="123456"; // 驅動名稱 這里是mysql驅動 private static String jdbcName="com.mysql.jdbc.Driver"; //靜態塊,最優先執行 static{ try{ Class.forName(jdbcName);//加載驅動 }catch(Exception e){ e.printStackTrace();//打印錯誤信息 } } /** * 獲取數據庫連接 * @return * @throws Exception */ public static Connection getCon()throws Exception{ //獲取數據庫鏈接 Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword); return con; } /** * 關閉數據庫連接 * @param con * @param sta * @param rs * @throws Exception */ public static void close(Connection conn,Statement sta,ResultSet rs){ try{ if(rs!=null){ rs.close();//關閉ResultSet } if(sta!=null){ sta.close();//關閉Statement } if(conn!=null){ conn.close();//關閉Connection } }catch(Exception e){ e.printStackTrace();//打印異常信息 } } /** * 新增演示[添加圖書] * @param book 要新增的圖書對象 * @return 返回受影響的行數 * @throws Exception */ private int addBook(Book book)throws Exception{ Connection con=getCon();//得到數據庫鏈接 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, book.getBookName()); // 設置圖書名稱 pstmt.setFloat(2, book.getPrice()); // 設置圖書價格 pstmt.setString(3, book.getAuthor()); // 設置圖書作者 pstmt.setInt(4, book.getBookTypeId()); // 設置圖書類型Id //--------- 大數據字符集 -------------- InputStream inputStream=new FileInputStream(new File("c:/hello.text"));//得到輸入流 //大數據類型,設置圖書內容, //這里演示mysql數據庫類型是longtext pstmt.setAsciiStream(5,inputStream,context.length()); //----大數據二進制,一般存儲圖片,視頻,音頻等 ---- //將圖片轉為輸入流 InputStream inputStream2=new FileInputStream(new File("c:/a.jpg")); //大數據類型,設置封面圖片, //這里演示mysql數據庫類型是longblod pstmt.setBinaryStream(6, inputStream2, pic.length()); //執行并返回受影響的行數 int result=pstmt.executeUpdate(); if(result>0){//大于0表示新增成功 //獲取生成器 ResultSet rs=pstmt.getGeneratedKeys(); if(rs.next()){//判斷是否有值 //得到新增數據后的主鍵值 int key=rs.getInt(1); } } close(con,pstmt,null);//關閉連接 return result; } /** * 修改演示[更新圖書] * @param book 要修改的圖書對象 * @return 返回受影響的行數 * @throws Exception */ private int updateBook(Book book)throws Exception{ Connection con=getCon();//得到數據庫鏈接 //新增語句 String sql="update t_book set bookName=?,price=?,author=?,bookTypeId=? where id=?"; //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, book.getBookName());//設置圖書名稱 pstmt.setFloat(2, book.getPrice());//設置圖書價格 pstmt.setString(3, book.getAuthor());//設置圖書作者 pstmt.setInt(4, book.getBookTypeId());//設置圖書類型Id pstmt.setInt(5, book.getId());//設置要修改的圖書id //執行修改并返回受影響的行數 int result=pstmt.executeUpdate(); close(con,pstmt,null);//關閉連接 return result; } /** * 刪除演示[刪除圖書] * @param id 要刪除的圖書id * @return 返回受影響的行數 * @throws Exception */ private int deleteBook(int id)throws Exception{ Connection con=getCon();//得到數據庫鏈接 String sql="delete from t_book where id=?";//刪除語句 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, id);//設置要刪除的圖書id //執行刪除并返回受影響的行數 int result=pstmt.executeUpdate(); close(con,pstmt,null);//關閉連接 return result; } /** * 查詢演示[查詢所有圖書] * @return 返回list集合 * @throws Exception */ private List<Book> listBook()throws Exception{ List<Book> bookList=new ArrayList<Book>(); Connection con = getCon(); //得到數據庫鏈接 String sql = "select * from t_book";//查詢語句 //得到PreparedStatement對象 PreparedStatement pstmt = con.prepareStatement(sql); //執行并返回結果集ResultSet ResultSet rs = pstmt.executeQuery(); while (rs.next()) {//遍歷結果集rs.next()返回true表示有數據 int id = rs.getInt("id"); // 獲取編號id String bookName = rs.getString("bookName"); // 獲取圖書名稱 bookName float price = rs.getFloat("price"); // 獲取圖書價格 price String author = rs.getString("author"); // 獲取圖書作者 author int bookTypeId = rs.getInt("bookTypeId"); // 獲取圖書類別id //---- 大數據字符集,一般存儲大文本等內容 ---- //大數據類型,獲取圖書內容, //這里演示mysql數據庫類型是longtext Clob c=rs.getClob("context"); //轉為字符串 String context=c.getSubString(1, (int)c.length()); //---大數據二進制,一般存儲圖片,視頻,音頻等 ------- //創建一個輸出流, //將數據庫中的封面圖片保存到該路徑中c:/pic.jpg FileOutputStream out=new FileOutputStream(new File("c:/pic.jpg")); //大數據類型,獲取封面圖片, //這里演示mysql數據庫類型是longblod out.write(b.getBytes(1,(int)b.length())); Book book=new Book(id,bookName,price, author,bookTypeId);//封裝圖書對象 bookList.add(book);//將圖書對象保存集合中 } close(con,pstmt,rs);//關閉連接 return bookList; } /** * JDBC調用存儲過程演示 * 數據庫中有一個存儲過程為 pro_getBookNameById * 該存儲過程功能是通過編號(id)查詢圖書名稱(bookName) * 該存儲過程中有分別有一個輸入參數 * 跟一個輸出參數(輸出參數名稱為 bN ) * @param id 圖書編號 * @return 返回圖書名稱 * @throws Exception */ private String getBookNameById(int id) throws Exception{ Connection con=getCon();// 獲取數據庫連接 //調用存儲過程語句,第一個為輸入參數, //第二個是輸出參數,輸出參數名稱是bN String sql="{CALL pro_getBookNameById(?,?)}"; //得到CallableStatement對象 CallableStatement cstmt=con.prepareCall(sql); cstmt.setInt(1, id);//設置第一個參數(即輸入參數) //設置返回類型(即輸出參數類型),指的是數據庫中的數據類型 cstmt.registerOutParameter(2, Types.VARCHAR); cstmt.execute();//執行 //獲取返回值(即輸出參數 bN ) String bookName=cstmt.getString("bN"); close(con,cstmt,null);//關閉連接 return bookName; } /** *元數據演示 */ public void demo () throws Exception { Connection con=getCon();//獲取數據庫鏈接對象 //---------- 元數據 ---------------- //獲取DatabaseMetaData對象 DatabaseMetaData dmd=con.getMetaData(); //dmd.getDatabaseProductName()獲取數據庫名稱 System.out.println("數據庫名稱:"+dmd.getDatabaseProductName()); //getDriverMajorVersion()得到數據庫大版本號, //dmd.getDriverMinorVersion()得到數據庫小版本號 System.out.println("數據庫版本:"+dmd.getDriverMajorVersion()+"."+dmd.getDriverMinorVersion()); String sql="select * from t_book";//查詢語句 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); // 獲取元數據列的總數(即有多少列(字段)) int num=rsmd.getColumnCount(); System.out.println("共有"+num+"列"); for(int i=1;i<=num;i++){ //rsmd.getColumnName(i)獲取第i列的列名稱(即字段名稱), //rsmd.getColumnTypeName(i)獲取第i列的數據類型 System.out.println(rsmd.getColumnName(i)+"," +rsmd.getColumnTypeName(i)); } } /** * *事務演示 **/ public static void main(String[] args) throws Exception { Connection con=null; Savepoint sp=null; try { con=getCon();//得到數據庫連接 //取消自動提交(將事務設置為手動提交) con.setAutoCommit(false); System.out.println("張三開始向李四轉賬!"); int account=500; outCount(con, "張三", account);//此處假設轉出賬操作 //演示:設置一個保存點(即數據庫的備份點) //sp=con.setSavepoint(); inCount(con, "李四", account);//此處假設轉入賬操作 System.out.println("轉賬成功!"); con.commit(); //提交事務 } catch (Exception e) { con.rollback(); //回滾事務 //con.rollback(sp);//回滾事務到sp保存點 e.printStackTrace();//打印錯誤信息 }finally{ con.close();//關閉連接 } } /** * 假設轉出操作 * @param con 數據庫連接 * @param accountName 賬戶 * @param account 金額 * @throws Exception */ private static void outCount(Connection con,String accountName,int account)throws Exception{ String sql="update t_account set accountBalance=accountBalance-account? where accountName=?";// PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } /** * 假設轉入操作 * @param con 數據庫連接 * @param accountName 賬戶 * @param account 金額 * @throws Exception */ private static void inCount(Connection con,String accountName,int account)throws Exception{ String sql="update t_account set account=accountBalance+account? where accountName=?"; PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品香蕉在线观看| 久久精品国产一区二区三区| 91av视频在线播放| 精品国产视频在线| 成人黄色激情网| 国产做受高潮69| 日韩大片免费观看视频播放| 久久亚洲私人国产精品va| 91精品在线播放| 欧美成人激情图片网| 亚洲精品aⅴ中文字幕乱码| 欧美成人精品三级在线观看| 色av吧综合网| 欧美激情免费看| 亚洲国产欧美一区二区三区同亚洲| 亚洲高清av在线| 久久久久久久亚洲精品| 亚洲最新av在线网站| 精品国产一区二区三区久久久| 国产精品偷伦免费视频观看的| 欧美男插女视频| 亚洲网址你懂得| 久久精品国产亚洲精品2020| 日韩一区二区三区xxxx| 91sa在线看| 国产精品久久久久久搜索| 欧美成人免费播放| 亚洲偷欧美偷国内偷| 有码中文亚洲精品| 国内久久久精品| 最新69国产成人精品视频免费| 日韩av电影手机在线| 久热爱精品视频线路一| 日韩免费精品视频| 亚洲成人动漫在线播放| 久久99精品久久久久久青青91| 久久99热精品| 亚洲国产精久久久久久久| 精品网站999www| 尤物九九久久国产精品的分类| 日韩乱码在线视频| 久久综合久中文字幕青草| 久久视频国产精品免费视频在线| 国产成人精品一区二区三区| 欧美激情国内偷拍| 日韩av电影免费观看高清| 国内外成人免费激情在线视频网站| 亚洲第一视频网| 亚洲精品av在线| 亚洲欧美在线免费观看| 亚洲美女中文字幕| 日韩免费在线播放| 欧美激情国产日韩精品一区18| 国产综合视频在线观看| 国产精品久久久久久亚洲影视| 久久久久久久久久久网站| 欧美日韩在线观看视频小说| 亚洲精品久久视频| 欧美日韩精品国产| 91理论片午午论夜理片久久| 久久久久久久激情视频| 亚洲第一视频网站| 国产午夜精品视频免费不卡69堂| 日韩av男人的天堂| 亚洲国产日韩欧美在线动漫| 国产日韩欧美一二三区| 国产精品电影在线观看| 日韩精品极品毛片系列视频| 欧美日本啪啪无遮挡网站| 日韩精品在线播放| 久久精品国产精品| 国产日韩av在线| 亚洲美女精品成人在线视频| 亚洲国产精品嫩草影院久久| 亚洲91精品在线| 2019中文字幕免费视频| 日本亚洲欧洲色| 日韩欧美在线字幕| 黄网站色欧美视频| 26uuu久久噜噜噜噜| 国产男女猛烈无遮挡91| 亚洲成人激情图| 国产亚洲精品美女久久久久| 国产91精品黑色丝袜高跟鞋| 91视频国产高清| 国产精品自拍偷拍| 国产欧美日韩丝袜精品一区| 久久免费在线观看| 日本一区二区三区在线播放| 国产精品www网站| 国产精品高清在线观看| 中文字幕日本欧美| 欧美精品18videosex性欧美| 日本精品一区二区三区在线| 久久天天躁狠狠躁夜夜躁2014| 亚洲人av在线影院| 色先锋资源久久综合5566| 国产精品久久久久久久电影| 欧美国产日韩在线| 国产欧美日韩免费看aⅴ视频| 91在线高清视频| 欧美精品久久久久a| 亚洲国产小视频在线观看| 亚洲精品一区二区三区婷婷月| 亚洲影视中文字幕| 亚洲欧美日韩一区二区三区在线| 一区二区三区无码高清视频| 亚洲国产成人精品电影| 久久久久久一区二区三区| 亚洲最新av在线| 亚洲激情电影中文字幕| 欧美丰满少妇xxxx| 欧美午夜视频在线观看| 亚洲第一视频网| 欧美日韩国产影院| 91视频免费在线| 91精品国产91久久| 亚洲精品视频免费| 久久99视频免费| 福利二区91精品bt7086| 欧美精品电影免费在线观看| 国产精品视频一区国模私拍| 最近2019中文字幕一页二页| 北条麻妃99精品青青久久| 欧美激情网站在线观看| 国产亚洲欧美日韩精品| 少妇精69xxtheporn| 国产成人精品一区二区| 日本在线精品视频| 亚洲自拍欧美另类| 国产日韩专区在线| 久久久伊人欧美| xxxxx91麻豆| 欧美电影免费看| 亚洲欧洲成视频免费观看| 在线观看国产精品日韩av| 欧美一区二区三区……| 久久综合色影院| 全亚洲最色的网站在线观看| 亚洲精品成人久久电影| 欧美性高跟鞋xxxxhd| 欧美日韩国产一区在线| 自拍视频国产精品| 中文字幕欧美亚洲| 91免费观看网站| 亚洲福利视频网| 国产www精品| 欧美孕妇孕交黑巨大网站| 日韩久久精品电影| 亚洲国产精品成人va在线观看| 久久成人亚洲精品| 亚洲无亚洲人成网站77777| 国产精品露脸自拍| 欧美日韩精品国产| 91wwwcom在线观看| 亚洲精品一区二区网址| 精品无人区乱码1区2区3区在线| 日韩成人av在线| 国产亚洲精品美女久久久| 日韩天堂在线视频| www亚洲欧美| 久久精品视频va| 国产69久久精品成人看| 国产精品人成电影在线观看|