JDBC基本应用

news/2024/5/18 21:49:15 标签: mysql, jdbc

首先我们来看一下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();

当游标指向某行数据,我们就可以从当前行取出需要的数据


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

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

rs.getString(2);
rs.getInt(“age”);


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)使用new关键字实例化驱动类

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

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

使用JDBC4.0以上版本

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

可以使用new关键字对驱动进行显式的实例化

语法:

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){}

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



http://www.niftyadmin.cn/n/892392.html

相关文章

JDBC高级特性(一)结果集,批量更新

一、ResultSet的高级特性 1 可滚动ResultSet 1)向前和向后滚动 滚动特性 在JDBC初期版本中, ResultSet仅能向前滚动 在JDBC后续版本中, ResultSet默认能向前滚动或前后滚动 迟缓滚动:记录集可前后滚动,不受数据库数据更新影响 灵敏滚动…

JDBC高级特性(二)事务、并发控制和行集

一、事务 事务是指一个工作单元,它包含了一组添加,删除,修改等数据操作命令,这组命令作为一个整体向系统提交执行,要么都执行成功,要么全部恢复 在JDBC中使用事务 1)con.setAutoCommit(false…

JDBC高级特性(三)分布式事务和JTA基本原理

在进入主题之前我们首先来了解一下JNDI和连接池~ 一、JNDI 1)是一组在Java应用中访问命名和目录服务的API(Java命名与目录接口) 命名服务将名称和对象联系起来,使得我们可以通过名称访问对象。 目录服务是命名服务的扩展,两者之间的关键差…

分布式协议之两阶段提交协议(2PC)和改进三阶段提交协议(3PC)

一、 事务的ACID 事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,其中,ACID是事务的基本特性。 A是Atomicity,原子性。一个事务往往涉及到许多的子操作,原子性则保证这些子操作要么都做,要么…

Java实现二叉搜索树节点的删除

前言: 之前写过一篇关于二叉搜索树的博客:Java对二叉搜索树进行插入、查找、遍历、最大值和最小值的操作 二叉查找树重要性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;…

Spring IOC详细用法

1. 简介 IOC-全称Inversion of Control,中文解释:控制反转。另外,IOC又称DI(全称)Dependency Injection,中文解释:依靠注入。 2. 注入类型 a)setter(重要) b)构造方法(可…

Spring AOP详细用法

《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下: 切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”…

mybatis实战教程之开发环境搭建、以接口的方式编程、实现数据的增删改查

写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了&#x…