JDBC的使用

JDBC

JDBC概述

数据的持久化

  • 持久化:把数据保存到可调用存储设备中以供之后使用。在大多数情况下,数据持久化以为着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成
  • 持久化主要是将内存中的数据存储在关系型数据库中,当然可以存储在磁盘文件、xml数据文件中在这里插入图片描述

java中的数据存储技术

  • 在java中,数据库存储技术可以分为:
    • JDBC直接访问数据库
    • JDO(java Data Object)
    • 第三方O/R工具,如:Mybatis
  • JDBC是访问数据库的基石,其他的技术只是更好的封装了JDBC

在这里插入图片描述

JDBC程序编写步骤

在这里插入图片描述

  • 注册驱动:告诉java程序,哪一个数据库要连接
  • 获取连接:表示JVM的进程和数据库之间的通道打了,需要关闭
  • 获取数据库操作对象:专门执行sql语句的对象
  • 执行SQL语句 (DQL、DML)
  • 处理查询语句 :只有在执行select语句的时候,才有第五步处理查询结果
  • 释放资源 (一定要关闭)

JDBC实现步骤

增删改

Statement statement = null;
Connection connection = null;
try {
   /*1、注册驱动 方式一
		 Driver driver = new 									com.mysql.jdbc.Driver();
	 	DriverManager.registerDriver(driver);*/

            //1、注册驱动 方式一(常用)
            Class.forName("com.mysql.jdbc.Driver");
    //2、获取连接
    /*
    * url:统一资源定位符,某个资源的绝对路径
    * */
    String url = "jdbc:mysql://localhost:3306/test";
    String user = "root";
    String password = "157498";
    connection = DriverManager.getConnection(url,user,password);
    System.out.println(connection);//com.mysql.jdbc.JDBC4Connection@14514713
    //3、获取数据库的操作对象
    statement = connection.createStatement();

    //4、执行sql
    /*
    * executeUpdate(String sql)
      执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。 */
    String sql1="insert into test values (1,'a'), (2,'b')";
    //5、处理结果
    long count = statement.executeUpdate(sql1);
    System.out.println(count);

} catch (SQLException e) {
    e.printStackTrace();
}finally {
    //6、释放资源
    //并且遵顼从小到大一次关闭 先关闭statement 再关闭connection 
    //分开处理try catch保证全部关闭

    if(statement !=null){
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if(connection !=null) {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

/*注册驱动:告诉java程序,哪一个数据库要连接
获取连接:表示JVM的进程和数据库之间的通道打了,需要关闭
获取数据库操作对象:专门执行sql语句的对象
释放资源
这些语句与上面的增删改的语句一样   */
/*4、执行sql*/
ResultSet resultSet = null;//也需要释放
String sql="select  * from test";
resultSet= statement.executeQuery(sql);
/*5、处理结果 
next() 类似c语言中的指针,每次使用玩后都会向下移动一个
getString(String col) col为列名得到这一列的值
*/
while(resultSet.next()) {
                System.out.println("-----");
                String id = resultSet.getString("id");
                String name = 			resultSet.getString("name");
                System.out.println(id+" "+name);
}

解决sql注入问题

  • 只要用户提供的信息不参与sql的编译过程,问题就解决了

  • 要想用户不参与sql语句的编译,就要使用java.sql.PreperedStatement

  •  PreparedStatement ps = null;
            Connection connection = null;
            ResultSet resultSet = null;
            try {
                //1、注册驱动 方式一
    //            Driver driver = new com.mysql.jdbc.Driver();
    //            DriverManager.registerDriver(driver);
    
                //1、注册驱动 方式一(常用)
                Class.forName("com.mysql.jdbc.Driver");
    
                //2、获取连接
                /*
                * url:统一资源定位符,某个资源的绝对路径
                * */
                String url = "jdbc:mysql://localhost:3306/test";
                String user = "root";
                String password = "157498";
                connection = DriverManager.getConnection(url,user,password);
                System.out.println(connection);//com.mysql.jdbc.JDBC4Connection@14514713
                String sql="insert into test(id,name) values (id =?, name =?)";//每一个?表示一个占位符,一个?未来要接受一个值,占位符不能用单引号括起来。
                //3、获取数据库的操作对象
                ps = connection.prepareStatement(sql);
                //给占位符传值
                String str="cc";
                ps.setInt(1,3);
                ps.setString(2,"str");
                //4、执行sql
                System.out.println(sql);
                int count = ps.executeUpdate();
                System.out.println(count);
                //5、处理结果
    
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }finally {
                //6、释放资源
                //并且遵顼从小到大一次关闭 先关闭statement 再关闭connection
                if(resultSet!=null){
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
    
                if( ps !=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
    
                if(connection !=null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值