java如何创建一个jdbc程序详解
jdbc简介
- java数据库连接(java database connectivity,jdbc),是一种用于执行sql语句的java api,它由一组用java编程语言编写的类和接口组成。
- jdbc为数据库开发人员提供了一个标准的api,使他们能够用纯java api来编写数据库应用程序。
- 使用jdbc编写的程序能够自动地将sql语句传送给相应的数据库管理系统。
- jdbc扩展了java的功能,由于java语言本身的特点,使得jdbc具有简单、健壮、安全、可移植、获取方便等优势。
我们在没有jdbc之前,使用驱动程序在java程序与mysql、oracle、sqlserver等数据库之间建立连接,驱动程序就是在该课程中将要学到的内容。那么就存在一个问题:在同一个java程序与数据库之间建立连接时,驱动程序是否是共用的呢?如果一样,很显然就能节省代码量,但是实际上是不一样的。一定要注意是不一样的。那么就存在一个问题:当底层数据库发生改变之后,数据库的驱动程序也会随之发生变化,那么该怎么解决该问题呢?于是jdbc出现了,目的是为了减轻开发人员的工作量,以提高代码的复用。
jdbc api
接口/类 | 功能说明 |
---|---|
drivermanager | 数据库驱动管理类,用于加载和卸载各种驱动程序,并建立于数据库的连接 |
connection | 此接口用于连接数据库 |
statement | 此接口用于执行sql语句并将数据检索到resultset中 |
resultset | 结果集接口,提供检索sql语句返回数据的各种方法 |
preparedstatement | 此接口用于执行预编译的sql语句 |
callablestatement | 此接口用于执行sql存储过程的语句 |
jdbc结构
1.jdbc api是java开发工具包(jdk)的组成部份:
- jdbc驱动程序管理器
- jdbc驱动程序测试工具包
- jdbc-odbc桥
2.jdbc驱动程序管理器是jdbc体系结构的支柱,其主要作用是把java应用程序连接到正确的jdbc驱动程序上。
3.jdbc驱动程序测试工具包为jdbc驱动程序的运行提供一定的可信度,只有通过jdbc驱动程序测试包的驱动程序才被认为是符合jdbc标准的。
4.jdbc-odbc桥使odbc驱动程序可被用作jdbc驱动程序。其目标是为方便实现访问某些不常见的dbms,它的实现为jdbc的快速发展提供了一条途径。
在开始之前,我们先来实现一个简单的jdbc程序
步骤
1,注册驱动;(只需要注册一次)
2,建立连接;
3,创建执行的sql语句;
4,执行语句;
5,处理执行结果;
6,释放资源;
示例
package cn.ccnu; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import com.mysql.jdbc.statement; public class demo1 { public static void main(string[] args) throws exception { test(); } public static void test() throws exception { //1,注册驱动 // drivermanager.registerdriver(new com.mysql.jdbc.driver()); // system.getproperty("jdbc.driver", "con.mysql.jdbc.driver"); class.forname("com.mysql.jdbc.driver");//这三种注册方式,推荐使用这种 //2,建立连接 //url格式 //jdbc:子协议:子名称//主机名:端口/数据库名称 string url = "jdbc:mysql://localhost:3306/test";//如果是本机,也可以将localhost:3306省掉 string user = "root"; string password = "123456"; connection conn = (connection)drivermanager.getconnection(url, user, password); //3,创建slq执行语句 statement st = (statement) conn.createstatement(); //4,执行语句 resultset rs = st.executequery("select * from a"); //5,处理执行结果 while (rs.next()) { system.out.println(rs.getobject(1)); } //6,关闭连接,释放资源 rs.close(); st.close(); conn.close(); } }
分析jdbc开发步骤
使用jdbc访问数据库的基本步骤一般如下:
- 加载jdbc驱动程序
- 创建数据库连接
- 创建statement对象
- 执行sql语句
- 处理返回结果
- 关闭创建的对象
开发第一个jdbc程序
package com.wfu.ch09; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.sql.sqlexception; import java.sql.statement; public class test1 { public static void main(string[] args) { try { class.forname("com.mysql.jdbc.driver");//里面的名字一定不要写错,这个也是导入的 //forname(string classname) 返回与带有给定字符串名的类或接口相关联的 class 对象。 connection conn=drivermanager.getconnection("jdbc:mysql://localhost:3306/k-user","root","123456");//试图建立到给定数据库 url 的连接。 statement stmt=conn.createstatement(); //创建一个 statement 对象来将 sql 语句发送到数据库。 // string insertsql="insert into k_user(userno,username,pwd) values('1002','张三','123')"; // int x=stmt.executeupdate(insertsql); //executeupdate 返回一个int 型的数据 括号里面是一个字符串数据类型,详细内容看文档 //(1) 对于 sql 数据操作语言 (dml) 语句,返回行计数 //(2) 对于不返回任何内容的 sql 语句,返回 0 // if(x>0){ // system.out.println("插入成功!"); // } // string updatesql="update k_user set pwd='123456' where userno='1002'"; // int x=stmt.executeupdate(updatesql); // if(x>0){ // system.out.println("更新成功!"); // } string deletesql="delete from k_user where userno='1002'"; int x=stmt.executeupdate(deletesql); if(x>0){ system.out.println("删除成功!"); } string sql="select * from k_user"; resultset rs=stmt.executequery(sql); while(rs.next()){ for(int i=1;i<=13;i++){ system.out.print(rs.getstring(i)+" "); } system.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (classnotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
package com.wfu.ch09; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.sql.sqlexception; import java.sql.statement; public class test2 { public static void main(string[] args) { try { // step1:加载jdbc驱动程序 class.forname("com.mysql.jdbc.driver"); // step2:建立数据库的连接 connection conn = drivermanager.getconnection( "jdbc:mysql://localhost:3306/stock11", "root", "123"); // // step3:创建statement对象 statement st = conn.createstatement(); //step4:执行sql语句 string selectsql="select * from k_user"; //step5:处理结果集 resultset rs=st.executequery(selectsql); while(rs.next()){ for(int i=1;i<=13;i++){ system.out.print(rs.getstring(i)+" "); } system.out.println(); // string x=rs.getstring("hometown"); // system.out.println(x); } //step6:关闭创建的对象 //关闭结果集 rs.close(); //关闭statement对象 st.close(); //关闭连接 conn.close(); // step4: 执行sql语句 //// string insertsql = "insert into k_user(userno,username,pwd) values('1001','tom','123')"; // int x = st.executeupdate(insertsql); // if(x>0){ // system.out.println("插入成功!"); // } // string updatesql="update k_user set pwd='123456' where userno='1001'"; // int x=st.executeupdate(updatesql); // if(x>0){ // system.out.println("更新成功!"); // } // string deletesql="delete from k_user where userno='1001'"; // int x=st.executeupdate(deletesql); // if(x>0){ // system.out.println("删除成功!"); // } // } catch (classnotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
各个语句说明
加载jdbc驱动程序
加载驱动程序的方法:
class.forname("drivername")
其中drivername是要加载的jdbc驱动程序名称。驱动程序名称根据数据库厂商提供的jdbc驱动程序的种类来确定。
加载mysql数据库驱动程序的方法为:
class.forname("com.mysql.jdbc.driver");
加载oracle数据库驱动程序的方法为:
创建数据库连接-1
drivermanager类是jdbc的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。该类负责加载、注册jdbc驱动程序,管理应用程序和已注册的驱动程序的连接。
drivermanager的常用方法:
方法名 | 功能说明 |
---|---|
static connection getconnection(string url, string user, string password) | 用于建立到指定数据库 url 的连接。其中url为 提供了一种标识数据库位置的方法,user为用户名,password为密码 |
static driver getdriver(string url) | 用于返回能够打开url所指定的数据库的驱动程序 |
使用drivermanager类的getconnection()创建一个数据库连接:
connection conn = drivermanager.getconnection(string url,string user,string password);
创建数据库连接-2
url提供了一种标识数据库位置的方法,可以使相应的驱动程序能够识别该数据库并与它建立连接。
jdbc url由三个部分组成:
jdbc : < subprotocol> : < subname>
可以根据子协议的改变而变化。
是子协议,指数据库连接的方式。
创建数据库连接-3
对于mysql驱动的连结的url是:
jdbc:mysql://servername:port/instance
- mysql为子协议名称
- servername为mysql数据库服务器名称,可以是一个域名,也可以是ip地址
- port为mysql数据库的端口号,默认为3306
- instance是数据库的实例名
示例:
connection conn = drivermanager.getconnection( "jdbc:mysql://localhost:3306/haier", "root", "123");
创建sql 语句
创建完连接之后,可以通过此连接向目标数据库发送sql语句。在发送sql语句之前,须创建一个statement类的对象,该对象负责将sql语句发送给数据库。如果sql语句运行后产生结果集,statement对象会将结果集封装成resultset对象并返回。
通过调用connection接口的createstatement方法来创建statement对象,如:
statement smt = conn.createstatement();
执行sql语句
在statement接口中有两个非常重要的方法,分别是executeupdate方法和executequery方法。使用executeupdate方法可以执行插入、修改和删除等操作的sql语句, executeupdate方法的返回值是一个int类型数值,表示更新数据表的行数。使用 executequery方法可以执行数据库查询操作的sql语句,他的返回值是实现resultset接口的对象,在其中保存从数据库中查询出来的数据。
例如:
int row=stmt.executeupdate(sql);
写到这,对于sql命令的展开没有进行详细的说明,在上面的例子中的代码中有很多注释,都有了详细的说明,对于如何写一个jdbc 程序也有了步骤说明,而且都是一个接着一个的,包括声明的对象类型,还有一个注意的地方就是在最后关闭程序的时候,也是有顺序的,对于有依赖关系的语句都是依次关闭的,在程序的代码中也是有说明的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。