jdbc从入门到精通,特别适合初学者
jdbc基本使用步骤_概述及解释说明

jdbc基本使用步骤概述及解释说明1. 引言1.1 概述在开发数据库应用程序时,我们经常需要与数据库进行交互。
Java Database Connectivity(JDBC)是Java平台提供的一种标准API,它允许我们通过Java 程序连接和操作各种类型的数据库。
JDBC提供了一组接口和类,使得开发者可以很方便地执行SQL语句、访问和更新数据库中的数据。
本文将介绍JDBC的基本使用步骤,并对每个步骤进行详细解释说明,旨在帮助读者快速入门并掌握JDBC编程技巧。
1.2 文章结构本文共分为五个部分,具体内容如下:第一部分是引言部分,在这部分中我们将对文章的整体内容进行概要介绍,并说明本文的目的和意义。
第二部分是JDBC基本使用步骤,包括连接数据库的准备工作、加载JDBC驱动程序以及建立数据库连接等。
第三部分是JDBC基本操作示例,我们将通过插入数据、查询数据和更新数据等示例来演示JDBC的基本操作。
第四部分是关于JDBC异常处理和事务管理的内容,我们将介绍异常处理机制、事务管理概念及其使用方法,并探讨数据库连接池在实际应用中的使用场景和优势。
最后一部分是结论部分,我们将总结文章的内容与意义,并进一步探讨JDBC在实际应用中的价值与局限性,展望未来JDBC的发展方向或相关趋势。
1.3 目的本文旨在帮助读者全面了解和掌握JDBC的基本使用步骤。
通过清晰地介绍每个步骤的具体操作和相关概念,读者可以学会如何连接数据库、执行SQL语句以及处理异常和事务等常见操作。
文章还将探讨JDBC在实际应用中的价值与局限性,并对未来JDBC的发展趋势进行展望,使读者能够更好地利用JDBC技术开发高效、稳定的数据库应用程序。
2. JDBC基本使用步骤:2.1 连接数据库的准备工作:在进行JDBC操作之前,需要确保以下几个方面的准备工作:- 确保已经安装了适当的数据库服务器,并且运行正常。
- 确认数据库服务器的连接地址、端口号以及数据库名称等信息。
JDBC技术

– 新建 TestStudent 类
• 定义 getConn() 方法,返回一个数据库连接 • 定义 getStudentByCardId(Connection conn,String idCard)方法,根据传入的身份证号返回学生对象 • 定义getStudentByExamId(Connection conn,String examCard)方法,根据传入的准考证号返回学生对象 • 定义 findGrade()方法,完成学生成绩的查询功能 • 定义 printStudentInfo(Student stu)方法打印学生信息
通过JDBC访问数据库
(2).建立连接 数据库建立连接,用户得到一个java.sql.Connection 的对象 Connection con = java.sql.DriverManager.getConnection(dburl,user,pass word); getConnection() 方法中有三个参数,dburl表示连接数据 库的JDBC URL,uer和passwod分别表示连接数据库的用户名和 口令。 JDBC URL的一般形式为: Jdbc:drivertype://parameters Drivertype 表示驱动程序的类型,parameters通常用来设 数据库服务器的IP 地址,端口号和数据库的名称。
– ResultSet对象包括一个由查询语句返回的一个表,这 个表中包含所有的查询结果,按照行和列进行处理. – ResultSet对象维持一个指向当前行的指针.最初,这个 指针指向第一行之前.ResultSet类的next()方法使这 个指针移向下一行.第一次,使用next()方法,将指针指 向结果集的第一行.next方法的返回值是一个boolean 值,若为true,则成功移向下一行.若返回false则没有 下一行. – getXXX方法可以从某一列中获得结果.其中XXX是jdbc 中的java数据类型.如getInt();需要制定检索的列,或 名称.
JDBC入门入门入门入门

