JDBC学习

JDBC的本质理解

1.JDBC是什么?

Java Database Connectivity(Java语言连接数据库)

2.JDBC的本质是什么?

JDBC是SUN公司定制的一套接口(interface)
接口都有调用者和实现者
面向接口调用,面向接口写实现类,这都属于面向接口编程。
java.sql.*

为什么要面向接口编程?

 解耦合:降低程序的耦合度,提高程序的扩展力
 多态机制就是非常典型的:面向抽象编程。
 Animal a = new Cat();
 Animal b = new Dog();
 public void feed(Animal a){}

为什么要制定JDBC接口?

因为每一个数据库都有自己独特的实现原理。
驱动:就是一个jar包,所有的数据库驱动都是jar包的形式存在,jar包中有很多.class文件,这些.class文件就是对JDBC接口的实现。驱动不是SUN公司提供的,是各大数据库厂商提供,要到各个厂商官网中下载。

JDBC编程六步(背会)

第一步:注册驱动(告诉java程序即将连接的是哪个品牌的数据库)
第二部:获取连接(表示JVM的进程和数据库进程之间的通道打开了)
第三步:获取数据库操作对象(专门执行SQL语句的对象)
第四步:执行SQL语句(DQL,DML…)
第五步:处理查询结果集(只有当第四步是select语句时,才有这步)
第六步:释放资源(使用完资源之后一定要关闭资源)
插入

package JDBCStudy;

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

public class Test1 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/people","用户名","密码");
            stmt = conn.createStatement();
            String sql = "insert into user values(10,'123','123')";
            int result = stmt.executeUpdate(sql);
            System.out.println("影响的条数是:" + result);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }


        }
    }
}

查询

getString(1)方法,无论数据库中是什么,取出来的都是String类型,参数是下标也就是第几列,下标从1开始,不是从0开始。
getString(“名字”)方法 通过列名称来查询(查询语句中的列名)
getInt() ...
package JDBCStudy;

import java.sql.*;

public class Test1 {
    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/people","用户名","密码");
            stmt = conn.createStatement();
            String sql = "select * from user";
            rs = stmt.executeQuery(sql);
            while(rs.next()){
                int id = rs.getInt("id");
                String password = rs.getString("password");
                String name = rs.getString("userName");
                System.out.println("id: " + id + ",name: " + name +  ",password " + password);
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }


        }
    }
}

"+内容+"

SQL注入问题

如果需要SQL注入用Statement,如果想给SQL语句传值,用PreparedStatement

使用PrepareStatemnet完成增删改操作

package JDBCStudy;

import java.sql.*;

public class Test2 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/people","用户名","密码");
            String sql = "select * from user where id = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1,1);
            rs = ps.executeQuery();
            //System.out.println(rs);
            while(rs.next()){
                int id = rs.getInt("id");
                String password = rs.getString("password");
                String name = rs.getString("userName");
                System.out.println("id: " + id + ",name: " + name +  ",password " + password);
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值