• Jdbc语法


    什么是JDBC

    JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

    JDBC核心类(接口)介绍

    JDBC中的核心类有:DriverManager、Connection、Statement,和ResultSet!

    DriverManger(驱动管理器)的作用有两个:

    1、注册驱动:这可以让JDBC知道要使用的是哪个驱动;

    2、获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。

      Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:

    3、Connection最为重要的一个方法就是用来获取Statement对象;

      Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句:

    4、 void executeUpdate(String sql):执行更新操作(insert、update、delete等);

    4.1、ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;

       ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:

         boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;

        XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。

    5、关闭(ResultSet,Statement,Connection)倒序关闭

    增删改(Update)代码:

    //导包,每种数据库的包都不一样,放在项目下,然后Build Path
    public static void main(String[] args) {
            //连接数据库, 得到Connection对象
            Connection conn = null;
            Statement stmt = null;
            try {
                //1.加载驱动类  Driver  对象,   反射:  Class.forName(包名.类名);
                Class.forName("oracle.jdbc.driver.OracleDriver");    
                //2.通过DriverManager(驱动管理器)的getConnection() 得到Connection对象
                conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");  
                //3.通过Connection对象, 创建Statment对象
                stmt = conn.createStatement();
                //4.通过statement对象,发送sql语句,通过数据库执行之
                //删除一条语句
                String sql1 = "DELETE FROM empcopy WHERE empno = '7369'";
                //修改一条语句
                String sql2 = "UPDATE empcopy SET sal = 6666 WHERE empno = '7788'";
                //添加一条语句
                String sql3 = "INSERT INTO empcopy VALUES('4567','huhu','MANAGER','7839',
                      to_date('1998-12-21','yyyy-mm-dd'),'800',null,'30')"; int rs = stmt.executeUpdate(sql3); if(rs != 0){ System.out.println("执行了"+rs+"条sql语句"); }else{ System.out.println("未执行sql语句"); }; } catch (ClassNotFoundException e) { //如果抛这个类找不到异常, 原因: 1) 数据库驱动jar没导入 2) 包名.类名写错 e.printStackTrace(); } catch (SQLException e) { //如果抛出SQLException异常: 原因: 1) 三大参数写错 2) 数据库服务没有启动 e.printStackTrace(); }finally{ //5.关闭资源 推荐倒序关闭 try { if(stmt != null){stmt.close();} if(conn != null){conn.close();} } catch (SQLException e) { e.printStackTrace(); } } }

    查询(Query):

                //通过connection对象创建statement对象
                stmt = conn.createStatement();
                String sql = "select * from emp";
                //通过statement对象执行executeQuery查
                rs = stmt.executeQuery(sql);
                //循环使“行光标”移动到下一行,并返回移动后的行是否存在;
                while(rs.next()){
                    //打印每一行的相应数据类型的数据
        //也可以通过rs.getString()或者rs.getObject(),推荐使用数据库中对应的数据类型
                    System.out.println(rs.getInt("empno")
                                    +","+rs.getString("ename")
                                    +","+rs.getString("job")
                                    +","+rs.getInt("mgr")
                                    +","+rs.getDate("hiredate")
                                    +","+rs.getInt("sal")
                                    +","+rs.getInt("comm")
                                    +","+rs.getInt("deptno")
                                    );
                }

    Statement存在sql注入(sql攻击)安全问题,不推荐使用

    这行当前会使我们登录成功!因为是输入的用户名和密码是SQL语句片段,最终与我们的login()方法中的SQL语句组合在一起!我们来看看组合在一起的SQL语句:
    SELECT * FROM tab_user WHERE username='a' or '1'='1' and password='a' or '1'='1'

    推荐使用:PreparedStatement 预编译声明 

         Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                //1.通过反射的获取Driver
                Class.forName("oracle.jdbc.driver.OracleDriver");
                //2.通过获取DriverManager.getConnection得到connection对象
                conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
                //3.使用connection返回prepareStatement对象
                String sql = "SELECT COUNT(1) FROM EMP WHERE SAL > ?";
                pstmt = conn.prepareStatement(sql);
                //给?赋值,从1开始
                pstmt.setInt(1, 1000);
                rs = pstmt.executeQuery();
                while(rs.next()){
                    System.out.println(rs.getInt(1));
                }
  • 相关阅读:
    写一点应用关于 Lucene.Net,snowball的重新组装(三)
    写一点应用关于 Lucene.Net,snowball的重新组装(二)
    C++ stirng,int 互转(转载)
    特征词选择算法对文本分类准确率的影响(二)
    webGL简单例子(klayge)
    QT 信号和槽
    windows资源管理(内核对象/GDI对象/user对象)
    memcpy memmove区别和实现
    演示软件SpringHome制作
    在浏览器中加载googleEarth插件
  • 原文地址:https://www.cnblogs.com/64Byte/p/12790395.html
Copyright © 2020-2023  润新知