
JDBC(Java
Data
Base
Connectivity,java数据库连接)是一种用于执行SQL语句的Java
API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的JavaAPI。
JDBC库包含的API为每个通常与数据库的使用相关联的任务:
使得连接到数据库
创建SQL或MySQL语句
执行SQL或MySQL的查询数据库
查看和修改结果记录从根本上说,JDBC是一种规范,它提供的接口,一套完整的,允许便携式访问底层数据库。可以用Java来写不同类型的可执行文件,如:
Java应用程序
JavaApplets
JavaServlets
JavaServerPages(JSP)
EnterpriseJavaBeans(EJBs)所有这些不同的可执行文件就可以使用JDBC驱动程序来访问数据库,并把存储的数据的优势。
JDBC提供了相同的功能,ODBC,允许Java程序包含与数据库无关的代码。
先决条件:
以前正如期进行本教程,需要具备以下两个主题内容很好的了解:
核心Java编程
SQL或MySQL数据库
JDBC架构:
JDBCAPI支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:
JDBCAPI:提供了应用程序对JDBC的管理连接。
JDBCDriverAPI:支持JDBC管理到驱动器连接。JDBCAPI的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。
JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。
以下是结构图,它显示了驱动程序管理器方面的JDBC驱动程序和Java应用程序的位置:
常见的JDBC组件:
JDBCAPI提供了以下接口和类:
DriverManager:这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。
Driver:此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息
Connection:此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。
Statement:可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
ResultSet:这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让您可以通过移动它的数据。
SQLException:这个类处理发生在一个数据库应用程序的任何错误。
ResultSet是一个结果集,JDBC查询数据库返回ResultSet,查询结果封装在ResultSet中。
rsgetInt("id")获取表中字段名为id的值,id是int类型。
比如数据库表中有字段email,字段类型为String,则用rsgetString("email")来获取email字段的值。
当然,从你给的代码来看,SQL查询的结果应该是只有1条记录的。
如果有多条记录,循环获取。比如:
while(rsnext()) {Lei sd = new Lei();
sdsetXXX(rsgetXXX(""));
}
private static final String DRIVER="oraclejdbcdriverOracleDriver";
private static final String URL="jdbc:oracle:thin:@d:1521:c";
private static final String USER="b";
private static final String PASSWORD="password";
public static void main(String [] arge){
Systemoutprintln(getCon());
}
public static Connection getCon(){
Connection con=null;
try {
ClassforName(DRIVER);
con=DriverManagergetConnection(URL,USER,PASSWORD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return con;
}
public static void closeAll(javasqlResultSet rs, javasqlPreparedStatement ps, javasqlConnection conn){
if(rs!=null){
try {
rsclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
rs=null;
}
if(ps!=null){
try {
psclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
ps=null;
}
try {
if(conn!=null&&!(connisClosed())){
connclose();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
我刚写了一个只有插入的,望采纳
import javasql;
import javautil;
public class TestPre {
public static void main(String[] args) {
int i=0,deptno=0;//i只做while循环使用,deptno是表dept2中的一个属性,类型是int
String dname=null,loc=null;//dname和loc也是表dept2的属性,类型是String
Scanner s=new Scanner(Systemin);
Systemoutprintln("请输入3个参数");
while(i<3){
try{
deptno=snextInt();
i++;
dname=snext();
i++;
loc=snext();
i++;
}catch(InputMismatchException e){
Systemoutprintln("输入的类型不符,退出");
Systemexit(-1);
}
}
Connection conn=null;
PreparedStatement pstmt=null;
try {
ClassforName("commysqljdbcDriver");
conn = DriverManagergetConnection("jdbc:mysql://localhost/mydata"+ "user=root&password=root");
pstmt=connprepareStatement("insert into dept2 values(,,)");
pstmtsetInt(1, deptno);
pstmtsetString(2, dname);
pstmtsetString(3, loc);
pstmtexecuteUpdate();
Systemoutprintln("插入完成");
} catch (ClassNotFoundException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
} catch (SQLException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
}
finally{
try{
if(pstmt!=null){
pstmtclose();
pstmt=null;
}
if(conn!=null){
connclose();
conn=null;
}
}catch(SQLException e){
eprintStackTrace();
}
}
}
}
前几天笔者发布了博客,手写mybatis彻底搞懂框架原理。为了帮助初学者更好理解mybatis框架,这次讲解一下Java的JDBC的运行过程。
JDBC的作用
JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来 *** 作关系型数据库。JDBC接口及相关类在javasql包和javaxsql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。
JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。
JDBC的连接步骤
执行一次JDBC连接,分六个步骤进行:
1 导入包
在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import javasql 就足够了
2 注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信。
3 打开一个连接
使用DriverManagergetConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接。
4 执行一个查询
需要使用一个类型为Statement或PreparedStatement的对象(两者区别看后文),并提交一个SQL语句到数据库执行查询。
5 从结果集中提取数据
这一步中演示如何从数据库中获取查询结果的数据。使用ResultSetgetXXX()方法来检索的数据结果
6 清理环境资源
在使用JDBC与数据交互 *** 作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费。本文使用了try with resources方式关闭资源,这是JDK7的语法糖,读者可自行搜索。
完整代码如下。
JDBC的最佳实践
JDBC是如何实现Java程序和JDBC驱动的松耦合?
JDBC API使用Java的反射机制来实现Java程序和JDBC驱动的松耦合。看一下上文的JDBC示例,你会发现所有 *** 作都是通过JDBC接口完成的,而驱动只有在通过ClassforName反射机制来加载的时候才会出现。
这是Java核心库里反射机制的最佳实践之一,它使得应用程序和驱动程序之间进行了隔离,让迁移数据库的工作变得更简单。
Statement和PreparedStatement区别
预编译
创建时的区别:
执行时的区别:
由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少次,都不会再去进行编译,而Statement 不同,如果执行多次,则相应的就要编译多少次sql,所以从这点看,PreparedStatement的效率会比Statement要高一些。PreparedStatement是预编译的,所以可以有效的防止SQL注入等问题
占位符
PrepareStatement可以替换变量在SQL语句中可以包含,可以用替换成变量。
而Statement只能用字符串拼接。
JDBC的ResultSet
在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。
ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。
默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet,像下面这样。
当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。
可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。
ResultSet的不同类型
根据创建Statement时输入参数的不同,会对应不同类型的ResultSet。如果你看下Connection的方法,你会发现createStatement和prepareStatement方法重载了,以支持不同的ResultSet和并发类型。
ResultSet对象有三种类型。
ResultSet有两种并发类型。
1增加\x0d\String s1="insert into tableNames (id,name,password) values(myseqnextval,,);"\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s1);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,password);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\2、删除\x0d\String s2="delete from tbNames where name=";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s2);\x0d\prepStmtsetString(1,name);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\3、修改\x0d\String s3=“update tbNames set name= where id=”;\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s3);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,id);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\4、查询\x0d\String s4="select id,name,password from tbNames";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\Statement stmt=conncreateStatement();\x0d\ResultSet rs = stmtexecuteQuery(s4);\x0d\while(rsnext){\x0d\int id=rsgetInt(1);\x0d\String name = rsgetString(2);\x0d\String pwd=rsgetString(3);\x0d\Systemoutprintln(id+name+pwd); } \x0d\\x0d\以上四步必须都得关闭连接;!!!\x0d\rsclose();\x0d\stmtclose();\x0d\connclose();
以上就是关于Java里面的JDBC是什么意思啊全部的内容,包括:Java里面的JDBC是什么意思啊、JDBC是什么、java之JDBC等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)