首先我们来看一下JDBC操作数据的核心:

Connection

应用程序与数据库之间的桥梁

数据库驱动程序是构建桥梁的基石和材料

DriverManager类是基石和材料的管理员

Statement

桥梁上的汽车。在应用程序和数据库之间运送SQL语句和运行结果

ResultSet

运行查询得到的数据集。由若干行和列组成的数据表,是数据库中数据表的子集,有游标

JDBC基本步骤:

1 注冊驱动

Class.forName(“com.mysql.jdbc.Driver”);

2 建立到数据库的连接

Connection con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/test?user=root&password=root");

3 创建statement

Statement  stmt = con.createStatement();

4 运行SQL语句

int  count= stmt.executeUpdate(“update  student  set  age=25  where  id=1”);

ResultSet  rs= stmt.executeQuery(“select  *  from  student”);

5 处理results

while(rs.next()){

rs.getString(2);

}

对数据进行加入、删除、改动等操作,SQL运行结束就已经完毕

对数据进行查询,查询结果存放在ResultSet对象中

ResultSet对象是满足查询条件的数据行。是数据库表数据的子集

ResultSet

使用游标指向数据行

游标最初定位在第一行之前

boolean  rs.next();

当游标指向某行数据,我们就能够从当前行取出须要的数据

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVmljdG9yX0NpbmR5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

在ResultSet对象中使用getXXX(索引或列名)方法获得数据

使用列名称或索引检索数据

rs.getString(2);

rs.getInt(“age”);

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVmljdG9yX0NpbmR5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

6 关闭JDBC对象

try {

        if(rs!=null){  rs.close();  }

        if(stmt!=null){  stmt.close();  }

        if(conn!=null){  conn.close();  }

    } catch (SQLException e) {  

e.printStackTrace();  

    }

某些步骤的实现方式有多种。比方:注冊驱动……

注冊驱动的方式有多种

1)使用类装载器(Class.forName(“类名”))

Class.forName(“com.mysql.jdbc.Driver”);

2)使用newkeyword实例化驱动类

3)在属性文件里配置jdbc.drivers属性

4)省略驱动程序注冊步骤

使用JDBC4.0以上版本号

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

能够使用newkeyword对驱动进行显式的实例化

语法:

Driver drv = new DriverConstructor();

DriverManager.registerDriver(drv);

在配置文件里指定驱动类名

语法:

jdbc.drivers = driverName

演示样例:

//创建一个test.properties配置文件,在属性文件里写入属性并赋值

//然后在程序中读取配置文件

jdbc.drivers= com.mysql.jdbc.Driver

下面是具体代码:

package util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil {
public Connection getConn() throws IOException, ClassNotFoundException, SQLException{
//得到文件路径
File file=new File("jdbc.properties");
Connection conn=null;
//得到输入流
InputStream input = new BufferedInputStream(new FileInputStream(file));
//得到文件属性
Properties p=new Properties();
//从输入字符流读取属性列表
p.load(input);
//关闭输入流
input.close();
String className=p.getProperty("jdbc.drivers");
String url=p.getProperty("url");
String user=p.getProperty("username");
String password=p.getProperty("password");
//注冊载入驱动
Class.forName(className);
conn=DriverManager.getConnection(url, user, password);
return conn;
}
public void close(Connection conn,PreparedStatement pst,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

获得连接的其它方法:

1)通过DriverManager类获得连接对象

方法

getConnection(String url)

getConnection(String url, String user, String passwd)

getConnection(String url, java.util.properties info)

演示样例

DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”,”root”);

Properties  pro = new  Properties();

pro.setProperty(“user”,”root”);       //键是user,不是username

pro.setProperty(“password”,”root”);

Connection con = DriverManager.getConnection(

“jdbc:mysql://localhost:3306/test”, pro);

2)通过指定的驱动对象直接调用connect()方法

语法

Connection con = Driver.connect(urlString, properties)

演示样例

Driver  drv = new  com.mysql.jdbc.Driver();

Connection  con = null;  

Properties  pro = new  Properties();

pro.setProperty(“user”,”root”);         //键是user,不是username

pro.setProperty(“password”,”root”);

