JDBC概念以及使用JDBC操作数据库完成DML DDL DQL语句

文章目录

JDBC的基本使用

java语言使用JDBC规范操作数据库(单条更改)

package com.qianfeng_jdbc_01;

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

/**
 * 
 * JDBC的基本使用:本质就是sun公司提供的一套接口规范:数据库厂商提供的驱动实现类
 * 
 * 1)导包---mysql-connector-java-5.1.37-bin.jar 
 * 2)注册驱动
 * 3)获取数据库连接对象
 * 4)准备sql
 * 5)通过数据库连接对象获取执行对象
 * 6)执行sql语句
 * 7)返回结果
 * 8)释放资源
 * 
 * @author zhangyang
 *
 */
public class JdbcDemo {
	
	public static void main(String[] args) throws Exception {
		//1)导入驱动jar包
		//2)注册驱动
		Class.forName("com.mysql.jdbc.Driver") ;
		
		//3)获取数据库连接对象
		//java.sql 类 DriverManager :驱动管理类(就是JDBC驱动服务)
		//public static Connection getConnection(String url, String user,String password)
		//url:统一资源定位符号:是链接的具体哪个数据库名
		//user:数据库的用户名
		//password:数据库的密码
		Connection conn = DriverManager.getConnection(
				"jdbc:mysql://localhost:(127.0.0.1)3306/mydb_05", "root", "123456") ;
		
		//4)准备sql语句
		//操作mydb_05里面账户表;account
		String sql = "update account set balance = balance + 500 where id = 1" ; 
		
		//5)通过数据库连接对象Cononection获取执行对象java.sql.Statement:执行静态sql语句
		//Statement createStatement():创建执行对象并将sql准备发送数据库中
		Statement stmt = conn.createStatement() ;
		
		//6)执行sql:执行对象Statement
		//int executeUpdate(String sql)
		//执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
		//7)返回结果:返回值:影响的行数
		int count = stmt.executeUpdate(sql) ;
		System.out.println("影响了"+count+"行");
		
		//8)释放资源
		stmt.close();
		conn.close();
		
		
	}
}

day22_ 2020_11 10

1.DML

1.1)使用jdbc完成基本DML删除语句

package com.qf.jdbc_01;

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

/**
 * 使用jdbc完成基本dml删除语句
 * @author zhangyang
 *
 */
public class JDBCDemo {
   
	
	

	public static void main(String[] args) {
   
		
		Statement stmt = null ;
	    Connection conn = null ;
		try {
   
			//1)导入jar包
			//2)注册驱动
			Class.forName("com.mysql.jdbc.Driver") ;
			//3)获取数据库的链接对象
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/mydb_05", 
					"root", 
					"123456");
			//4)准备sql语句
			String sql = "delete from account where id = 2" ;
			
			//5)通过连接对象获取执行对象
		   stmt = conn.createStatement() ;
			//6)执行更新
			int count = stmt.executeUpdate(sql) ;
			if(count>0) {
   
				System.out.println("删除成功,影响了"+count+"行");
			}	
		} catch (ClassNotFoundException e) {
   
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
   
			e.printStackTrace();
		}finally {
   
			//7)释放资源
			if(stmt!=null) {
   
				try {
   
					stmt.close();
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
			}
			
			if(conn!=null) {
   
				try {
   
					conn.close();
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
			}
		}
	}
}

2.使用JDBC操作DDL语句

2.1)创建一张新表

package com.qf.jdbc_01;

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

/**
 * 使用JDBC操作DDL语句
 * 	在mydb_05数据中创建一张学生表
 * 		字段
 * 			name
 * 			age
 * 			gender
 * 			address
 * @author zhangyang
 *
 */
public class JDBCDemo2 {
   
	
	private static Connection conn;
	private static Statement stmt;

