JDBC原理以及使用Statement访问数据库

0.JAVA链接SQL Server

https://blog.csdn.net/weixin_42649617/article/details/106054335

一、介绍

  1. JDBC: Java DateBase Conectivity 可以为多种关系型数据库DBMS 提供统一的范围跟方式,目的就是用Java来操作数据库。
  2. JDBC API:提供各种操作访问数据库的接口, 常见的:
    1. Conection: 连接数据库
    2. Statement 发送SQL语句,增删改查
    3. PreparedStatement: 调用数据库中的 存储过程/存储函数
    4. ResultSet: 返回的结果集
  3. JDBC DriverManager:管理不同的数据库驱动。
  4. 各种数据库驱动程序:由相应的数据库厂商提供的,连接/直接操作数据库。
    在这里插入图片描述

二、JDBC API的三大功能

  1. 使java程序与数据库建立连接 Connection
  2. 向数据库发送SQL语句 Statement(PreparedStatement) :增删改查
  3. 返回执行结果 ResultSey
    在这里插入图片描述
    在这里插入图片描述

三、相关方法使用 及 使用步骤

0、方法介绍:

  • DriverManager : 管理jdbc驱动
  • Statement
    • 增删改:executeUpdate()
    • 查询:executeQuery()
  • PreparedStatement
    • 增删改:executeUpdate()
    • 查询:executeQuery()
    • 赋值操作:setXxx();
    • PreparedStatement对象被称为预处理(预编译)语句对象,使用预处
      理语句不仅提高了数据库的访问效率,而且方便了程序的
      编写。 在创建PreparedStatement对象时就指定了sql语句,设置参数后直接替换就可以了。也就是说循环执行多条sql语句实际上运行的是同一条但参数不同的sql语句,这里仔细体会替换的含义。
  • CallableStatement : 调用数据库中的 存储过程/存储函数
  • Connection : 连接
    • Connection产生Statement对象 :createStatement();
    • connection产生PreparedStatement对象:prepareStatement();
    • Connection产生CallableStatement对象 :prepareCall();
  • ResultSet :保存结果集
    • next() : 光标下移 , 弹断是否有下一跳数据; true/false
    • previous() : 光标上移动 ; true/false
    • getXxx(字段名 | 位置); 获取具体的字段值

1、第一步: 加载具体驱动类
不同数据库的driveName 不一样

Class.forName(driveName);    

2、第二步: 连接数据库
不同数据库的连接字符串URL也不一样

Connection connection = DriverManager.getConnection(URL, userName, pwd);

3、第三步:获得发送SQL语句的权限

//statement
Statement statement = connection.createStatement();		

4、第四步:发送SQL语句,并获得结果

//增删改查数据
int count = statement.executeUpdate("填sql语句"); // 	
//查询数据
ResultSet result = statement.executeQuery("填sql语句"); // 	

5、第五步:处理结果

//处理增删改查结果
if(count>0)   //count来自第四步
	System.out.println("一行受到影响");
	
//处理查询结果,executeQuery返回的是一个列表集
while(result.next()) {    //result来自第四步
	String sno = result.getString("Sno");
	int grade = result.getInt("Grade");
	System.out.println(sno+"---"+grade);
}

//处理查询结果,executeQuery返回的是一个列表集
while(result.next()) {    //result来自第四步
	String sno = result.getString(1);   //所查表的第一列
	int grade = result.getInt(3);		//所查表的第三列
	System.out.println(sno+"---"+grade);
}

四、Statement与preparedStatement的区别

Statement

statement = connection.createStatement();
result = statement.executeQuery(sql);

PreparedStatement创建的时候就传入Sql语句

PreparedStatement pre = connection.prepareStatement(“sql语句”);
int count = pre.executeUpdate();

PrepareStatement 预编译举例

String sql = "insert into student values(?,?,?)"
PreparedStatement pre = connection.prepareStatement(sql);
pre.setString(1,'2015121');  //第一个问号是: 2015121
pre.setInt(2,3);  //  第二个问号是:3
pre.setInt(3,85);  // 第三个问号是:85

prepareStatement 预编译再举例

String sql = "Select Sno,Cno,Grade from SC where Sno like ?";
PreparedStatement pre = connection.prepareStatement(sql);
pre.setString(1,"%520%")//通配符
reslt = pre.executeQuery();

String sql ="select count(*) from user_information where userName=? and passWord=?"
statement = connection.prepareStatement(sql);
statement.setString(1,user);
statement.setString(2, pwd);
//返回结果
result = statement.executeQuery();	  //executeQuery() 返回ResultSet类型
if(result.next())      //result取数据时,判断很重要, 没有一定会报错
	count =result.getInt(1);

五、整体代码示例

package 连接SQL_SERVER_标准代码;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JAVA_SQL_DEMO {
	private final static String driveName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private final static String URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=SCC";  //SCC是我的数据库名
	private final static String userName = "登录名";  //这里填用户名
	private final static String pwd = "密码";			//这里填登录名
	
	//数组增删改查
	public static void update(String sql) throws ClassNotFoundException, SQLException {
		Connection connection = null;
		Statement statement = null;
		try {
			//第一步:  加载具体驱动类
			Class.forName(driveName);    
			System.out.println("加载驱动成功\n");

			//第二步: 连接数据库
			connection = DriverManager.getConnection(URL, userName, pwd);
			System.out.println("连接数据库成功");

			//第三步:获得发送SQL语句的权限
			statement = connection.createStatement();
			
			//第四步:发送SQL语句
			int count = statement.executeUpdate(sql); // executeUpdate 指的是更新数据
			
			//第五步:处理结果   
			if (count > 0) {
				System.out.println("插入成功");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(statement!=null) statement.close();
				if(connection!=null) connection.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	//数据查询
	public static void Query(String sql) throws ClassNotFoundException, SQLException {
		Connection connection = null;
		Statement statement = null;
		ResultSet result =null;
		try {
			//第一步:  加载具体驱动类
			Class.forName(driveName);    
			System.out.println("加载驱动成功\n");

			//第二步: 连接数据库
			connection = DriverManager.getConnection(URL, userName, pwd);
			System.out.println("连接数据库成功");
			
			//第三步:获得发送SQL语句的权限
			statement = connection.createStatement();
			
			//第四步:发送SQL语句,并获得结果
			result = statement.executeQuery(sql); // executeUpdate 指的是更新数据
			
			//第五步:处理结果   		
			while(result.next()) {
				String sno = result.getString("Sno");  
				int grade = result.getInt("Grade");
				System.out.println(sno+"---"+grade);
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				//后建立的先关闭
				if(result!=null) result.close();
				if(statement!=null) statement.close();
				if(connection!=null) connection.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		//增删改查
		update("insert into SC values(123,20,30)");
		
		//数据查询
		Query("select Sno,Grade from SC");
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值