zoukankan      html  css  js  c++  java
  • 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(数据访问对象)

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

  • 相关阅读:
    把excel导入的自定义时间改成yyyyMMdd
    sql多表查询时怎么获取查到的字段
    select 和 input 的不可编辑,input隐藏
    关闭dialog(lhgdialog)
    ajax 和 post 传多个参数值具体怎么写
    弹出提示框,对话框
    function方法中this的用法
    combobox获取值
    easyui-panel 滚动条禁用
    字符串用逗号隔开;有逗号的字符串遍历
  • 原文地址:https://www.cnblogs.com/justPassBy/p/5451928.html
Copyright © 2011-2022 走看看