2018蓝旭后端培训之JDBC

前言:在学习jdbc之前推荐大家再次学学常用的SQL语句,熟悉java API文档的查看

一.什么是JDBC

jdbc即Java Database Conection,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。JDBC是用于在Java语言编程中与数据库连接的API

二.运用jdbc能干什么?

  • 连接到数据库

  • 创建SQL或MySQL语句

  • 在数据库中执行SQL或MySQL查询

  • 查看和修改结果记录

三.解析jdbc提供的API(重点)

1.开发过程中常用的类和接口

Connection接口:与特定数据库的链接,通常使用的方法有:

(1)close():立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放

(2)createStatement() : 创建一个 Statement 对象来将 SQL 语句发送到数据库。

(3)prepareStatement(String sql):创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

PreparedStatement接口表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。通常使用的方法有:

(1)execute():在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。返回值是Boolean类型。

(2)executeQuery():在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

(3)executeUpdate(): 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERTUPDATE 或 DELETE 语句,该方法返回值是影响的行数。

(4)setBoolean(int parameterIndex, boolean x):将指定参数设置为给定 Java boolean 值。

(5)setString(int parameterIndex, String x):将指定参数设置为给定String值

(6)setInt(int parameterIndex, String x):将制定参数设置为给定int值

(7)setDate(int parameterIndex,Date x):使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date 值。

ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。常用的方法有:

(1)absolute(int row):将光标移动到此 ResultSet 对象的给定行编号。

(2)afterLast(): 将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后

(3)beforeFirst(): 将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。

(4)close():立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。

(5)deleteRow():  从此 ResultSet 对象和底层数据库中删除当前行。

(6)first():  将光标移动到此 ResultSet 对象的第一行。

(7)next():将光标从当前位置向前移一行。在这里需要注意的是光标的初始位置是在第一行的前面,而不指向第一行

  注:由于该接口中的常用方法较多,也比较重要具体可参见java API文档

DriverManager类:管理一组 JDBC 驱动程序的基本服务。常用方法有:

getConnection(String url, String user, String password) 
          试图建立到给定数据库 URL 的连接。

Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象。它是PreparedStatement接口的父接口。

四.实例程序

package com.bluemsun.dao;

import com.bluemsun.entity.User;

import java.sql.*;

/**
 * Created by mafx on 2018/6/2.
 */
public class userDao {
    private final static String DRIVER = "com.mysql.jdbc.Driver";
    private final static String URL = "jdbc:mysql://localhost:3306/test1.0";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "root";
    public int insertUser(User user){
        String sql="INSERT INTO users (username,pwd,email)VALUES (?,?,?)";
        int isSucceed=0;
        Connection conn=null;
        PreparedStatement ps=null;
       try {
           conn=getConnection();
           ps=conn.prepareStatement(sql);//将SQL语句发送到数据库
           ps.setString(1,user.getUsername());
           ps.setString(2,user.getPwd());
           ps.setString(3,user.getEmail());
           isSucceed=ps.executeUpdate();//执行SQL语句,返回影响的行数
       }catch (Exception ex){
           ex.printStackTrace();
       }finally{
           try {
               conn.close();
               ps.close();
           }catch (Exception ex){
               ex.printStackTrace();
           }
       }
       return isSucceed;
   }
   public User selectUser(User user){
        String sql="SELECT username,pwd,email FROM users WHERE username='"+user.getUsername()+"' and pwd='"+user.getPwd()+"'";
        Connection conn;
        Statement st=null;
        ResultSet rs=null;
        conn=getConnection();
        User tempUser;
        try {
            st = conn.createStatement();
            rs=st.executeQuery(sql);//执行sql语句,返回查询的结果集
            rs.first();//将指真指向表的第一行
            tempUser=new User();
            tempUser.setUsername(rs.getString(1));
            tempUser.setPwd(rs.getString(2));
            tempUser.setEmail(rs.getString(3));
        }catch (Exception ex){
            //ex.printStackTrace();
            tempUser=null;
        }finally {
            try {
                rs.close();
                st.close();
                conn.close();//关闭数据库连接
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }
        return tempUser;
   }
   public Connection getConnection(){
       Connection conn=null;
       try {
           Class.forName(DRIVER);//加载驱动
           conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//获取与数据库的连接
       }catch (Exception ex){
           ex.printStackTrace();
       }
       return conn;
   }
   /**今天的代码***/
   public void test(){
        String sql="select user_id,username,pwd,email from users";
        Connection conn=null;
        conn=getConnection();//获取数据库连接
        try {
            PreparedStatement st = conn.prepareStatement(sql);//向数据库传送SQL语句
            ResultSet rs=st.executeQuery();//执行SQL语句
            while(rs.next()){//遍历rs中的数据
                System.out.print("ID号:"+rs.getInt(1)+//因为id是int类型所以用getInt()
                                 "用户名:" +rs.getString(2)+
                                "密码:"+rs.getString(3)+
                                "email:"+rs.getString(4));
                 System.out.println();
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    public static  void main(String[] args){
        new userDao().test();
    }
}

注意点:

(1)在使用jdbc时一定要记得由里到外关闭资源

(2)使用jdbc时会抛出许多异常记得捕获

(3)jdbc是最基础的数据库连接组件,在以后我们还会讲数据库连接池、dbutils等性能更好,使用更方便的组件。但目前希望大家主要掌握好基础的jdbc.

java API文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

五.训练作业

建立一个数据库实现简单的登录注册,可以用上次的训练代码上进行修改。

猜你喜欢

转载自blog.csdn.net/qq_40400960/article/details/81190286