第20章•JDBC入門–使用JDBC連接資料庫–使用JDBC進行資料操作簡介JDBC簡介JDBC•JDBC資料庫驅動程式依實作方式可以分為四個類型–Type 1:JDBC-ODBC Bridge–Type 2:Native-API Bridge–Type 3:JDBC-middleware–Type 4:Pure Java Driver連接資料庫•載入JDBC驅動程式try {Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundException e) {System.out.println("找不到驅動程式類別");}連接資料庫•提供JDBC URL–協定:子協定:資料來源識別jdbc:mysql://主機名稱:連接埠/資料庫名稱?參數=值&參數=值jdbc:mysql://localhost:3306/demo?user=root&password=123 jdbc:mysql://localhost:3306/demo?user=root&password=123& useUnicode=true&characterEncoding=Big5連接資料庫•取得Connectiontry {String url= "jdbc:mysql://localhost:3306/demo?" +"user=root&password=123";Connection conn= DriverManager.getConnection(url);....}catch(SQLException e) {....}String url= "jdbc:mysql://localhost:3306/demo";String user = "root";String password = "123";Connection conn= DriverManager.getConnection(url,user, password);簡單的Connection工具類別•取得Connection的方式,依所使用的環境及程式需求而有所不同•設計一個DBSource介面package onlyfun.caterpillar;import java.sql.Connection;import java.sql.SQLException;public interface DBSource{public Connection getConnection() throws SQLException;public void closeConnection(Connection conn) throws SQLException; }簡單的Connection工具類別public class SimpleDBSource implements DBSource{…public SimpleDBSource(String configFile) throws IOException,ClassNotFoundException{ props = new Properties();props.load(new FileInputStream(configFile));url= props.getProperty("onlyfun.caterpillar.url");user = props.getProperty("er");passwd= props.getProperty("onlyfun.caterpillar.password");Class.forName(props.getProperty("onlyfun.caterpillar.driver"));}public Connection getConnection() throws SQLException{return DriverManager.getConnection(url, user, passwd);}public void closeConnection(Connection conn) throws SQLException{ conn.close();}}簡單的Connection工具類別onlyfun.caterpillar.driver=com.mysql.jdbc.Driver onlyfun.caterpillar.url=jdbc:mysql://localhost:3306/demo er=rootonlyfun.caterpillar.password=123456DBSource dbsource= new SimpleDBSource();Connection conn= dbsource.getConnection();if(!conn.isClosed()) {System.out.println("資料庫連接已開啟…");}dbsource.closeConnection(conn);if(conn.isClosed()) {System.out.println("資料庫連接已關閉…");}簡單的連接池(Connection pool)•資料庫連接的取得是一個耗費時間與資源的動作–建立Socket connection–交換資料(使用者密碼驗證、相關參數)–資料庫初始會話(Session)–日誌(Logging)–分配行程(Process)–…簡單的連接池(Connection pool)public synchronized Connection getConnection()throws SQLException{ if(connections.size() == 0) {return DriverManager.getConnection(url, user, passwd);}else {int lastIndex= connections.size() -1;return connections.remove(lastIndex);}}public synchronized void closeConnection(Connection conn)throws SQLException{ if(connections.size() == max) {conn.close();}else {connections.add(conn);}}簡單的連接池(Connection pool)DBSource dbsource= new BasicDBSource("jdbc2.properties"); Connection conn1 = dbsource.getConnection();dbsource.closeConnection(conn1);Connection conn2 = dbsource.getConnection();System.out.println(conn1 == conn2);onlyfun.caterpillar.driver=com.mysql.jdbc.Driveronlyfun.caterpillar.url=jdbc:mysql://localhost:3306/demo er=rootonlyfun.caterpillar.password=123456onlyfun.caterpillar.poolmax=10簡單的連接池(Connection pool)•初始的Connection數量•Connection最大idle的數量•如果超過多久時間,要回收多少數量的Connection•Proxool–/index.html •Apache Jakarta的Common DBCP –/commons/dbcp/Statement、ResultSet•要執行SQL的話,必須取得java.sql.Statement物件,它是Java當中一個SQL敘述的具體代表物件Statement stmt = conn.createStatement();•插入一筆資料,可以如下使用Statement的executeUpdate()方法stmt.executeUpdate("INSERT INTO t_message VALUES(1, 'justin', " + "'justin@', 'mesage...')");Statement、ResultSet •executeUpdate()會傳回int結果,表示資料變動的筆數•executeQuery()方法則是用於SELECT等查詢資料庫的SQL•executeQuery()會傳回java.sql.ResultSet物件,代表查詢的結果•可以使用ResultSet的next()來移動至下一筆資料,它會傳回true 或false表示是否有下一筆資料•使用getXXX()來取得資料Statement、ResultSet•指定欄位名稱來取得資料ResultSet result =stmt.executeQuery("SELECT* FROM t_message"); while(result.next()) {System.out.print(result.getInt("id") + "\t");System.out.print(result.getString("name") + "\t");System.out.print(result.getString("email") + "\t");System.out.print(result.getString("msg") + "\t");}Statement、ResultSet•使用查詢結果的欄位順序來顯示結果ResultSet result =stmt.executeQuery("SELECT* FROM t_message"); while(result.next()) {System.out.print(result.getInt(1) + "\t");System.out.print(result.getString(2) + "\t");System.out.print(result.getString(3) + "\t");System.out.print(result.getString(4) + "\t");}Statement、ResultSet •Statement的execute()可以用來執行SQL,並可以測試所執行的SQL是執行查詢或是更新•傳回true的話表示SQL執行將傳回ResultSet表示查詢結果,此時可以使用getResultSet()取得ResultSet物件•如果execute()傳回false,表示SQL執行會傳回更新筆數或沒有結果,此時可以使用getUpdateCount()取得更新筆數•如果事先無法得知是進行查詢或是更新,就可以使用execute()Statement、ResultSet finally {if(stmt!= null) {try {stmt.close();}catch(SQLException e) {e.printStackTrace();}}if(conn!= null) {try {dbsource.closeConnection(conn);}catch(SQLException e) {e.printStackTrace();}}}Statement、ResultSet •Connection物件預設為「自動認可」(auto commit)•getAutoCommit()可以測試是否設定為自動認可•無論是否有無執行commit()方法,只要SQL 沒有錯,在關閉Statement或Connection 前,都會執行認可動作PreparedStatement •preparedStatement()方法建立好一個預先編譯(precompile)的SQL語句•當中參數會變動的部份,先指定"?"這個佔位字元PreparedStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");PreparedStatement•需要真正指定參數執行時,再使用相對應的setInt()、setString()等方法,指定"?"處真正應該有的參數stmt.setInt(1, 2);stmt.setString(2, "momor");stmt.setString(3, "momor@");stmt.setString(4, "message2...");LOB讀寫•BLOB全名Binary Large Object,用於儲存大量的二進位資料•CLOB全名Character Large Object,用於儲存大量的文字資料•在JDBC中也提供了java.sql.Blob與java.sql.Clob兩個類別分別代表BLOB與CLOB資料LOB讀寫•取得一個檔案,並將之存入資料庫中File file= new File("./logo_phpbb.jpg");int length = (int) file.length();InputStream fin = new FileInputStream(file);// 填入資料庫PreparedStatement pstmt= conn.prepareStatement("INSERT INTO files VALUES(?, ?, ?)");pstmt.setInt(1, 1);pstmt.setString(2, "filename");pstmt.setBinaryStream(3, fin, length);pstmt.executeUpdate();pstmt.clearParameters();pstmt.close();fin.close();LOB讀寫•從資料庫中取得BLOB或CLOB資料Blob blob= result.getBlob(2); // 取得BLOBClob clob= result.getClob(2) // 取得CLOB交易(Transaction)•可以操作Connection的setAutoCommit()方法,給它false引數•在下達一連串的SQL語句後,自行呼叫Connection的commit()來送出變更交易(Transaction)try {…conn.setAutoCommit(false); // 設定auto commit為false stmt = conn.createStatement();stmt.execute("...."); // SQLstmt.execute("....");stmt.execute("....");mit(); // 正確無誤,確定送出}catch(SQLException e) { // 喔喔!在commit()前發生錯誤try {conn.rollback(); // 撤消操作} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}交易(Transaction)•設定儲存點(save point)conn.setAutoCommit(false);Statement stmt = conn.createStatement();stmt.executeUpdate("....");stmt.executeUpdate("....");Savepoint savepoint= conn.setSavepoint(); // 設定save pointstmt.executeUpdate("....");// 如果因故rollbackconn.rollback(savepoint);. . .mit();// 記得釋放save pointstmt.releaseSavepoint(savepoint);批次處理•使用addBatch()方法將要執行的SQL敘述加入,然後執行executeBatch()conn.setAutoCommit(false);Statement stmt = conn.createStatement();stmt.addBatch("..."); // SQLstmt.addBatch("...");stmt.addBatch("...");...stmt.executeBatch();mit();批次處理•使用PreparedStatement可以進行批次處理PreparedStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");Message[] messages = ...;for(int i = 0; i < messages.length; i++) {stmt.setInt(1, messages[i].getID());stmt.setString(2, messages[i].getName());stmt.setString(3, messages[i].getEmail());stmt.setString(4, messages[i].getMsg());stmt.addBatch();}stmt.executeBatch();ResultSet游標控制•可以在建立Statement物件時指定resultSetType –ResultSet.TYPE_FORWARD_ONLY–ResultSet.TYPE_SCROLL_INSENSITIVE–ResultSet.TYPE_SCROLL_SENSITIVE•預設是第一個,也就是只能使用next()來逐筆取得資料•指定第二個或第三個時,則可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法ResultSet游標控制•還必須指定resultSetConcurrency –ResultSet.CONCUR_READ_ONLY–ResultSet.CONCUR_UPDATABLE •createStatement()不給定參數時,預設是TYPE_FORWARD_ONLY、CONCUR_READ_ONLYResultSet游標控制dbsource= new SimpleDBSource();conn= dbsource.getConnection();stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet result = stmt.executeQuery("SELECT * FROM t_message");result.afterLast();while(result.previous()) {System.out.print(result.getInt("id") + "\t");System.out.print(result.getString("name") + "\t");System.out.print(result.getString("email") + "\t");System.out.println(result.getString("msg"));}ResultSet新增、更新、刪除資料•建立Statement時必須在createStatement()上指定TYPE_SCROLL_SENSITIVE(或TYPE_SCROLL_INSENSITIVE,如果不想取得更新後的資料的話)與CONCUR_UPDATABLEStatement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet新增、更新、刪除資料•針對查詢到的資料進行更新的動作ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHERE name='justin'"); st();result.updateString("name", "caterpillar");result.updateString("email", "caterpillar@"); result.updateRow();ResultSet新增、更新、刪除資料•如果想要新增資料ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHEREname='caterpillar'");result.moveToInsertRow();result.updateInt("id", 4);result.updateString("name", "jazz");result.updateString("email", "jazz@");result.updateString("msg", "message4...");result.insertRow();ResultSet新增、更新、刪除資料•要刪除查詢到的某筆資料ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHEREname='caterpillar'");st();result.deleteRow();ResultSetMetaData •Meta Data即「資料的資料」(Data about data)•ResultSet用來表示查詢到的資料,而ResultSet資料的資料,即描述所查詢到的資料背後的資料描述,即用來表示表格名稱、欄位名稱、欄位型態•可以透過ResultSetMetaData來取得ResultSetMetaDatadbsource= new SimpleDBSource();conn= dbsource.getConnection();stmt = conn.createStatement();ResultSet result = stmt.executeQuery("SELECT * FROM t_message"); ResultSetMetaData metadata =result.getMetaData();for(int i = 1; i <= metadata.getColumnCount(); i++) { System.out.print(metadata.getTableName(i) + ".");System.out.print(metadata.getColumnName(i) + "\t|\t");System.out.println(metadata.getColumnTypeName(i));}。
JAVA编程不得不看的几本经典书籍

