JDBC——基于Mysql的基本操作

一、JDBC连接数据库6个步骤:

在这里插入图片描述
1、加载并注册驱动程序

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),通过java.lang.Class类的静态方法forName(String className)实现。
例:

   try{//加载MySql的驱动类    
         Class.forName("com.mysql.jdbc.Driver") ;    
    }catch(ClassNotFoundException e){    
         System.out.println("找不到驱动程序类 ,加载驱动失败!");    
         e.printStackTrace() ;    
    }    

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、创建数据库的连接

数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。

使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例:

  //连接MySql数据库   
     String url = "jdbc:mysql://127.0.0.1:3306/student";
		String user = "root";
		String password = "";
		try {
			Connection con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
		    System.out.println("数据库连接失败!");    
			e.printStackTrace();
		}

3、创建一个Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:

  1. 执行静态SQL语句。通常通过Statement实例实现。
  2. 执行动态SQL语句。通常通过PreparedStatement实例实现。

具体的实现方式:

 Statement stmt = con.createStatement() ;    
 PreparedStatement pstmt = con.prepareStatement(sql) ;  

4、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute

  1. (类型不定,一般会同时有很多种类型)executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
  2. (int型)executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
  3. (boolean型)execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

具体实现的代码:

 ResultSet rs = stmt.executeQuery(sql) ;    
     int rows = stmt.executeUpdate(sql) ;    
 boolean flag = stmt.execute(sql) ;    

5、遍历结果集

两种情况:

  1. 执行更新返回的是本次操作影响到的记录数。
  2. 执行查询返回的结果是一个ResultSet对象。

ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){    
     String name = rs.getString("name") ;    
     String pass = rs.getString(1) ; // 此方法比较高效    
 }    

(列是从左到右编号的,并且从列1开始)

6、关闭JDBC对象资源

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

  1. 先关闭resultSet
  2. 再关闭preparedStatement
  3. 最后关闭连接对象connection

例:

if(rs !=null){   // 关闭结果集    
   try {
      rs.close();
   } catch (SQLException e) {
      e.printStackTrace();
   }
}    
  if(stmt !=null){   // 关闭声明    
   try {
      stmt.close();
   } catch (SQLException e) {
      e.printStackTrace();
   }
}
if(conn !=null){  // 关闭连接对象    
   try {
      conn.close();
   } catch (SQLException e) {
      e.printStackTrace();
   }
}

1、查询:

package jdbc1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.management.RuntimeErrorException;
import com.mysql.cj.jdbc.Driver;

public class JDBC1 {
	public static void main(String[] args) {
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			// 1、注册并加载驱动
			//Driver driver = new Driver();
			//DriverManager.registerDriver(driver);//这种注册方式会注册两次,推荐使用下面那种
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2、获取连接对象
			String url = "jdbc:mysql://127.0.0.1:3306/student";
			String user = "root";
			String password = "";
			con = DriverManager.getConnection(url, user, password);
			// 3、获取操作数据库的对象
			stmt = con.createStatement();
			// 4、向数据库发送查询语句
			String sql = "select * from student ";
			rs = stmt.executeQuery(sql);
			// 5、遍历结果集,获取查询对象
			while (rs.next()) {// 遍历一行后,才会跳转到下一行
				int sno = rs.getInt("sno");//
				String sname = rs.getString(2);// 和上一行不同的写法
				String sex = rs.getString(3);
				System.out.println(sno + " " + "" + sname + " " + sex);
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {

			// 6.关闭连接,释放资源
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (con != null) {
				try {
					con.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}
}

2、更新:

package jdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBC1 {
	public static void main(String[] args) {
		Connection con = null;
		Statement stmt = null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2、获取连接对象
			String url = "jdbc:mysql://127.0.0.1:3306/student";
			String user = "root";
			String password = "";
			con = DriverManager.getConnection(url, user, password);
			// 3、获取操作数据库的对象
			stmt = con.createStatement();
			// 3.创建SQL语句
			String sql = "insert into student values(121530601,'张三','女',16,6)";
			// 4. 执行SQL语句
			int row = stmt.executeUpdate(sql);
			System.out.println(row);
		} catch (Exception e) {
		} finally {
			// 5. 释放资源
			if (stmt != null) {
				try {
					stmt.close();
				} catch (Exception e) {
					e.printStackTrace(); // 打印异常
				}
			}
			if (con != null) {
				try {
					con.close();
				} catch (Exception e) {
					e.printStackTrace(); // 打印异常
				}
			}

		}
	}
}
二、使用ResultSet更新数据:

ResultSet是否滚动
在这里插入图片描述
ResultSet是否可更新
在这里插入图片描述

查询学号为121530602的学生的基本信息输出后修改其姓名:

            // 3、获取操作数据库的对象
			stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			// 4、向数据库发送查询语句
            String sql = "select * from student where sno=121530602";
			rs = stmt.executeQuery(sql);
			// 5、遍历结果集,获取查询对象
			System.out.println("学号"+"\t\t"+"姓名"+"\t\t"+"性别"+"\t\t"+"年龄"+"\t\t"+"班级");
			while (rs.next()) {// 遍历一行后,才会跳转到下一行
				int sno = rs.getInt("sno");//
				String sname = rs.getString(2);// 和上一行不同的写法
				String sex = rs.getString(3);
				String age = rs.getString(4);
				String Class = rs.getString(5);
				System.out.println(sno + "" + "\t\t" + sname + "\t\t" + sex+"\t\t"+age+"\t\t"+Class);
			}
			rs.absolute(1); 
			rs.updateString("sname","赵四"); 
			rs.updateRow(); //将当更新保存到数据库

输出所有学生的所有信息,然后添加一名新学生:

			// 3、获取操作数据库的对象
			stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			// 4、向数据库发送查询语句
			String sql = "select * from student";
			rs = stmt.executeQuery(sql);
			// 5、遍历结果集,获取查询对象
			System.out.println("学              号"+"\t\t"+"姓名"+"\t\t"+"性别"+"\t\t"+"年龄"+"\t\t"+"班级");
			while (rs.next()) {// 遍历一行后,才会跳转到下一行
				int sno = rs.getInt("sno");//
				String sname = rs.getString(2);// 和上一行不同的写法
				String sex = rs.getString(3);
				String age = rs.getString(4);
				String Class = rs.getString(5);
				System.out.println(sno + "" + "\t\t" + sname + "\t\t" + sex+"\t\t"+age+"\t\t"+Class);
			}
			   rs.moveToInsertRow(); 
			   rs.updateString("sno","121530605");  
			   rs.updateString("sname","老八");  
			   rs.updateString("sex","男" );  
			   rs.updateInt("age", 26); 
			   rs.updateInt("Class",8);                 
			   rs.insertRow();
三、预编译语句实现数据更新:

添加数据:

PreparedStatement pStmt = con.prepareStatement("insert  into student (name,pwd,email) values(?,?,?)");
pStmt.setString(1,"dream");
pStmt.setString(2,"111");
pStmt.setString(3, "dd@a.com");
int rtn= pStmt.executeUpdate();

修改数据:

PreparedStatement pStmt = con.prepareStatement("update student set pwd=?,email=? where name=?");
pStmt.setString(1,222");
pStmt.setString(2,“a@a.c");
pStmt.setString(3,“dream");
int rtn= pStmt.executeUpdate();

删除数据:

PreparedStatement pStmt = con.prepareStatement("delete  from student where name=?");
pStmt.setString(1,"dream");
int rtn= pStmt.executeUpdate();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值