try { 

        con = drv.connect(“jdbc:mysql://localhost:3306/test”, pro);

}catch(SQLException  e){   e.printStackTrace();  }

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Statement相关接口:

Statement:运行SQL语句,对数据库进行操作

executeQuery():查询数据

executeUpdate():加入数据。删除数据。改动数据

PreparedStatement:扩展Statement接口。对预编译的SQL语句进行处理,提高效率

CallableStatement:扩展PreparedStatement接口,运行数据库存储过程

1 Statement对象

创建Statement

Statement对象用来运行SQL语句,对数据进行操作

通过connection.createStatement()方法得到Statement对象

语法

Statement  stm = connection.createStatement();

演示样例

Statement  stm = null;

ResultSet  rs = null;

try{

 stm = connection.crateStatement();

 rs = stm.executeQuery("select  id, name, age  from  student");

 }catch(SQLException e) {}

运行SQL语句

通过Statement对象将SQL语句原样传送到已经建立连接的数据库并运行

查询数据的SQL语句运行后得到的结果集以表数据的形式存储在java.sql.ResultSet对象中,通过ResultSet对象訪问查询结果

executeQuery(sqlString):运行查询相关的SQL语句,返回ResultSet对象

加入,删除,改动数据的SQL语句运行后返回整数。表示受到影响的行数

executeUpdate(sqlString):运行添加。改动,删除相关SQL语句或不返回不论什么内容的SQL语句

演示样例

Statement  stm = con.createStatement();

ResultSet  rs = stm.executeQuery(“select  *  from  student”);

Statement  stm = con.createStatement();

int  count= stm.executeUpdate(“update  student  set  age=25  where  id=1”);

2 PreparedStatement对象:

对SQL语句的编译结果在缓存中保留。提高多次运行的效率

statement每次运行sql语句,相关数据库都要先将sql语句进行编译。然后运行。

而preparedstatement则将sql语句编译的结果保留,能够多次运行。

语法

PreparedStatement pstm = connection.prepareStatement(sqlString);

演示样例

   String  sql = “select  *  from  student  where  id=?”;

pstm = connection.prepareStatement(sql);

pstm.setInt(1, 1);       //setString(),setFloat()

rs = pstm.executeQuery();              //executeUpdate()

……

pstm.setInt(1, 2);

rs = pstm.executeQuery();

3 CallableStatement对象:

1)运行数据库存储过程(数据库中定义的函数)

语法

CallableStatement  cstm = connection.prepareCall(sqlString);

演示样例

CallabeStatement  cstm = null;

try{

   cstm = connection.prepareCall(“{call proc_insert_test(?,?)}”);

   cstm.setString(1, “sunqi”);

   cstm.setInt(2, 33);

   cstm.executeUpdate();

}catch(SQLException e){}

2)存储过程返回值

CallabeStatement  cstm = null;

try{

   cstm = connection.prepareCall(“{call proc_select_test(?)}”);

   cstm.setInt(1, 30);

   rs = cstm.executeQuery();

}catch(SQLException e){}

----------------------------------------------------------------------------------------------------------------------------------------------------------------

JDBC基本应用的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  5. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  6. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  9. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. BEGIN - 开始一个事务块

    SYNOPSIS BEGIN [ WORK | TRANSACTION ] DESCRIPTION 描述 BEGIN 初始化一个事务块, 也就是说所有 BEGIN 命令后的用户语句都将在一个事务里面执 ...

  2. filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration interface"

    filezilla server FTP 安装报错   "could not load TLS network. Aborting start of administration inter ...

  3. PHP:Invalid argument supplied for foreach()错误原因及解决办法

    在php中使用foreach循环遍历时报Invalid argument supplied for foreach()错误,是因为循环的数据不是一个有效的数组. 因此我们只要在foreach之前判断一 ...

  4. 利用filter过滤去重

    var r, ary = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; r ...

  5. sublime text 快捷键记录

    sublime常用快捷键 Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑) Ctrl+G 跳转到相应的行 Ctrl+J 合并行(已选择需要合并的多行时) Ctrl ...

  6. 【2018百度之星初赛 B】1001并查集 1004二分 1006不等式

    1001 degree 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6380 并查集向图中加点,分别记录与初始度数最多的点 直接相连的点数.独立的点数 ...

  7. 零基础入门学习Python(24)--递归:汉诺塔

    知识点 这节课主要讲解用递归的方法,实现汉诺塔的解答 对于游戏的玩法,我们可以简单分解为三个步骤: 1) 将前63个盘子从X移动到Y上. 2) 将最底下的第64个盘子从X移动到Z上. 3) 将Y上的6 ...

  8. Linux命令学习(5):more和less

    引子 平常工作中经常需要查看很大的文本文件,如果用vi打开的话会非常慢,所以平常都用less,但是并没有很系统地学习过less的用法,今天总结一下less和more的用法. 经过学习我发现less比m ...

  9. python3.x Day5 异常处理

    异常处理: 预计可能会发生的异常,明确如果发生,如何处理,不过一般不参与业务逻辑,也不要一次性捕捉全部异常,不然可能程序就不可控了. data={} mmm=[] try: #捕获异常, data[& ...

  10. Mvc Action可以通过jsonp方式调取

    jsonp其实是一种特殊的数据获取格式,所以在Aicton直接调取的时候肯定会出现问题,下面代码是对于jsonp调取做的处理 protected virtual ActionResult Create ...