JDBC(Java Data Base Connectivity),用于实现java语言编程与数据库连接的API。

数据库驱动:应用程序并不能直接使用数据库,而需要通过相应的数据库驱动程序后再操作数据库;而JDBC就是实现应用程序去加载具体的驱动;

应用程序---JDBC--->驱动程序-->数据库

建立JDBC连接:

  • 导入JDBC包:
import java.sql.*
  • 注册JDBC驱动程序并创建连接对象conn:
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/db_name","db_username","db_password");//获取链接
conn.close();

这样,我们的JDBC连接即已建好。

交互

连接建立后,通常通过JDBC Statement、CallableStatement和PrepareStatement这3个接口进行交互。

而创建这3种接口的方法分别是Connection类中的createStatement()、prepareStatement(sql)、prepareCall(sql)方法;除了这3种方法外,Connection类还提供了

setAutoCommit(boolean autoCommit)方法:是否事务自动提交;

commit()方法:提交事务;

roolback()方法:回滚事务

  • Statement:用于使用静态SQL语句,不能接受参数;

创建Statement对象:

Statement stmt = null;
try{
stmt = conn.createStatement();
}catch(SQLException e){
...
}finally{
...
}

该对象常用的方法:

boolean execute(String SQL ):检索SQL运行后结果是否存在,有则返回true,没有则返回false;

int executeUpdate(String SQL):检索SQL语句所影响的行数,常用于会影响多行改动的SQL语句,如INSERT、UPDATE、DELETE;

ResultSet executeQuery(String SQL):返回运行后的结果集合,常用于SELECT;

addBatch(String sql):把多条sql语句放到一个批处理中;

executeBatch():批量处理一批sql语句;

关闭Statement对象:

finally{
stmt.close();
}
  • PreparedStatement:扩展了Statement接口,可支持动态,可接受参数,参数类型只使用IN;

创建PreparedStatement对象:

PreparedStatement pstmt = null;
try{
String SQL = "Update employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
...
}catch{
...
}finally{
pstmt.close();
}

其中?即表示要输入的参数。通过stmt.setXXX(number,value);输入参数,其中XXX表示参数数值类型,number表示?在程序出现的位置,从1开始计数;value表示输入参数的值;

Statement对象可用的方法都可以使用。

  • CallableStatement:相比于PreparedStatement对象,其参数类型有IN、OUT、INOUT三种;

创建CallableStatement对象:

CallableStatement cstmt = null;
try{
String strSQL = "{call getEmpName(?,?)}";
cstmte = conn.prepareCall(SQL);
...
}catch(SQLException e){
...
}finally{
cstmt.close();
}

对比前面的3种方法,CallcbleStatement多了一种方法:registerOutParameter(),该方法将JDBC数据类型绑定到存储过程并返回预期数据类型。

当调用存储过程,可以使用适当的getXXX()方法从OUT参数中检索该值。 此方法将检索到的SQL类型的值转换为对应的Java数据类型。

Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

java_第一年_JDBC(1)的更多相关文章

  1. java_第一年_JDBC(7)

    Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...

  2. java_第一年_JDBC(2)

    上篇说到,通过JDBC可实现java编程程序和mysql数据库进行连接并交互,而交互后所形成的结果集是通过ResultSet对象来操作的. 创建ResultSet对象: stmt = conn.cre ...

  3. java_第一年_JDBC(6)

    DataBaseMetaData对象:由Connection.getDataBaseMetaData()方法获得,可以用来获取数据库的元数据,提供的方法有: getURL():返回一个String类, ...

  4. java_第一年_JDBC(5)

    事务概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功: 开始事务:start transaction 提交事务:commit 回滚事务:rollback 事务的四大特 ...

  5. java_第一年_JDBC(4)

    注:该篇只是为了小白的我熟悉下JDBC的代码,练习篇 在mysql中建test测试库,并创建一张employees表,加入一些数据如下图: 通过JDBC连接对表中数据进行添加: package lzj ...

  6. java_第一年_JDBC(3)

    事务 我们在通过JDBC连接数据库并开始交互时,默认情况下是自动提交的,有时由于为了保持业务流程的完整性.提高性能或是使用分布式事务,需要启动支持事务,此时的方法是调用Connection对象的set ...

  7. java_第一年_JavaWeb(14)

    EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...

  8. java_第一年_JavaWeb(13)

    JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...

  9. java_第一年_JavaWeb(11)

    自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...

随机推荐

  1. sublime text 3插件---File Header配置

    今天趁着有点闲工夫,准备好好配置一下sublime环境,毕竟天天见面. 首当其冲的就是FileHeader插件了,安装它之后就懒得配置过.(方便起见,以下简称FH) FH是一个为文件自动添加前缀字段的 ...

  2. Java基础__Java中常用数学类Math那些事

     测试 package Cynical_Gary; public class Cynical_Text { public static void main(String[] args){ System ...

  3. JS框架_(JQuery.js)模拟刮奖

    百度云盘:传送门 密码:6p5q 纯CSS模拟刮奖效果 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. linux 下使用命令查看jvm信息

    java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...

  5. Java面试题收集(二)

    四.Redis简介 redis为什么这么快 4.1 Redis数据类型 String hash 字典,适用于存储对象 list 安照String元素插入顺序排序,最新插入的最先显示.如热点数据 set ...

  6. MQTT服务器特性支持详情

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. 在MVC项目中使用Ninject

    项目结构图: App_start文件夹中的文件是VS自己创建的,其中NinjectWebCommon类在创建之初并不存在.后面会再次提到! 添加一个Home控制器.代码如下: using Essent ...

  8. qmake生成VS的vcproj/sln工程文件

    qmake 生成的vs工程与环境变量中的 qmakespec相关,可以有两种方法: 1.默认情况下,即环境变量qmakespec为你装的qt for vs的版本,默认生成的为该版本的vs工程,如,你装 ...

  9. mysql5.6 varchar长度不同的情况下group by的效率

    varchar长度短的情况下,基于这个字段的group by效率更高.所以开发在设计表的时候要使该字段在满足业务需求的情况下尽可能的小. ps:本想找源码看看代码那是怎么处理的,直接用vim看文件太累 ...

  10. laravel 浏览器图标的设置方式

    <head> <meta charset="UTF-8"> <title>叮叮书店</title> <link href=&q ...