	public static void main(String[] args) {
   
		
		try {
   
			//1)导包
			//2)注册驱动
			Class.forName("com.mysql.jdbc.Driver") ;
			//获取连接
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/mydb_05", "root", "123456");
			//准备sql
			String sql = "create table student("
					+ "id int primary key auto_increment,"
					+ "name varchar(10),"
					+ "age int,"
					+ "gender varchar(2),"
					+ "address varchar(20)"
					+ ");" ;
			stmt = conn.createStatement();
			//执行更新
			int count = stmt.executeUpdate(sql) ;
			System.out.println(count);
			
		
		} catch (ClassNotFoundException e) {
   
			e.printStackTrace();
		} catch (SQLException e) {
   
			e.printStackTrace();
		}finally {
   
			if(stmt!=null) {
   
				try {
   
					stmt.close();
				} catch (SQLException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null) {
   
				try {
   
					conn.close();
				} catch (SQLException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

3.操作DQL语句查询

package com.qf.jdbc_02;

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

/**
 * 使用JDBC
 * 
 * 	操作DQL语句查询
 * @author zhangyang
 *
 */
public class jdbcDemo {
   

	public static void main(String[] args) {
   
		Connection conn = null ;
		Statement stmt = null  ;
		ResultSet rs = null ; // 结果集
		
		
		try {
   
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver") ;
			//获取连接
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/mydb_05", 
					"root", 
					"123456") ;
			
			//准备sql语句
			String sql = "select * from student" ;
			//获取执行对象
			stmt = conn.createStatement() ;
			
			//执行查询
		   rs = stmt.executeQuery(sql) ;
		   
		   //boolean next():来判断是否存在有效数据,返回值true:存在有效数据
		   
		   //判断
		   /*
		   if(rs.next()) {
			   //获取数据
			   //通过列的索引值获取
			   //xxx getXXX(int columNum)
			   int id = rs.getInt(1) ; //id值//第一列
			   String name =rs.getString(2) ;//第二列
			   int age = rs.getInt(3) ;
			   String gender = rs.getString(4) ;//第四列
			   String address =rs.getString(5) ;
			   System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+address);
		   }
		   
		   if(rs.next()) {
			   //获取数据
			   //通过列的索引值获取
			   //xxx getXXX(int columNum)
			   int id = rs.getInt(1) ; //id值//第一列
			   String name =rs.getString(2) ;//第二列
			   int age = rs.getInt(3) ;
			   String gender = rs.getString(4) ;//第四列
			   String address =rs.getString(5) ;
			   System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+address);
		   }
		   
		   if(rs.next()) {
			   //获取数据
			   //通过列的索引值获取
			   //xxx getXXX(int columNum)
			   int id = rs.getInt(1) ; //id值//第一列
			   String name =rs.getString(2) ;//第二列
			   int age = rs.getInt(3) ;
			   String gender = rs.getString(4) ;//第四列
			   String address =rs.getString(5) ;
			   System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+address);
		   }
		   */
		   
		   //加入循环改进while循环
		   /*
		   while(rs.next()) {
			   //获取数据
			   //通过列的索引值获取
			   //xxx getXXX(int columNum)
			   int id = rs.getInt(1) ; //id值//第一列
			   String name =rs.getString(2) ;//第二列
			   int age = rs.getInt(3) ;
			   String gender = rs.getString(4) ;//第四列
			   String address =rs.getString(5) ;
			   System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+address);
		   }
		   */
		   
		   //方式2:获取数据
		   while(rs.next()) {
   
			   //通过列的名称获取数据
//			   ///xxx getXXX(String columName)
			   int id  = rs.getInt("id") ;//第一列是id
			   String name = rs.getString("name"); //第二列的名称是name
			   int age = rs.getInt("age") ;//第三列名称是age
			   String gender =rs.getString("gender") ;//第四列是gender
			   String address =rs.getString("address") ;//第五烈是address
			   System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+address);
					  
		   }
		   
			
		} catch (ClassNotFoundException e) {
   
			e.printStackTrace();
		} catch (SQLException e) {
   
			e.printStackTrace();
		}finally {
   
			
			
			//释放资源
			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(conn!=null) {
   
				try {
   
					conn.close();
				} catch (SQLException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

4jdbc相关核心类以及核心接口的API

1.	com.mysql.jdbc.Driver   ---->class 驱动类 
			implements	java.sql.Driver 接口 (驱动程序)
			
  Class.forName("com.mysql.jdbc.Driver") ;为了保证向下兼容性(JDK6以前)
  
  
  com.mysql.jdbc.Drvier----->这个类一加载,静态代码也会随之加载
  
  	static{
   
  		 DriverManager.registerDriver(Driver driver) ---- 这里面已经注册过了
  	}
  	
2.获取数据连接对象
	核心类
	DriverManager -------->驱动管理类----管理JDBC驱动程序服务!
		成员方法
				public static void registerDriver(Driver driver):注册驱动
				public static Connection getConnection(	
										String url,
       									String user,
                                       String password):获取数据库的连接对象
                                通过创建系统资源发送到数据库的一种url请求 
                参数1:
                	url:统一资源定位符
                	协议://域名或者ip地址:端口号/链接具体地址
                	jdbc:mysql://localhost:3306/数据库名称
                 参数2:用户名:root用户
                 参数3:密码
                                       
3.Connection---java.sql.Connection       
		与指定的数据库的一种会话!----通过系统资源获取
		 
		成员方法
			有关事务管理相关的方法
			void setAutoCommit(boolean autoCommit):设置数据库的提交方式 :
					参数为true:表示自动提交
					参数为false:表示禁用自动提交
			void rollback():事务的回滚
			void commit():事务的提交
			
			与数据库执行对象相关方法
				Statement createStatement():创建Statement对象,将指定sql发送到数据库中
				PreparedStatement prepareStatement(String sql):将
				
					类似于
							insert into account values(?,?,?) ; sql语句先进行预编译
			

4.Statement ----java.sql.Statement
	执行对象:执行静态sql语句
	
	静态的sql语句
			insert into account values(1,'张三',1000),(2,'李四',1000);
			update account set balance = balance -500 where id = 1 ;
			
			成员方法
			int executeUpdate(String sql) : 通过Statement将静态sql语句发送到数据库中进行操作
							执行增删该
			
			ResultSet executeQuery(String sql):执行查询语句select...
						select * from student ;
			
			
5.PreparedStatement ----java.sql.PreparedStatement:预编译对象
			insert into account values(?,?,?) ;
			
				int executeUpdate():对预编译对象中sql语句直接操作!
				
6.ResultSet ----java.sql.ResultSet:表示数据库结果集的数据表 	
				
				成员方法
					boolean next():判断下一行是否存在有效数据!
					
					XXX getXXX(int columnIndex):根据列的索引值获取表中结果数据:索引值1开始
						如果是第一列,则为1
						....第二列,则为2
					XXX getXXX(String columnLabel):根据列的名称获取

5.手动jdbc工具类封装的应用

5.1)手动jdbc工具类的封装

5.1.1)src下的jdbc.properties文件,存放的是属性集合需要遍历的数据
url=jdbc:mysql://localhost:3306/mydb_05
user=root
password=123456
driverClass=com.mysql.jdbc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值