JDBC 基础操作

JDBC:
1.通过JAVA访问数据库:

2.JDBC包:java.sql:核心类与接口
          javax.sql:数据库连接池,数据源,JNDI,Rowset

3.常用类和接口:DriverManager:驱动管理器获得数据库连接
                Connection:数据库连接接口
                Statement:静态操作SQL语句
                PreparedStatement:动态操作SQL语句
                CallableStatement:可调用储存过程的预定义语句
                ResultSet:保存数据记录的结果集
                ResultSetMetaData:结果集元数据(列名称、类型)
                DatabaseMetaData:数据元数据(数据库名称、版本)

4.步骤:jar包对应不同的数据库
        1.加载数据库驱动.jar
        
        2.获得数据库连接
        
        3.创建连接+查询+遍历结果集
        
        4.关闭数据库
例:    Class.forName("com.mysql.jdbc.Driver");        //1.加载驱动 反射机制:Java从类名中获得一个类实例。
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","1");        //2.获得链接 参数:url,username,password
        Statement stmt = conn.createStatement();        //3.创建语句
        ResultSet rs = stmt.executeQuery("select * from UserTbt");        //查询
        while(re.next()){        遍历
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("password");
            System.out.println("id+":"+username+":"+password);
        }


connection:
    1.获得数据库连接:    Class.forName("com.mysql.jdbc.Driver");    //加载驱动
    
    2.获得链接:    DriverManager.getConnection("jdbc:mysql://localhost:3306/080225_db","root","root");    //获得链接
    
    3.创建语句:    Statement stmt = conn.createStatement();
    
    4.事务:    
        提交:conn.setAutoCommit(false);    //取消自动提交
              conn.commit();    //在执行Statement语句后手动提交
        回滚:conn.rollback();    //在数据库无法完成操作时在异常处理中回滚
    
    5.关闭:    conn.close();    //在数据库处理后始终(finally)进行关闭操作

Statement接口(静态):    
    1.创建语句:Statement stmt = new DriverManager.getConnection("jdbc:mysql://url","username","password").createStatement();
    
    2.子接口:
            PreparedStatement(动态):    
                执行动态SQL语句:    PreparedStatement pstmt = conn.perparedStatement("update employees set salay = ? where id =?");
                                    pstmt.setBigDecimal(1,salay_value);    //设置第一个问号的值
                                    pstmt.setInt(2,id_value);    //设置第二个问号的值
                                    pstmt.executeUpdate();    //增删改操作需要更新

                1.子接口:
                    CallableStatement(调用存储过程):
                        1.调用简单的存储过程://默认存在存储过程:    create procedure all_stu() select * from stutbl;
                            CallableStatement cstmt = conn.prepareCall("{call all_stu()}");    //sql语句被{}包围
                        
                        2.调用有输入参数的存储过程:    //存在存储过程    create procedure insert_users(in uname varchar(20),in pword varchar(20)) insert into usertbl(username,password) values(uname,pword);
                            //用 in 申明输入参数    用 out 申明输出参数
                            CallableStatement cstmt = conn.prepareCall("{call insert_stu(?,?)}");
                            cstmt.setString(1, "wdd+.+");
                            cstmt.setString(2, "still_wyy");

                        3.调用有输入输出参数的存储过程:    
                            // 存在存储过程    create procedure getPwordByUname(in uname varchar(20),out pword varchar(20))
                            //                 begin
                            //                     declare tempword varchar(20);
                            //                     select pword into tempword from usertbl where username = uname;
                            //                     set pword = tempword;
                            //                 end;

    3.常用方法:    execute();    //执行sql语句
                    executeQuery();    //执行一个查询    返回一个 ResultSet 对象(结果集    一开始指针指在第一条结果的上一个位置,结束在最后一条结果的后一个位置)
                    executeUpdate();    //执行一个修改(包括    插入、修改、删除)
                    close();

ResultSet:
    1.常用方法:    next();        //指针初始在第一条记录上一个位置,最后一个位置在最后一条记录之后,当没有下一跳记录时返回 false
                    getXXX();    
                    absolute(int row);    //指针位置直接移到第 row 条记录
                    afterFast();/beforeFirst();    //尾部、首部
                    first();/last();    //第一条记录、最后一条记录
                    isFirst();/isLast();/isAfterLast();/isBeforeFirst();
                    getRow();    //获得当前行 [0,n+1]
    2.可滚动/更新的 ResultSet 对象:    
        修改:    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);    //想要更新的表必须有主键
                ResultSet rs = stmt.executeQuery("select id,name,age from stutbl");
                rs.absolute(1);
                rs.updateString("name", "18_forever^_^");
                rs.updateRow();
        插入:    rs.moveToInsertRow()    //移动到插入行 插入行是一个被提供的特殊的位置
                rs.updateInt(1, 2);
                rs.insertRow();
    3.类型对应:    char/varchar/longvarchar -> String
                    bit -> boolean
                    smallint -> short
                    smallint/interger -> int
                    bigint -> long
                    real -> float
                    float/double -> double

MetaData 元数据:
    1.ResultSetMetaData 结果集的元数据:rs.getMetaData()
        方法:    getColumnCount();    //    返回结果集的 列 数
                getColumnName(int column);    //获取第 i 列的列名
                getColumnTypeName(int column);    //获取第 i 列的数据类型
    2.DatabaseMetaData 数据库的元数据:    conn.getMetaData();
        方法:    getDatabaseProductName();    //获得数据库的名称
                getDatabaseMaiorVersion();    //版本号
                getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)    
                    // 参数:
                    // catalog - 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
                    // schemaPattern - 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
                    // tableNamePattern - 表名称模式;它必须与存储在数据库中的表名称匹配
                    // types - 要包括的表类型所组成的列表,必须取自从 getTableTypes() 返回的表类型列表;null 表示返回所有类型
                    // 返回:
                    // ResultSet - 每一行都是一个表描述 :为空则表示数据库中不存在要匹配的表    getTables(null,null,tablename,null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值