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));
            }
原文地址:https://www.cnblogs.com/64Byte/p/12790395.html