为了帮助对java编程感兴趣的同学更好、更快的提高编程技术,武汉北大青鸟光谷校区专业老师在此推荐几本学习编程非常有用的书籍,以供大家参考。
入门类1.《java从入门到精通》(第3版)【内容介绍】本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java 语言进行程序开发应该掌握的各方面技术。
全书共分28章,包括:初识Java,熟悉Eclipse 开发工具,Java 语言基础,流程控制,字符串,数组,类和对象,包装类,数字处理类,接口、继承与多态,类的高级特性,异常处理,Swing程序设计,集合类,I/O输入输出,反射,枚举类型与泛型,多线程,网络通信,数据库操作,Swing表格组件,Swing树组件,Swing其他高级组件,高级布局管理器,高级事件处理,AWT绘图与音频播放,打印技术和企业进销存管理系统等。
所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Java程序开发的精髓,快速提高开发技能。
【推荐理由】本书内容详尽,实例丰富,非常适合作为编程初学者的学习用书,也适合作为开发人员的查阅、参考资料。
2.《java核心技术卷一》【内容介绍】本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI工具箱进行图形用户界面设计,异常处理、流输入/输出和对象序列化、泛型程序设计等。
本书内容翔实、深入浅出,附有大量程序实例,极具实用价值,是Java初学者和Java程序员的必备参考书。
【推荐理由】本书出版以来,深受广大读者的喜爱,它全面介绍了Java SE的基础知识,不但具有使用价值,而且易于阅读,易理解,它必成为想进军Java和基础薄弱同学的不二之选。
3.《java编程语言》【内容介绍】本书以Java语言创建者的独特视角向读者展现了为什么以及如何使用Java语言,以便读者理解Java语言的基本设计目标以及它在现实世界中的应用。
jdbc的操作步骤

