24.JDBC-基础操作

JDBC-基本使用

一、初识JDBC

本节目标

  • 掌握JDBC的基本概念
  • 理解JDBC的本质
  • 掌握JAR包制作与JAR包使用
什么是JDBC

Java DateBase Conctivity(JAVA数据库连接),是有SUN制定的一套用于访问关系型数据库的接口。

面向接口编程:

接口调用方 接口的实现方

好处:解耦(解除耦合)

//喂养宠物
Cat{
    eat(){eat.....}
}

//调用方
main(){
    Cat cat = new Cat();
    cat.eat()
}

//弊端:假如某一天你想养一只狗
Dog{
    eat(){}
}

//对于调用方需要更改代码
main(){
    Dog dog = new Dog()
        dog.eat()
}
//耦合--代码的使用方(上层的调用者与底层实现强关联)--代码可拓展性非常差
//解决方案--面向接口编程
interface Pet{
    eat();
    play()
}

Dog implemts Pet{
    eat(){eat的实现}
}

//上层的调用者
main(){
    Pet pet = new Dog()
        pet.eat();//调用接口其实真实调用实现类
       pet.play();
}

image-20210806115622867

总结:为什么需要JDBC

对于上层使用者(程序猿)我们不需要去关心各大数据库的具体实现。我们只面向根据JDBC接口进行编程即可,便于程序的可扩展和可维护性。

