JDBC

1.JDBC概述

  • 在JAVA中,数据库存取技术分为如下

    • JDBC直接访问数据库
    • JDO(Java Data Object)技术
    • 第三方O/R工具,如:Hibernate、Mybasic等
  • JDBC是Java访问数据库的基石,JDO等只是更好的封装了JDBC

  • JDBC——Java Database Connectivity,独立于数据库管理系统,公共的接口。

  • 面向应用的API——对于程序员来讲

  • 面向数据库的API——对于厂商

JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。

不同的教据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。

​ ——面向接口编程

1.1 获取连接

//方式一
Driver driver = new com.mysql.jdbc.Driver();
String url="jdbc:mysql://localhost/3306/test";
//将用户名和密码封装在Properties中
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password","root123");
Connection conn =driver.connect(url,info);

//方式二:对方式一的迭代
//获取Driver实现类的对象,使用反射。日呦,没学过
Class clazz=Class.forname("com.mysql.jdbc.Driver()");
Driver driver=(Driver) clazz.newInstance;
//方式三:使用DriverManager替换Driver
//提供驱动
Class clazz=Class.forname("com.mysql.jdbc.Driver()");
Driver driver=(Driver) clazz.newInstance;
//提供基本信息
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";

DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);

//方式四:在三的基础上进行优化
//加载驱动,同时对驱动器进行注册
Class.forname("com.mysql.jdbc.Driver()")
//加载驱动其实也可以省略,但不推荐省略。仅在Mysql中可以省略。
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";  

DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);

//方式五

1.2 Statement

  • Statement:用于执行静态SQL语句并返回它所产生的结果的对象
  • PreparedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象高效地执行该语句
  • CallableStatement:用于执行SQL存储过程
  • Statement几乎不在使用,使用PreparedStatement。

使用PreparedStatement替换Statement,以防止SQL注入。

Class.forname("com.mysql.jdbc.Driver()")
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";  

DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);
//编写SQL语句,使用?作为占位符
String sql = "INSERT INTO user VALUES(?,?,?))";
PreparedStatement ps =comn.preparedStatement(sql);
//为占位符赋值
//index,为第几个?赋值,此时的下标从1开始。value为值。根据值的类型填写set的类型。
ps.setXXX(index,value);
//执行。返回一个int类型的数,成功则返回1.
ps.execute();
//关闭资源
ps.close();
comm.close();

可以对连接和资源的关闭进行封装。定义为一个工具类

public class MysqlUtil {
    static final String  DRIVE= "com.mysql.jdbc.Driver";
    static final String URL ="jdbc:mysql://127.0.0.1:3307/boerk";
    static final String USERNAME ="root";
    static final String USERPWD ="root123";
    static Connection connection=null;
    public static Connection getConnection() {
        try {
            Class.forName(DRIVE);
             connection = DriverManager.getConnection(URL, USERNAME, USERPWD);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void close(PreparedStatement preparedStatement,Connection connection){
        try{
            preparedStatement.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}

对相同的内容进行封装,变为一个增删改通用模板。

//使用不定形参数组进行接收占位符。
public void testUpdate(String sql,Object... args) throws SQLException {
        Connection connection = MysqlUtil.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            preparedStatement.setObject(i+1,args[i]);
        }
        MysqlUtil.close(preparedStatement,connection);
    }

使用PreparedStatement进行查询

Connection conn= MysqlUtil.getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
//执行并返回结果集
ResultSet resultSet =  ps.executeQuery();
  • resultSet.next()方法,判断结果集下一条是否有数据,有则返回true,并指针下移
ResultSet resultSet =  ps.executeQuery();
if(resultSet.next()){
    //通过resultSet的get方法获得对应字段的值,xxx为字段的数据类型
    resultSet.getxxx(1);
    resultSet.getxxx(2);
    resultSet.getxxx(3);
}
  • ORM思想(Object relationship mapping)
  • 表中的一列记录对应JAVA里的一个对象。
  • 表中的一个字段对应JAVA里的一个属性。
  • 查询时将数据封装为一个对象。
posted @ 2021-12-26 22:39  Boerk  阅读(46)  评论(0)    收藏  举报