MySql - 基础学习 - JDBC

一.为什么要学习JDBC

SUM公司为了简化开发人员的操作(对数据库的统一),提供了一个规范(Java操作数据库的规范),俗称:JDBC

这些规范的实现是由厂商们去做~

对于开发人员来说,我们只需要掌握JDBC即可。

我们如果要使用JDBC,还需要导入一个数据库驱动包(我选择maven导入):

      <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

 编写第一JDBC程序

1.创建一个数据库测试表:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `NAME` varchar(40) DEFAULT NULL,
  `PASSWORD` varchar(40) DEFAULT NULL,
  `email` varchar(60) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert  into `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values 
(1,'zhangsan','123456','zs@sina.com','1980-12-04'),
(2,'lisi','123456','lisi@sina.com','1981-12-04'),
(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

 

2.导入数据库驱动:

这里我使用maven自动导入

3.在Java中代码实现

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");   // 固定写法 ,加载驱动用
        // 2.用户信息和url :useUnicode=true&characterEncoding=utf8&useSSL=true
        String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";
        String username="root";
        String password="123456";

        //3.创建连接,创建数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);
        //4.执行sql的对象
        Statement statement = connection.createStatement();
        //5.使用sql对象去执行 SQL  可能存在返回,需要输出
        String sql="SELECT  * FROM `users`";
        ResultSet resultSet = statement.executeQuery(sql);// 把查询sql命令的数据内容全部放到了 resultSet 中,返回了一个结果集
        while (resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("name="+resultSet.getObject("NAME"));
            System.out.println("password="+resultSet.getObject("PASSWORD"));
            System.out.println("email="+resultSet.getObject("email"));
            System.out.println("birthday="+resultSet.getObject("birthday"));
        }
        //6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }

Java实现步骤:

  1. 加载驱动
  2. 连接数据库  DriverManger
  3. 获得执行的sql对象,statement(不安全的)
  4. 获得返回的结果集
  5. 释放链接

二。JDBC对象的解释

Driver:

Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用

URL:

String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";

jdbc:mysql://主机地址:端口号(3306)/数据库名?参数1&参数2&参数3

jdbc:oracle:thin:@localhost:1521:sid

DriverManager:

Connection connection = DriverManager.getConnection(url, username, password);

  • connection  代表数据库
  • 数据库设置的自动提交
  • 事务提交
  • 事务回滚
  1. connection.rollback()事务回滚
  2. connection.xommit()事务提交
  3. connection.setAutoCommit()  自动提交

statement:执行类  -----Preparestatement:也可以执行sql对象

执行sql的对象

        statement.executeQuery();//查询操作的专用语句
        statement.execute();     //可以执行所有sql,但是非常慢,因为它有个判断的过程
        statement.executeUpdate();//跟新,插入,删除记录都是它,返回一个受影响的行数

ResulSet  :查询语句产生的结果集(statement.executeQuery()),封装了所有的查询结果

        //获得返回的数据类型
        resultSet.getObject();//不知道返回类型的时候用最高级的
        resultSet.getInt();   //返回值为int
        resultSet.getString();//返回值为字符串
        resultSet.getFloat(); //返回值为单精度浮点数

 

        resultSet.beforeFirst();  //  指针移动到最前面
        resultSet.afterLast();   //指针移动到最后面
        resultSet.next();       //指针移动到下一个数据
        resultSet.absolute(row);//移动到指定行 

释放资源必须做;很占用资源

resultSet.close();

statement.close();   

connection.close();

三.statement对象详解

executeUpdate:插入数据(insert)

  public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        try {
            conn=JdbcUtils.getConnection();  //获取数据库链接
            st=conn.createStatement();// 获得SQL的执行对象
            String sql="insert into `users`(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(6,'maming','1234567','1247238460@qq.com','2022-11-04')";
            int i =st.executeUpdate(sql);
            if(i>0)
            {
                System.out.println("插入成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    }

executeUpdate:删除数据(delete)

    public static void main(String[] args) {
        Connection conn =null;
        Statement tr=null;
        ResultSet rs=null;
        try {
            conn=JdbcUtils.getConnection();
            tr=conn.createStatement();
            String sql="delete from `users` where id <=6 and id>=4";
            int i=tr.executeUpdate(sql);
            if(i>0){
                System.out.println("删除成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,tr,rs);
        }
    }

executeUpdate:修改数据(update)

    public static void main(String[] args) {
        Connection conn=null;
        Statement st =null;
        ResultSet rs =null;
        try {
            conn=JdbcUtils.getConnection();
            st=conn.createStatement();
            String sql="update `users` set `NAME`='maming' where id=1";
            int i =st.executeUpdate(sql);
            if(i>0){
                System.out.println("更改成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    } 

executeQuery:查询数据(select)

    public static void main(String[] args) {
        Connection conn=null;
        Statement st =null;
        ResultSet rs =null;
        try {
            conn= JdbcUtils.getConnection();
            st=conn.createStatement();
            String sql="select * from `users` WHERE  id=1";
             rs = st.executeQuery(sql);
            while (rs.next()){
                System.out.println("name="+rs.getString("NAME"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    } 

提取工具类

public class JdbcUtils {
    public static String driver =null;
    private static String url =null;
    private static String username =null;
    private static String password =null;
    static {
        try{
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);
           driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            // 驱动只需要要加载一次
            Class.forName("driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 获取链接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }
    //释放链接
    public static void release(Connection conn, Statement st, ResultSet re){
        if(re!=null){
            try {
                re.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

  

  

 

posted @ 2022-11-11 16:15  回忆也交给时间  阅读(29)  评论(0编辑  收藏  举报