JDBC的本质

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6kEb4Eun-1628330229686)(https://raw.githubusercontent.com/li573925122/image/master/img/20210806141849.png)]

image-20210806141959660

public interface DBHanld {
	//向数据库中添加数据
	void insert();
}
public class DBHanldImp implements DBHanld{
	//当前是DB2的产商,insert针对DB2
	@Override
	public void insert() {
		System.out.println("DB2添加数据成功");
	}
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
	//使用的MySQL 
	 //DBHanld dbHanld = new DBHanldImp();  //通过反射方式实现字符串创建对象
	
	  InputStream resourceAsStream = MainTest.class.getClassLoader().getSystemResourceAsStream("db.properties");
	  Properties pro = new Properties();
	  pro.load(resourceAsStream);
	  String str = pro.getProperty("className");//通过读取配置文件将外部的配置读进来了
	  
	  DBHanld  dbHanld = (DBHanld) Class.forName(str).newInstance();//创建了全类名对象
	  dbHanld.insert();//真实调用是调用实现类
  }
JAR的作用

作用:封装了一些代码

Eclipse制作JAR包:

右键 —>export–>jar—>选择你到处的Java文件–>导出即可

二、JDBC基本使用

本节目标

  • 掌握JDBC连接数据库的核心步骤
  • 掌握Driver接口的使用
  • 掌握DriverManager使用
  • 掌握Property类的使用
  • 掌握JDBC连接工具类的封装
  • 掌握Statement进行数据的
  • 理解以面向对象方式编程
  • 掌握PrepareStatement进行数据表增删改查
1、导入数据库的JDBC的实现(数据库驱动)

image-20210806143349755

在项目上右键–>new–>folder

image-20210806160528092

把JAR拷贝进去

注意:JAR版本和数据库的版本要一致 mysql-connector-java-5.1.37-bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OneqmKLC-1628330229693)(https://raw.githubusercontent.com/li573925122/image/master/img/20210806143751.png)]

2、加载驱动
Class.forName(driver);
3、获取数据库连接
Connection connection = DriverManager.getConnection(url,uname,pass);

编写配置文件:

在src下新建一个db.properties

src–>右键–>new–>others–>搜索file–>点file–>db.properties(注意:后缀必须是properties)

image-20210806161015656

读取外部配置文件:

InputStream is = 
    //1、将指定文件转为文件输入流
    TestConnection02.class.getClassLoader().getResourceAsStream("db.properties");
//2、创建一个Propties对象java.util.Properties
Properties properties = new Properties();
//3、将第一步中文件输入流加载近properties
properties.load(is);
//4.可以通过key形式读取
driver= properties.getProperty("driver");  //通过key获取值
url = properties.getProperty("url");//ctrl+alt+向下
uname = properties.getProperty("uname");
pass = properties.getProperty("pass");
获取数据库连接工具类的封装

注意:1.工具类是放在xxx.util包中

​ 2.方法往往是静态方法(方便调用)


		//1.读取配置文件
		  //将文件转为输入流
		InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
		 //Properties文件需要用java.util.Properties的类进行解析
		 Properties pro = new Properties();
		 //通过Properties的load方法进行解析
		 try {
			pro.load(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//通过配置文件中配的key去获取值
		 String driver = pro.getProperty("driver");
		 String url = pro.getProperty("url");
		 String uname = pro.getProperty("uname");
		 String pass = pro.getProperty("pass");
		
		//2.通过DriverManager的getConnection()方法获取数据库的连接
		  //加载驱动
		 Connection connection = null;
		 try {
			Class.forName(driver);
			 //获取数据库的连接
			 connection = DriverManager.getConnection(url,uname,pass);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 return connection;
	
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test63_3
uname=root
pass=123456
4、操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMq9krfy-1628330229695)(https://raw.githubusercontent.com/li573925122/image/master/img/20210806174512.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a31EEGL2-1628330229696)(https://raw.githubusercontent.com/li573925122/image/master/img/20210806174620.png)]

更新操作
  1. 获取数据库连接

  2. 获取Statement对象

  3. 准备一个SQL语句

  4. 调用对应的方法执行SQL

  5. 处理结果

  6. 关闭相关资源(从里往外关闭)

    	public static void main(String[] args){
    		//获取数据库连接
    		Connection conn = DBUtil.getConnection();
    		//1.获取对象
    		Statement statement = null;
    		int count = 0;
    		try {
    			statement = conn.createStatement();
    			//2.调用方法执行SQL  excuteUpdate(sql)--执行更新类的操作 insert update delete 返回一个int类型的值,这个值代表受影响的行数
    			//                  excuteQuery(sql)--执行查询类的操作   select
    			String sql ="INSERT INTO student VALUES(DEFAULT,'郑爽','赚钱')";
    			count = statement.executeUpdate(sql);
    			if(count>0) {
    				System.out.println("执行成功");
    			}else {
    				System.out.println("执行失败");
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally {
    			//操作完毕后记得关闭数据库的连接
    			if(statement!=null) {
    				try {
    					statement.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    			}
    			if(conn!=null) {
    				try {
    					conn.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    
    ResultSet结果集

    结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.

    结果集读取数据的方法主要是getXXX(),他的参数可以是整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。如果对应那列 是空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false.使用getString()可以返回所有的列的值,不过返回的都是字符串类型的。XXX可以代表的类型有: 基本的数据类型如整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),还包括一些特殊的类型,如:日 期类型(java.sql.Date),时间类型(java.sql.Time),时间戳类型(java.sql.Timestamp),大数型 (BigDecimal和BigInteger等)等。还可以使用getArray(intcolindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。使用 getAsciiStream(intcolindex/String colname)可以获得该列对应的当前行的ascii流。也就是说所有的getXXX方法都是对当前行进行操作。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGAJcelN-1628330229696)(https://raw.githubusercontent.com/li573925122/image/master/img/20210806175426.png)]

     while(resultSet.next())//将指针指向第一行数据
    	    {
    		   System.out.println(resultSet.getInt("id"));
    		   System.out.println(resultSet.getString("name"));
    		   System.out.println(resultSet.getString("desc"));
    	    }
    
    public static void main(String[] args) throws SQLException {
        //获取数据库连接
        Connection conn = DBUtil.getConnection();
        //获取Statement对象
        Statement statement = conn.createStatement();
        //准备一个SQL语句  -- 查询所有的学生
        String sql = "SELECT * FROM student";
        //调用excuteQuery方法进行查询
        ResultSet resultSet = statement.executeQuery(sql);
        //resultSet   2组重要方法   1、next()  -- 判断指针后面有没有下一行数据,如果有数据会将指针移向下一行
        //2、getXXX(index/columName)来获取数据
        while(resultSet.next())//将指针指向第一行数据
        {
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
            System.out.println(resultSet.getString("desc"));
        }
        //关闭资源
    }        
    

三、作业

1、在MySQL中创建一个student表,向其中添加一条或多条记录,然后在控制台输出目前表中记录的总数。

2、设计一后台管理系统,要求如下:

可以对用户进行管理:用户表如下(id(主键) username password name age sex String )

具体功能:

1、注册 2、登录 3、查询所有 4、修改(只能修改本身) 4、注销

String(“name”));
System.out.println(resultSet.getString(“desc”));
}
//关闭资源
}


### 三、作业

1、在MySQL中创建一个student表,向其中添加一条或多条记录,然后在控制台输出目前表中记录的总数。

2、设计一后台管理系统,要求如下:

可以对用户进行管理:用户表如下(id(主键) username password name age sex String )

具体功能:

1、注册    2、登录   3、查询所有   4、修改(只能修改本身)   4、注销 

备注:登录之后才能实现的功能为查询所有 修改 删除 退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值