jdbc的操作步骤JDBC(Java Database Connectivity)是Java语言操作数据库的一种标准接口。
它允许Java应用程序连接并操作各种类型的关系型数据库,并可以通过SQL语句执行各种数据库操作。
以下是使用JDBC进行数据库操作的一般步骤:1.加载并注册数据库驱动:首先需要加载并注册用于连接特定数据库的驱动程序。
不同的数据库有不同的驱动程序,所以需要根据使用的数据库选择合适的驱动程序,并将其加载到JVM中。
2.建立数据库连接:创建一个数据库连接对象,通过提供数据库的URL、用户名和密码来连接到数据库。
连接对象是与数据库进行通信的关键对象,它封装了与数据库的物理连接。
3. 创建执行SQL的对象:使用连接对象创建一个Statement对象或PreparedStatement对象,用于执行SQL语句。
Statement对象用于执行不带参数的静态SQL语句,而PreparedStatement对象用于执行带参数的SQL语句。
4. 执行SQL语句:通过调用Statement或PreparedStatement对象的executeUpdate(方法执行SQL语句。
如果是查询语句,可以调用executeQuery(方法执行,并通过结果集获取查询结果。
5. 处理结果集:如果执行的SQL语句返回结果集,需要对结果集进行处理。
可以使用ResultSet对象来获取查询结果,通过ResultSet的方法获取查询结果集中的数据。
7. 释放资源:在完成数据库操作后,需要释放占用的数据库资源。
首先关闭结果集,然后关闭Statement对象或PreparedStatement对象,最后关闭连接对象。
以上是JDBC的一般操作步骤,下面将详细介绍每个步骤的具体操作:1.加载并注册数据库驱动:使用Class类的forName(方法动态加载适用于特定数据库的驱动程序,例如:``````2.建立数据库连接:使用DriverManager类的getConnection(方法创建一个数据库连接对象,需要提供数据库的URL、用户名和密码,例如:```String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";Connection conn = DriverManager.getConnection(url, username, password);```3.创建执行SQL的对象:使用连接对象的createStatement(方法创建一个Statement对象或使用prepareStatement(方法创建一个PreparedStatement对象,例如:```Statement stmt = conn.createStatement(;PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable(id, name) VALUES (?, ?)");```4.执行SQL语句:通过调用Statement对象或PreparedStatement对象的executeUpdate(方法执行SQL语句,例如:```String sql = "UPDATE mytable SET name='John' WHERE id=1";stmt.executeUpdate(sql);```5.处理结果集:如果执行的SQL语句返回结果集,通过调用Statement对象的executeQuery(方法获取结果集,并通过ResultSet对象获取查询结果,例如:```String sql = "SELECT * FROM mytable";ResultSet rs = stmt.executeQuery(sql);while (rs.next()int id = rs.getInt("id");String name = rs.getString("name");System.out.println("id: " + id + ", name: " + name);```6.提交或回滚事务:```stmt1.executeUpdate(sql1);stmt2.executeUpdate(sql2);```7.释放资源:在完成数据库操作后,需要及时释放占用的数据库资源,首先关闭ResultSet对象,然后关闭Statement对象或PreparedStatement对象,最后关闭Connection对象,例如:```rs.close(;stmt.close(;pstmt.close(;conn.close(;```这是使用JDBC进行数据库操作的一般步骤,可以根据具体需求进行适当调整和扩展。
JDBC基础

C JDBC基础C.1 JDBC概述及一个例子C.2 Java数据库编程中查询结果的表格式输出C.3 用JDBC开发基于客户/服务器模式的Internet/Intranet数据库C.4 用JAVA程序取得IP地址C.5 JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 – OracleC.6 在Applet中应用JDBC访问数据库C.7 JDBC 入门(1)-- 建立联接C.8 JDBC 入门(2)-- 设置表C.9 JDBC 入门(3)-- 开始C.10 JDBC接口技术C.1 JDBC概述C.1.1 数据库连接数据库连接对动态网站来说是最为重要的部分,Java中连接数据库的技术是JDBC (Java Database Connectivity)。
很多数据库系统带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询,提取数据等等。
Sun公司还开发了JDBC-ODBC bridge,用此技术,Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MS SQL Server 和MS Access等。
下面介绍如何用Access实现一个动态FAQ(常见问题及答案) 网站。
C.1.2 一个Access数据库实例首先建立一个Access数据库(faq.mdb),其中设计表(Table) faqs,有字段id(自动增量型,并设为主关键字), subject(文字型,长度200), answers(备注型)。
这个表中可以存放一些编程知识的常见问题及答案。
见图C-1。
然后,在Control Panel(控制面板)的ODBC Datasource模块中,加入System DSN,取名faq,并指向faq.mdb。
创建一个JavaBean,faq.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目录下。
jdbcJava 数据库接口 JDBC 入门基础
第一讲第一讲慨述1.1 什么是 JDBCTM?JDBCTM 是一种用于执行 SQL 语句的 JavaTM API(有意思的是,JDBC 本身是个商标名而不是一个缩写字;然而,JDBC常被认为是代表“Java 数据库连接(Java Database Connectivity)”)。
它由一组用 Java 编程语言编写的类和接口组成。
JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序。
有了 JDBC,向各种关系数据库发送 SQL 语句就是一件很容易的事。
换言之,有了JDBC API,就不必为访问 Sybase 数据库专门写一个程序,为访问Oracle 数据库又专门写一个程序,为访问Informix 数据库又写另一个程序,等等。
您只需用 JDBC API 写一个程序就够了,它可向相应数据库发送 SQL 语句。
而且,使用 Java 编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。
将 Java 和 JDBC 结合起来将使程序员只须写一遍程序就可让它在任何平台上运行。
Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。
所需要的只是 Java 应用程序与各种不同数据库之间进行对话的方法。
而 JDBC 正是作为此种用途的机制。
JDBC 扩展了 Java 的功能。
例如,用 Java 和 JDBC API 可以发布含有applet的网页,而该 applet 使用的信息可能来自远程数据库。
企业也可以用JDBC 通过Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和 UNIX 等各种不同的操作系统)。
随着越来越多的程序员开始使用 Java 编程语言,对从 Java中便捷地访问数据库的要求也在日益增加。
MIS 管理员们都喜欢 Java 和 JDBC 的结合,因为它使信息传播变得容易和经济。
JDBC
JDBC课堂笔记1 学习方法JDBC当中就是java 类使用。
以使用为主记住JDBC操作流程2 JDBC?JDBC:java Database connection java数据库连接技术我们程序员使用JDBC在java程序中操作Database。
3 JDBC整体结构:JDBC在JDK中没有实现只有规范。
只有接口。
具体的实现是由不同的数据库厂商按规范提供相应的实现类。
Oracle数据库想要连接到java程序上,就要由Oracle数据库厂商提供连接JDBC的实现类。
MySQL数据库想要连接到java程序上,就要由MySQL数据库厂商提供连接JDBC的实现类。
4 JDBC中的常用接口4.1 java.sql.Connection接口连接对象,负责与数据库之间创建连接。
4.2 java.sql.Statement接口操作数据库的接口,负责将sql命令从java程序发送到数据库执行。
数据库只认识sql命令。
insert into , update ,deletejava程序想执行insert into ,String sql = "insert into"命令,发送到数据库。
4.2.1 executeUpdate - 执行增删改命令的方法4.2.2 executeQuery - 执行查询的方法4.2.5 java.sql.PreparedStatemet接口是Statement接口的子接口,实现预编译的SQL语句的执行4.3 java.sql.ResultSet接口接收数据库中查询语句的结果的接口。
叫结果集对象当我们使用Statement对象向数据库发送查询语句,就要使用ResultSet接口接收查询的结果。
查询的结果结构是什么?二维表格rs是一个指向查询结果这个二维表格每一行的一个引用。
rs对象每次只能指向一行记录。
在每一个查询的结果中都有两个固定的位置,BOF(第一行前面),EOF(最后一行后面)4.3.1 next() - 下移一行,返回boolean类型,当没有下一行时返回false。
JDBC连接数据库6个步骤
JDBC连接数据库6个步骤JDBC(Java Database Connectivity)是Java语言连接数据库的一种标准API,它提供了一组用于访问和操作数据库的接口。
在使用JDBC 连接数据库时,一般需要经过以下6个步骤:1.加载数据库驱动程序:``````2.建立数据库连接:加载驱动程序后,需要获取一个数据库连接。
在JDBC中,可以通过DriverManager类的getConnection(方法来创建一个数据库连接对象。
该方法接受三个参数:数据库URL、用户名和密码。
数据库URL指定了要连接的数据库的位置和其他连接参数。
例如,如果要连接localhost上的名为test的MySQL数据库,可以使用如下代码:```String url = "jdbc:mysql://localhost:3306/test";String username = "root";String password = "password";Connection connection = DriverManager.getConnection(url, username, password);```3. 创建Statement对象:创建Statement对象用于执行SQL语句。
Statement是JDBC中用于发送静态SQL语句的对象。
可以通过调用Connection对象的createStatement(方法来创建一个Statement对象。
例如:```Statement statement = connection.createStatement(;```4.执行SQL语句:通过Statement对象的executeQuery(方法来执行SQL查询语句。
该方法返回一个ResultSet对象,用于保存查询结果。
例如,可以执行一个简单的查询语句并遍历结果集:```String sql = "SELECT * FROM students";ResultSet resultSet = statement.executeQuery(sql);while(resultSet.next()String name = resultSet.getString("name");int age = resultSet.getInt("age");//处理查询结果```除了executeQuery(方法,Statement对象还提供了其他执行SQL语句的方法,如executeUpdate(用于执行更新操作。
JDBC学习总结--JDBC快速入门教程
JDBC学习总结--JDBC快速⼊门教程先感谢前⼈的劳动成果,本教程中含有多处指路,请注意筛选.前置知识:基本SQL 语句,JAVA SE基础JDBC ⽬录:1.JDBC概念2.JDBC处理SQL语句的过程(建表,查表)建⽴与数据库的连接创建 statement执⾏ Query处理结果集(ResultSets)3.专题介绍ResultSet 与 Statement 中的 Prestatement,CallableStatement 详细介绍批处理的使⽤ + 删除表格DataSource 与连接池,事务 (DBCP,简易连接池)4.结尾ORMDAO封装⾃⼰的JDBC1. JDBC的概念JDBC(Java DataBase Connectivity)是⼀种数据库连接技术,能实现Java程序对各种数据库的访问。
由⼀组使⽤Java语⾔编写的类和接⼝(JDBC API)组成,他们位于java.sql以及javax.sql中。
中的 (⼆.JDBC是什么)作⽤:1. 与数据库建⽴联系.2. 将编写好的SQL语句发送⾄数据库执⾏3. 对数据库返回的结果进⾏操作JDBC APIjava.sql.*javax.sql.*连接数据库相关的:DriverManager: ⽤URL连接数据库, 在4.0版本之前要进⾏加载. 即⽤映射加载驱动 Class.forName("com.mysql.jdbc.Driver"); 相对于DriverManager类,DataSource更适合⽤于获取操作数据的Connection对象, 它相对灵活,并且⽀持 JNDI ,可以为servlet容器提供连接池 (可以去找DBCP的资料,这⾥涉及到了 .) ,后续会解释DataSource的使⽤.Connection接⼝: 负责连接数据库并担任传送数据的任务。
数据库SQL相关的:Statement接⼝: 负责执⾏SQL语句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jdbc从入门到精通,特别适合初学者如果你有翻阅java API文档的习惯的话,你就会发现,jdbc API中接口占了大多数。
不同的jdbc驱动开发者提供了实现必要接口的类。
开发商之间的不断竞争就为我们提供了多种jdbc驱动。
点击这里你会方便的获得很多公司提供的jdbc驱动。
从编程的角度出发,有两个主要的类负责建立与数据库的连接。
第一个类是 DriverManager,它是在 JDBC API 中提供的为数不多的实际类之一。
DriverManager 负责管理已注册驱动程序的集合,实质上就是提取使用驱动程序的细节,这样程序员就不必直接处理它们。
第二个类是实际的 JDBC Driver 类。
这些是由独立厂商提供的。
JDBC Driver 类负责建立数据库连接和处理所有与数据库的通讯。
在所有java程序与数据库之间创建连接的过程的第一步是在jvm中注册jdbc驱动。
在传统的连接机制(相对于后面讨论的 DataSource 连接机制)中,连接和所有数据库通讯是由 DriverManager 对象控制的。
要建立一个连接,必须用 DriverManager 对象注册针对目标数据库的适当的 JDBC 驱动程序。
JDBC 规范规定了 JDBC 驱动程序在装入 JVM 时应该自动用 DriverManager 对象注册自身。
例如,下面的代码段使用一个静态的初始化程序来首先创建一个 persistentjava JDBC 驱动程序的实例,然后用 DriverManager 将其注册。
static {java.sql.DriverManager.registerDriver(new com.persistentjava.JdbcDriver()) ;}注册驱动程序就是将驱动程序类装入 JVM 的工作,它可以用几种不同的方法完成。
一种方法就是使用类调用器(ClassLoader)Class.forName(yourDriver);。
另一种方法不太常见,是使用 jdbc.drivers 系统属性。
这种方法可以有三种不同的方式:∙从命令行:java -Djdb.drivers=com.persistentjava.JdbcDriver Connect ∙在java 应用程序中:System.setProperty("jdbc.drivers", "com.persistentjava.JdbcDriver") ;∙通过在系统属性文件中设置jdbc.drivers 属性,这通常和系统有关。
通过用冒号隔离驱动程序,多个驱动程序可以使用上面提到的系统属性方法注册。
使用系统属性方法的一个好处是驱动程序很容易在JVM 中调入和调出,而不用修改任何代码或修改最少的代码。
如果注册了多个驱动程序,它们的优先顺序是:1)JVM 初始化时通过jdbc.drivers 属性注册的JDBC 驱动程序,2)动态装入的JDBC 驱动程序。
因为jdbc.drivers 属性只在DriverManager() 方法的第一次调用时检查一次,确保所有驱动程序在建立数据库连接之前被正确注册是很重要的。
然而,不是所有的JVM 都平等创建,一些JVM 并不符合JVM 规范。
结果是,静态初始化程序并不如预期的那样运行。
这导致了注册JDBC 驱动程序的多种方法,包括:∙Class.forName("com.persistentjava.JdbcDriver").newInstance() ;∙DriverManager.registerDriver(new com.persistentjava.JdbcDriver()) ;这些替代方案应该在所有JVM 中都运行良好,所以您应该放心地在众多可能出现的JVM 中使用它们工作。
最后一个问题是Class.forname() 可能抛出一个ClassNotFoundException,所以您需要在合适的异常处理程序中包装注册代码。
一旦JDBC 驱动程序用DriverManager 注册了,就可以用于建立到数据库的连接。
但是很多不同的驱动程序都可能被注册过,DriverManager 怎样选择正确的驱动程序呢?方法:每个JDBC 驱动程序使用一个专门的JDBC URL作为自我标识的一种方法,他的格式和web 地址挺相似。
URL 的格式是直观的:jdbc:sub-protocol:database locator。
子协议(sub-protocol)与JDBC 驱动程序有关,可以是odbc、oracle、db2 等等,根据实际的JDBC 驱动程序厂商而不同。
数据库定位器(database locator)是与驱动程序有关的指示器,用于唯一指定应用程序要和哪个数据库进行交互。
根据驱动程序的类型,该定位器可能包括主机名、端口和数据库系统名。
当提供了具体的URL 之后,DriverManager 在已注册的驱动程序集合中循环,直到其中一个驱动程序识别出指定的URL。
如果没有发现适合的驱动程序,就抛出一个SQLException。
下面的清单说明了几个实际JDBC URL 的具体示例:∙jdbc: odbc:jdbc∙jdbc: oracle:thin:@:1521:jdbc";∙jdbc:db2:jdbc很多驱动程序(包括JDBC-ODBC 桥驱动程序)接受在URL 末尾的附加参数,如用户名和密码。
给定具体的JDBC URL,获取数据库连接的方法就是在DriverManager 对象上调用getConnection()。
这种方法有几种形式:∙DriverManager.getConnection(url) ;∙DriverManager.getConnection(url, username, password) ;∙DriverManager.getConnection(url, dbproperties) ;在这里,url 是一个String 对象,也就是JDBC URL;用户名和密码是String 对象,它们是JDBC 应用程序要用来连接到数据源的用户名和密码;而dbproperties 是一个包括所有参数(可能包括用户名和密码)的Java properties 对象,JDBC 驱动程序需要这些参数作成功的连接。
看到这里,你已经成功的在你即将诞生的java程序和数据库之间建立起了沟通的桥梁。
你知道jdbc驱动有几种类型吗?下节课我们来一探究竟……各位看官感想如何?感觉还行的话我会连载下去的。
(补充:ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
这些API利用SQL 来完成其大部分任务。
ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。
也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。
由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
一个完整的ODBC由下列几个部件组成:应用程序(Application)。
ODBC管理器(Administrator)。
该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
驱动程序管理器(Driver Manager)。
驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。
其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
ODBC API。
ODBC 驱动程序。
是一些DLL,提供了ODBC和数据库之间的接口。
数据源。
数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
各部件之间的关系如图下图所示:Application||Driver Manager| | || | |驱动程序驱动程序驱动程序| | |数据源数据源数据源应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。
这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。
驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在访问ODBC数据源时需要ODBC驱动程序的支持。
用Visual C++ 5.0安装程序可以安装SQL Server、Access、Paradox、dBase、FoxPro、Excel、Oracle 和Microsoft Text等驱动程序.在缺省情况下,VC5.0只会安装SQL Server、Access、FoxPro和dBase 的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC 5.0的安装程序并选择所需的驱动程序。
)第一种驱动我们称之为jdbc-odbc桥这种驱动程序通过附加在jdbc-odbc桥的“开放数据库连接“”(Open DataBase Connectivity)也就是我们经常说的odbc驱动程序来区分。
要连接到一个不同的数据源,您只需要使用ODBC 管理员注册或绑定一个不同的ODBC 数据源到合适的数据源名称即可。
因为odbc驱动存在的时间比较长,好像比java存在的时间长,因此存在很多的odbc驱动。
如果您是初学者,建议你选用这种驱动来实现数据库与java程序的连接。
有的ODBC 驱动甚至可以让您将ODBC 数据源指定到Microsoft Excel 应用程序或纯文本文件。
然而,当JDBC 转换成ODBC,然后ODBC 又转换成具体的数据库的协议时,这种额外的中间层次可能会导致性能降低。
这种驱动的另一个潜在的问题是在分布式应用程序的使用。
因为桥本身不支持分布式通讯,这种驱动程序能够在网络中运行的唯一途径就是ODBC 驱动程序本身支持远程交互。
对于简单的ODBC 驱动程序来说,这并不是一个好的选择,而且虽然大型数据库通常的确有可以远程运行的ODBC 驱动程序,它们在性能上也无法与纯粹的Java JDBC 驱动程序相比。