JDBC

连接

将数据库配置文件写到config.properties中

然后使用以下代码连接数据库。

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    static{
        Properties prop = new Properties();
        Reader in;
        try {
            in = new FileReader("src/config.properties");
            prop.load(in);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        driver = prop.getProperty("driver");
        url = prop.getProperty("url");
        username = prop.getProperty("username");
        password = prop.getProperty("password");
        
    }
    public static Connection open(){
        try {
            Class.forName(driver);
            return DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null; 
    }
    public static void close(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

然后是基础的增删改查

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.mysql.jdbc.Statement;

public class Main {

    public static void main(String[] args) {
        query();
    }
    //建表
    static void createTable(){
        Connection conn = DBUtil.open();
        String sql = "create table UserTb1(id int primary key auto_increment, name varchar(20))";
        try {
            Statement stmt = (Statement) conn.createStatement();
            stmt.execute(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }
    //插入
    static void insert(){
        Connection conn = DBUtil.open();
        String sql = "insert into UserTb1(name)values('tom')";
        try {
            Statement stmt = (Statement) conn.createStatement();
            stmt.execute(sql);
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }
    //更新
    static void update(){
        Connection conn = DBUtil.open();
        String sql = "update UserTb1 set name='big tom' where id > 3";
        try {
            Statement stmt = (Statement) conn.createStatement();
            stmt.execute(sql);
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }
    //删除
    static void delete(){
        Connection conn = DBUtil.open();
        String sql = "delete from UserTb1 where id = 1";
        try {
            Statement stmt = (Statement) conn.createStatement();
            stmt.execute(sql);
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }
    //查询
    
    static void query(){
        Connection conn = DBUtil.open();
        String sql = "select id,name from UserTb1";
        try {
            Statement stmt = (Statement) conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
                int id = rs.getInt(1);
                String name = rs.getString(2);
                System.out.println(id+","+name);
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }

}

更近一步就是将数据库表封装成对象,那么查询时返回对象就好了。

ResultSet

查询返回的结果就存储在ResultSet的对象中。

PreparedStatement

该查询是预定义语句,也就是sql语句已经写好了,只要查询时传相应的参数进去就好了,这样的好处是。会将该sql语句进行转为成关系代数,然后进行优化,优化的原则是选择和投影尽可能先做,表连接尽可能后做。所以查询时会比较快。

如果时候Stetement查询,那么每次查询都需要进行sql语句的优化,那么就很耗费时间了。

CallableStatement

数据库也是有函数了,数据库中的函数称为存储过程,为了调用数据库中的存储过程,必须使用CallableStatement对象。

在数据库中使用 create proceducre  函数名()   sql语句 ; 来创建存储过程,若

 

在数据库中调用存储过程使用 call 函数名();

使用java调用存储过程

static void procedure_query(){
        Connection conn = DBUtil.open();
        
        try {
            CallableStatement csmt = conn.prepareCall("{call all_user()}");
            ResultSet rs = csmt.executeQuery();
            while(rs.next()){
                int id = rs.getInt(1);
                String name = rs.getString(2);
                System.out.println(id+","+name);
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }

创建能够接收参数的存储过程

调用有参数的存储过程

static void procedure_insert(){
        Connection conn = DBUtil.open();
        
        try {
            CallableStatement csmt = conn.prepareCall("{call insert_user(?)}");
            csmt.setString(1, "tommmm");
            System.out.println(csmt.executeUpdate());
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }

创建带有输入输出参数的存储过程。

java调用代码

static void procedure_query2(){
        Connection conn = DBUtil.open();
        
        try {
            CallableStatement csmt = conn.prepareCall("{call getNameById(?,?)}");
            csmt.setInt(1, 6);;
            csmt.registerOutParameter(2, Types.CHAR);//注册输出参数
            csmt.execute();
            String name = csmt.getString(2);
            
            System.out.println(name);
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DBUtil.close(conn);
        }
    }

DAO设计模式

Data Access Object(数据访问对象)

作用:使得底层的数据逻辑和高层的业务逻辑相分离。

原文地址:https://www.cnblogs.com/justPassBy/p/5451928.html