首先我们来看一下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. Ryubook_1_switch_hub_源码

    一.switching hub by openflow: 用Ryu实现一个有如下功能的switching hub. • Learns the MAC address of the host conne ...

  2. Lodash数组方法中文总结

    LodashAPI总结 Lodash是一个特别特别好用的工具,感觉有了Lodash就没有解决不了的问题了~~~~ 使用初开始 官网 https://www.lodashjs.com/docs/4.17 ...

  3. Ubuntu16.04 python3.4.3升级到python3.7.1

    python有两个版本,一个2版本,使用的是python:另一个是3版本,使用的是python3. 简易安装python后得到的3版本的版本号是python3.4.3. 可以使用下面的命令查看py版本 ...

  4. JavaSE-06 二维数组

    学习要点 二维数组的定义 二维数组内存数据结构 不规则二维数组 二维数组的定义 语法格式 格式一 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. ...

  5. IO 双引号 输出 输入

    #! /usr/bin/perl use strict;use warnings; print "\n---------<STDIN>_store_into_an_array_a ...

  6. Android突破64K限制

    1.添加依赖 android{ defaultConfig{ ... multiDexEnabled true ... } } dependencies{ compile 'com.android.s ...

  7. 从C#程序中调用非受管DLLs

    从C#程序中调用非受管DLLs 文章概要: 众所周知,.NET已经渐渐成为一种技术时尚,那么C#很自然也成为一种编程时尚.如何利用浩如烟海的Win32 API以及以前所编写的 Win32 代码已经成为 ...

  8. CentOS7-Git安装以及使用

    2018-09-14 Git安装 在bash终端中输入命令sudo yum install git回车. (出乎意料的顺利) 在随后出现的交互式对话中输入y即可. 随后,当任务执行完后,在bash中键 ...

  9. 样例GeoQuiz应用开发 第1章

    1. Activity是Android SDK的Activity类的一个具体实例,负责管理用户和信息屏的交互.应用的功能是通过编写一个Activity子类来实现的.简单的可能只有一个子类,复杂的应用则 ...

  10. 简谈Redis

    1.为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发.当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中 ...