A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

同学们,今天学习了JDBC,我们从JavaSE,前端,数据库又重新回到了我们的Java代码。

今日需要掌握的有:
  • 能够用自己的话阐述什么是JDBC?使用JDBC作用是什么?
  • 能够用自己的话阐述什么是SQL注入漏洞并给出解决方法
  • 独立完成使用JDBC的预编译对象进行CRUD操作(重点)
  • 会使用JDBC工具类操作数据库

   


请同学们按照如上要求,总结今日所学。

56 个回复

正序浏览
本帖最后由 AsusCoder 于 2018-5-28 08:37 编辑

曾耀峰

  JDBC是Java Database Connection 的简称,中文名为java数据库连接接口。在JDBC没有出现之前,通过Java连接数据库,要学习相应的数据库连接方法,各个数据库厂商提供的方法还不一样。有了JDBC以后,Java连接数据库只要到JDBC官网下载相应的数据库接口,就可以使用封装好的方法直接连接,十分简便。

   使用方法:
   官方下载版本,将下载好的jar包复制到工程,右键包->Build Path->Configure..即可导入使用
   ——注意:在java中使用的连接对象全部来自于java.sql,而不是com.mysql.jdbc的内容
   
   通过案例来学习JDBC的知识:

一.案例1:写JDBC的查询和更新操作
   
  在MySQL对数据的常见操作中有我们俗称的"增删改查",分为两类,增 和删改查,在SQL中操作这样的语言分别称为DQL 和DML。因为JDBC是连接数据库的,所以也提供了Query(查询)和Update(更新)来对应SQL中的DQL和DML。因此,java代码中执行SQL的查询语句使用executeQuery(),修改使用executeUpdate()方法.

  1.首先学习了建立JDBC的六个步骤,有记忆规则"贾琏欲执事":  
  贾:注册(加载)驱动
  琏:获取连接对象
  欲:获取执行语句的对象
  执:执行语句并处理数据
  事:释放数据操作相关对象

  2.在Query()查询中,分为查询多个数据,查询单个数据
   (1)多个数据:返回结果集为ResultSet rs。使用while(rs.next())遍历是否有下一个数据,如果有,再使用getString(1,"列名称") 或者 getInt("列名称")来获得相应的数据和数据类型
    (2) 单个数据:返回还是Result rs 但是rs只有1或0条数据,可以直接使用if(rs.next()){};

  3.在Update()更新中,方法步骤类似Query()查询。只是它返回的值是int类型num.表示在操作中影响的行数。如果<0.则操作失败;否则操作成功:
     int result = pds.executeUpdate();if (result > 0)
  
  4.在java中执行SQL语句,通常使用"?"占位符来代替数据,然后用setInt(1,80),setString(2,"dollar")来填充数据。
      
   
  5.释放资源:当出现Connection、PreparedStatement()、ResultSet() 这些sql操作对象,都要在使用完毕之后释放对象。
因为这些对象都有异常产生,所以放在finally{}代码块中。


二、案例2:将JDBC操作抽取成工具类DBUtils.java:

   同上面的查询和更新操作中,每个方法共同的代码很多,所以要抽取共同的代码,做成一个工具类,方便直接调用。
   将driverClassName 驱动名字 url 数据库地址 user 用户名 password 密码 做成静态final常量。在静态代码块中赋值
static{}
   将获取驱动loadDriver()注册驱动,getConnection()获取连接对象,getStatement()获取执行语句,release()释放资源等四个方法封装。再用测试类调用工具类方法,代码简洁很多,如下:

                Connection conn = null;
                PreparedStatement pdt = null;
                conn = JDBCUtils.getConnection();
                String sql = "select * from dept";
                pdt = JDBCUtils.getStatement(sql);
                ResultSet rs = pdt.executeQuery();
                while (rs.next()) {
                        System.out.println(rs.getInt("deptno") + " " + rs.getString("dname") + " " + rs.getString("loc"));
                }
                JDBCUtils.release(conn, pdt, rs);


三、将数据库的配置信息写在配置文件db.properties,再用属性类Properties调用,方便在文件中直接修改数据库信息,而不用到代码中修改。

    properties.load(new FileInputStream("src/db.properties"));

    driverClassName = properties.getProperty("driverClassName");

四、SQL注入漏洞:

   在SQL语句中,利用statement 拼接语句的时候,使用''单引号的漏洞,只要向用户名输入框中输入“用户名+'or'1=1'”,整个sql语句就变成select * from user_tb  where user = 'aaa' or '1=1' and passowrd ='xxxx'这样的语句。
因此‘1=1’条件为true。所以变成select * from user_tb  where user = 'aaa' 只要用户名猜对,密码随便填即可登录成功。
   补救情况:

   使用PreparedStatement 预编译执行语句对象代替Statement就可以防止SQL注入的情况。因为,可以通过用占位符"?"代替SQL语句中的值。然后通过pdt.setString(1,username);pdt.setString(2,password);
   如果此时,再出现username = aaa' or '1=1' 这个情况。preparedStatement 会在用户名的特殊符号单引号加一个转义字符,使它变成和字母一样的字符。aaa\' or \' 1=1\' 。这样就阻止了SQL注入的漏洞。

   因此,以后使用PreparedStatement 预编译执行语句对象代替Statement。


五、使用Junit工具测试类Test
     
    使用Junit的Test类可以直接测试方法,用这个方式来代替main函数测试

    1.在代码区域敲"Test",代码出现提示,选择 Test 4这个版本。即可生成Test方法
    2.执行:双击方法名,右键-Run as..Junit Test
    3.每个方法要声明一个@Test。不能直接点绿色箭头运行,不然会执行全部测试方法

六、其他常见错误点:

1.更新了外键数据,导致JDBC执行语句失败:

   在JDBC进行Update操作的时候,要注意表中存在外键的情况。比如,在部门表dpet中如果设置deptno 为职员表emp的外键,并且id有记录在外键生成,就不能随意对该记录进行Update。
   
   举个例子:部门表dept中,字段deptno 有(10,20,30,40,50)等5个记录,并且其中(10,20,30,40)在员工表emp作为外键记录生成。那么这时候,对(10,20,30,40)在部门表dept修改就会报错。但是对50这个数可以修改。如果要强行修改(10,20,30,40)中的数据,有两种操作:

    1).删除emp表中对应的数据

    2).解除外键


2. 再次回顾增删改查(QURD):

    查:select * from dept;
    增:按字段增加:insert into dept(deptno,dname,loc) values(70,'策划部','五楼');

       全字段增加: insert into dept values(60,'后勤部','六楼');

    改:修改一整列:update dept set loc = '五角大楼';//没有设置where条件的情况下,将会整列的loc值都变成'五角大楼'
       修改某一列:update dept stet loc = '双子大厦' where deptno = 40;
     
    删:删除所有:delete from dept;表中数据全部清空
       删除某个记录:delete from dept where deptno = 30;

回复 使用道具 举报 1 0
吴鹏

总结

----------------------------------------------------------------
一 什么是JDBC

英文全称是:java database connectivity,翻译过来是Java 数据库 连通;

是一套接口和规范,让开发人员可以用这套规范使数据库和java进行联系;

1 加载驱动;
2 获得连接;
3 基本操作;
4 释放资源;

二 sql漏洞注入:
因为在java中定义sql语句时,是将获得用户的username和password与sql通过字符串拼接在一起的,当在
输入的时候,用户名为任意用户名' or ' 1=1,密码随意或者任意用户名' -- 密码随意;这样输入会使后面密码
的判断失效,只要用户名是存在在网站的数据库,且没有防sql漏洞,则不需知道密码就可以登陆;
在sql语句中,原本是:
"select * from user where username ='"+username+"' and password = '"+password+"'";
替换成上面就会是:
"select * from user where username ='"+aaa' or ' 1=1+"' and password = '"+任意+"'";
则结果必然达成,因此只要直到用户名即可以登陆;

解决的办法:
使用PreparedStatement代替Statement来接收要执行的sql语句,对于sql中未确定的值,可以用占位符?来代替;
只需在执行前使用PreparedStatement的setInt()或者setString()方法,将占位符设置成我们需要的值即可;

三 JDBC的预编译进行增删改查操作:
早上教的JDBC的增删改查是使用Statement来接收要执行的sql语句;
在下午,教导了使用PreparedStatement来进行数据库的增删改查,优点是
代码阅读更简单,使用占位符来修改sql语句中的值,提高了可维护性;
使用Statement的代码如下:

Connection conn = null;
statment stmt = null;

Class.forName("com.mysql.jdbc.Driver");
//加载驱动;
conn = DriverManager.getConnection(url,username,password);
url为数据库的地址:jdbc:mysql//localhost:3306/数据库名称;
username 数据库登陆用户名
password 数据库登陆密码
stmt = conn.createStatement();
//创建执行sql语句的对象;
String sql = "";
//创建sql语句;
int num = stmt.executeUpdate(sql);
//执行sql语句,返回的是int类型的数据,意义为增,删,改为表中的第num行;
if(num>0){System.out.println("执行成功")};
//可以根据num值来对操作进行判断,提示操作是否成功;
释放资源;
------------
当使用预编译时,将Statement替换为PreparedStatement,稍作修改;
Connection conn = null;
PreparedStatement pstmt = null;

Class.forName("com.mysql.jdbc.Driver");
//加载驱动;
conn = DriverManager.getConnection(url,username,password);
url为数据库的地址:jdbc:mysql//localhost:3306/数据库名称;
username 数据库登陆用户名
password 数据库登陆密码
String sql = "...?...?...";
//创建sql语句;
pstmt = conn.createPreparedStatement(sql);
//创建执行sql语句的对象;
pstmt.setInt(colnum,值)/pstmt.setString(colnum,值);
对占位符进行设置,特别要注意的是,占位符的首位是从1开始计数,而不是像索引值从0开始;
int num = stmt.executeUpdate(sql);
//执行sql语句,返回的是int类型的数据,意义为增,删,改为表中的第num行;
if(num>0){System.out.println("执行成功")};
//可以根据num值来对操作进行判断,提示操作是否成功;
释放资源;


回复 使用道具 举报
本帖最后由 13163997058 于 2018-5-28 12:51 编辑

王刘锁
在艰难的学完数据库MySQL之后今天终于回到了久违了近10天的eclipse
.一切还是那么陌生,好不容易记住的又想不起来了,像什么快捷键和一些语法!
不过在今天的学习中我们又重新找回了一些记忆,当然也是学了一些新知识.今儿主要学习JDBC
它是一个用来连接数据库的纽带好让我们可以用Java语言执行SQL语句来访问数据库,
其实就是SUN公司提供的一组接口和类的规范,
在使用的时候我们首先要先把提供的jar包给导进来把配置环境做好也就是build path,一说就可以想的起来,
接下来说一下怎么访问数据库,
第一步:需要注册驱动 驱动就是设备间互相访问的通道!格式是固定的记住就行
利用反射获得class文件:
     Class.forName(com.mysql.jdbc.Driver//driverClassName)
第二步:获取和数据库的连接,同样固定的格式
     Connection conn=DriverMannager.getConnectio("jdbc:mysql://localhost:3306/db1","root","root");第一个参
数是jdbc:mysql://数据库IP地址:端口,后面两个是自己的用户名和密码
第三步:获取执行sql语句的Statement对象,固定格式
Statement stmt = conn.createStatement();
第四步:写sql语句:这里sql语句一定要写正确,
     String sql = "select * from xsb";//查询 "delete from xsb where sid=3";//删除
    "update xsb sname='小阿香',sex='男' where sid=3";//修改
    "insert into xsb values(null,'小龙龙','女')";//添加
第五步:执行sql语句:
如果是查询语句要用结果集来接收,然后遍历结果集
     ResultSet rs=stmt.executeQuery(sql);
        while(rs.next()){
        System.out.println(rs.getInt("sid")+rs.getString("sname")+rs.getString("sex"));
        }
如果是增删改的话:
     int num =stmt.executeUpdate(sql);
        if(num>0){
        System.out.println("操作成功!!");
        }
第六步:最重要的一步,释放资源,
     rs.close();
     stmt.close();
     conn.close();
当然写完这些代码发现好多重复的代码!那今天还学习了抽取工具类,这里不多说了,把相同的代码抽取出来就可以,另外为
了让客户可以方便的修改个人信息还学习了设置配置文件,让客户可以直接修改文件中的信息.
此外呢还有一个sql的注入问题也就是当别人知道用户名的时候可以利用[用户名 ' or ' 1=1 ]这样的方式在sql语句加载执行的时候把sql语句拼接成[username='用户名' or '1=1' and password='密码']的格式,这时因为or关键字和1=1等式的永成立这个sql语句的条件就会永远成立,因此无论输入的密码是否正确都会登录成功!,不知道我的qq号是不是这样被人给盗的!但是今天学习了这个preparedStatement就可以解决被盗号问题了,.
这里就把改变的代码部分写出来好了,
第一步:注册驱动,
第二步:获取连接,
第三步:获取执行sql语句的对象并执行sql语句
     String sql = "insert into xsb values(null,?,?)";
     这里的信息被?占位
     PreparedStatement stmt = conn.preparStatment(sql);
     然后给?赋值,这里的1,2是第一第二个?
     stmt.setString(1,"小敏");
     stmt.setString(2,"女");
     执行sql语句
     int num = stmt.executeUpdate();
        if(num>0){
        System.out.println("操作成功!!");
        }
第四步:释放资源.
在最后声明一下,这里的代码要用try{以上代码}catch(异常类型){异常处理}finall{释放资源}给捕获才行!
回复 使用道具 举报
常小天
今天学习的是JDBC的内容。JDBC是将java和数据库连接起来的桥梁。使用JDBC可以让我们在java中来操作数据库。JDBC是一组接口,也就是一组规范。各数据库在驱动中实现这组接口,从而达到各种不同的数据库都能接入到java语言中进行操作。使用JDBC的步骤为:加载驱动、获取连接、创建sql语句对象、编写并执行sql语句、最后释放资源。加载驱动时采用获取驱动类的class对象的方式加载驱动,因为Driver类中的静态代码块中会加载一次驱动。获取连接的方法是DriverManager中的静态方法getConnection(),该方法中有三个参数,URL为要连接的数据库的路径,后两个为用户名和密码。之后通过连接对象调用方法获得语句对象,这里要采用可以解决SQL注入漏洞的preparedStatement()对象。接下来预编译SQL语句,注意别漏了问号。执行增删改操作使用executeUpdate(),返回受影响的行数,判断返回值是否大于0来确定是否操作成功,执行查询操作使用executeQuery(),返回值为结果集,遍历结果集并输出。此外有两点注意的地方,一是导包要到导java.sql下的包,不要导错,二是在配置属性文件时,属性文件中的信息末尾不要加任何多余的符号,尤其是不要加空格,会特别难检查出来。
回复 使用道具 举报
白有旺
JDBC是JAVA连接数据库的途径 普通连接的话 每次访问都会创建一次连接  所以使用连接池
连接池 需要导包 有Druil  c3p0 dbutlis 等
回复 使用道具 举报
Do1 中级黑马 2018-5-30 19:04:12
54#
本帖最后由 Do1 于 2019-11-23 00:35 编辑


JDBC是java连接mysql数据库的aip工具,通过jdbc可以从mysql数据库中提取数据,使用时需要导入mysql包

原始的连接方式为:
1.Class.forName(Stirng)
从指定的com包加载驱动
2.Connection conn=DriverManager.getConnection(URL,USER,PASS);
创建连接,需要传入的参数为Mysql数据库的URL地址,这里的地址包含了你所要使用的指定数据库名称,以及用户名和密码
3.Statement stmt=conn.createStatement();
实例化mysql对象

stmt.executeQuery(String sql);
传入sql语句,如果是查询的话就用一个ResultSet集合来接收并且使用executeQuery方法
如果是增删改的话可以用int类型来接收,判断是否添加成功,int类型收到的是表中受影响的row数,使用executeUpdate;方法

SQL注入漏洞是因为实例化对象编译sql语句时传入的是一个字符串,这个字符串就代表sql中的语句,通过注入漏洞将判定语句中的and 给隔开了,如果加一个or进去的话 就可以随意输入密码,解决方法是使用比Statment更高级的Statment的子类PreparedStatement,它可以预编译sql,设置参数,安全性高
回复 使用道具 举报
本帖最后由 COLDER 于 2018-10-18 19:14 编辑


Day10

今天的学习内容为JDBC入门,JDBC的开发步骤,JDBC的两种增删改查方式.
JDBC(Java Date Base Connectivity):Java数据库连接,它是一组接口,由Java编写而成,作用:为不同的关系型数据库
提供统一的访问,JDBC可以通过执行SQL语言来对数据库中的数据进行操作.

JDBC的开发步骤:加载驱动,获得连接,获得执行SQL的对象,编写SQL,执行SQL,释放资源(贾琏欲执事)
加载驱动:Class.forName("com.mysql.jdbc.Driver");
获得连接:conn = DriverManager.getConnection(url,username,password);
获得执行SQL对象:stmt = conn.createStatement();
编写SQL:String sql = "SQL语句";
执行SQL:stmt.excuteUpdate(sql)(对数据库中的数据记录进行增删改操作)
        stmt.excuteQuery(sql)(对数据库中的数据记录进行查询操作)
释放资源:conn.close();stmt.close();

JDBC的两种增删改查方式:Statement,preparedStatement
区别:使用statement方式对数据库中数据进行读取操作,缺乏安全性(案例:账号密码登录),Statement和preparedStatement
在开发步骤上也有区别,statement是先获得执行SQL语句的对象,再编写SQL,而preparedStatement是先编写SQL语句,再
预编译SQL,设置参数.

今天的重点主要是掌握使用预编译方式对数据库的数据进行增删改查.
回复 使用道具 举报
JDBC Java Database Connectivity
sun公司提供的一组接口规范
Java和数据库的桥梁:可以让我们在Java代码中写sql,使用JAVA代码操作MySQL数据库
没有JDBC的时候 要开发一套系统,Java程序员需要了解很多数据库驱动API

开发步骤:
贾琏欲执事

加载驱动
获得连接
获得sql语句的对象
执行sql语句
释放资源


connection:1.获取语句对象 2.管理事务
drivermanager:1.获取连接  2.注册/加载驱动
statement:1.执行sql 2.批行处理sql语句

工具类的抽取  减少不必要的重复

用PreparedStatement对象解决SQL注入漏洞。它将SQL进行预编译,使用?作为占位符。?所代表内容是SQL所固定。再次传入变量(包含SQL的关键字)。这个时候也不会识别这些关键字。

注意:导包要全部导java.sql下的包 不要导jdbc的包
回复 使用道具 举报
林恒山
jdbc是sun公司提供的java与数据库之间通信的接口.
mysql实现jdbc的5个步骤:贾琏欲执事.也就是1:加载驱

动;2创建连接3获得执行sql语句的对象;4执行SQL语句;5释

放资源.
jsbc的增删改查的步骤是
1.加载驱动Class.forName("com.mysql.jdbc.Driver");
2.创建连接conn = DriverManager.getConnection

("jdbc:mysql://localhost:3306/db1", "root",

"root");
3获得执行sql语句的对象:
首先写sql语句;
Statement state=conn.createStatement();使用这个

createStatement()会产生sql注入漏洞,要使用

PreparedStatement pstmt=conn.prepareStatement(sql)
4执行sql :调用executeUpdate()
5释放资源. 关闭Connection和PreparedStatement.
增删改的区别只是在写sql语句上有区别.而查会有一个

ResultSet结果集,执行sql语句的时候使用的是

executeQuery(),最后释放资源的时候ResultSet也要释放

掉.
增删改查的代码重复性太多,抽取到工具类中,可以把注册驱

动/创建连接/释放资源放到工具类中.
sql注入漏洞的解决方法:使用PreparedStatement

pstmt=conn.prepareStatement(sql).
回复 使用道具 举报
林荣彬
    今天学习了JDBC,主要学习了JDBC的开发步骤和在JDBC中增删改查的操作,学习PreparedStatemet执行SQL.对SQL进行预处理。解决SQL注入漏洞。
需要导入驱动包
JDBC的开发步骤:可以用一句话概述"贾琏欲执事"
1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
2.获得连接
onn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web_test3", "root", "abc");
3.获得执行SQL语句对象
Statement statement = conn.createStatement();
4.执行SQL
int num = pstmt.executeUpdate();
5.释放资源
conn.close();
回复 使用道具 举报
施炎生
开发步骤(贾琏欲执事:
1注册驱动
  Class.forName("com.mysql.jdbc.Driver");       
2.获得连接
  Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);
3.获得预处理对象       
  常用方法:
int executeUpdate(String sql); --执行insert update delete语句.
ResultSet executeQuery(String sql); --执行select语句.
boolean execute(String sql); --执行select返回true 执行其他的语句返回false.
4.处理结果集,执行select的时候需要(执行insert、update、delete无需处理)
  ResultSet rs = stat.executeQuery(sql);       
5.释放资源
  rs.close();
  stmt.close();
  con.close();
       
回复 使用道具 举报
柯建程
JDBC 是java与数据库的桥梁,可以再java中写sql,用java操作数据库
接口规范
驱动:两个设备(应用)之间通信的桥梁
1创建数据库
2创建项目,引入jar包

五行代码
加载驱动
class.forname(com.mysql.jdbc.driver)
获得连接
connection conn=drivermanager.getconnection();
语句对象
statement sta=conn.createstatemen();
(编写sql)String s="";
执行
查询  resultset rs=sta.executequery(s)
增删改  int i=sta.executeupdate(s)
释放
            try {
                                        statement.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }

                                statement = null;
                        }

                        if (conn != null) {
                                try {
                                        conn.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
回复 使用道具 举报
凌辉
今天学习了jdbc
jdbc是一种执行sql语句的javaAPI,
步骤是:
1加载驱动;
2 获得连接;
3 基本操作;
4 释放资源;
学习了sql漏洞,解决办法是需要采用PreparedStatement对象解决SQL注入漏洞。
这个对象将SQL预先进行编译,使用?作为占位符,
所代表内容是SQL所固定。再次传入变量(包含SQL的关键字)。
这个时候也不会识别这些关键字。
回复 使用道具 举报
任佳锋
JDBC 数据库连接接口,是一种用于执行SQL语句的JavaAPI,统一规范了多种关系数据库的访问方式.
使用JDBC前需要先将jar包导入,通过才行
JDBC的一般开发步骤为:
(贾琏欲执事)
贾1.加载驱动
Class.forName("com.mysql.jdbc.Driver")
琏2.获得连接
Connection conn = DriverManager.getConnection("jdbc:mysql:///数据库名", 数据库用户名, 数据库密码

);
欲3.编写sql语句
String sql = "写入需要的sql语句";
执4.执行sql语句
Statement(存在sql注入漏洞)
PreparedStatement(预编译避免sql注入漏洞的产生)
事5.释放资源
通常将ResultSet,Statement,Connection等对象要释放的资源代码写到finally中
if(rs !=null){
                                try {
                                        rs.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                rs = null;
                        }
                       
                        if(statement !=null){
                                try {
                                        statement.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                statement = null;
                        }
                       
                       
                        if(conn !=null){
                                try {
                                        conn.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                conn = null;
                        }
JDBC工具类
由于开发过程中重复代码很多,因此可以抽取重复代码编写出工具类,减少代码量,提高代码的复用性.
测试工具类时使用test测试,写入test通过Alt+斜杠的快捷方式调用
回复 使用道具 举报
叶凌青
今天主要学习了JDBC
什么是jdbc,自我理解就是一组接口,一些规范
导入驱动jar包
开发步骤:
1注册驱动
Class.forName("com.mysql.jdbc.Driver");
类加载到内存,该类的静态代码将自动执行。
2.获得连接

Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);
3.获得预处理对象
Statement stmt = con.createStatement();
常用方法:
int executeUpdate(String sql); --执行insert update delete语句.
ResultSet executeQuery(String sql); --执行select语句.
boolean execute(String sql); --执行select返回true 执行其他的语句返回false.
4.处理结果集,执行select的时候需要(执行insert、update、delete无需处理)
ResultSet rs = stat.executeQuery(sql);
5.释放资源
rs.close();
stmt.close();
con.close();
从后往前,逐个关闭
总结:开发步骤贾莲欲执事
回复 使用道具 举报
康元中
1 JDBC : 是一个接口作用是 java程序访问数据库的一个桥梁. 大大降低程序员学习负担
(因为数据库有上百种如mysql 和Oracle 等如果要开发一个系统要是用某个数据库就得学习该数据库的
各种驱动 所以sun公司提供了一套规范,每个数据库的生产商提供这套规范的实现 )
2 SQL注入漏洞是 : 使用statement时为了不使得数据写死,使用字符串拼接的方式书写sql语句,
但是传入的字符串中有带有单引号的字符漏洞 就改变了sql拼接语句中的含义,使得出现漏洞
        通过prepareStatement预编译可避免sql注入漏洞
解决sql注入漏洞方法是 使用PreparedStatement 就可以吧解决,因为该对象方法中已经
对输出的特殊符号进行处理 .通过?占位符固定了sql语句的格式.
3JDBC的编译对像进行CRUD操作
步骤: "贾琏欲执事""的记忆步骤
加载驱动
获取连接对象
编写sql语句
获取sql执行对象
释放资源
回复 使用道具 举报
李思贤:今天学习了JDBC(java database connectivity),它是连接java与数据库的一座桥梁.

注意:使用JDBC 必须先导入jar包.
     JDBC基本使用步骤:贾琏欲执释{
1.加载驱动 Class.forName("com.mysql.jdbc.Driver");
2获得连接 conn=DriverManager.getConnection("...","root",""123456");
3.获得执行SQL语句对象 statement=conn.createStatement();
4.执行SQL语句   rs=statement.executeQuery("SQL语句");
5.释放资源
}
CRUD的操作,即增删改查的使用,这些的使用中查和增删改查基本执行的方法相同,不同的是查询使用executeQuery(),增删改使用executeUpdate().

       由于操作中的内容重复的太多,然后可以将其抽取出来进行封装成一个JDBCUtil工具类来进行使用.
将配置信息提取到配置文件.properties然后在util工具类中进行使用,最后在使用中进行调用就可以
(工具类中定义释放资源的方法需要有两个,因为增删改和查所释放的资源参数不同)        
回复 使用道具 举报
陈世彪:
今天学习了JDBS
JDBS是java和数据库进行连接的桥梁
JDBS的作用是可以为多种数据库提供统一访问,是一种标准,节约开发成本
SQL注入漏洞是通过已知的用户名直接进入到系统当中去,不用输入密码
解决方法:prepareStatement,这个对象将SQL预先进行编译,使用?作为占位符。再次传入变量,这个时候就不会再识别这些关键字。
使用JDBC进行编译时分为:
打开驱动
Class.for("com.mysql.jdbc.Driver")
获取连接对象
DriverManager.getConnection("jdbc:mysql://localhost:3306/classsql","root", "root");
获取执行语句的对象
conn.createStatement()
执行语句并处理数据
statement.executeQuery(sql);
释放数据操作相关对象
.close
结果集为ResultSet rs。使用while(rs.next())遍历是否有下一个数据
使用prepareStatement 可以使用setString()来设置数据,第一个是指第几个?  第二个是要设置的值
?也是来表示占位符
回复 使用道具 举报
张述明
今天学习了Jdbc
jdbc 是SUN公司提供的一套接口规范.
今天主要对jdbc的基本操作,包括增删修查
重点要掌握的内容 Connection  Statement  ResultSet   preparedStatement
Jdbc的开发步骤
贾琏欲执事
贾    加载驱动
琏    获得连接
欲    创建SQL语句
执    执行sql语句
事    释放资源

加载驱动  Class.forName(“com.mysql.jdbc.Driver”);
获得连接  DriverManager.getConnection(“url”,”username””password”)
释放资源   分成两种 如果有结果集 就要多释放一个ResultSet
      增删改没有结果集 在执行语句可用executeUpdate(sql) 返回一个int类型值
只有查询有   查询在执行语句用executeQuary (sql)返回一个String类型
由于今天的许多代码重复,所以可抽取工具类中,然后在测试中调用方法
重复的代码主要是加载驱动,获得连接,和释放资源
将可变的元素抽取到prpperties文件中 如url,username,password,DriverclassName;
preparedStatement 是为了解决sql的注入漏洞 将sql中的操作对象用?代替,然后调用set方法来赋值,解决了sql的注入漏洞的问题.
回复 使用道具 举报
  黄志彬
  今天学习了JDBC 就是Java的数据库(DataBase)接口( Connection),是两个应用之间的通信桥梁。
  Connerction 作用: 创建执行SQL语句,管理事务
  jdbc开发的5个步骤:贾琏欲执事
        1加载驱动。成功加载后会将driver类的示例注册到DriverManager类中
        2获得连接       
        3获得语句对象  编写sql,创建语句查询对象,执行sql,遍历(查询)
        4执行语句。  Statement接口提供了三种执行SQL语句的方法,executeQuery (查)和executeUpdate(增删改)及 execute。
        5释放资源。        操作完成后要把所有使用的JDBC对象全部关闭,以释放JDBC资源,关闭顺序和声明顺序相反
注意,导包的话要导java.sql下的包,测试方法不加静态修饰

        JDBC的增删改查

修改操作
设置参数里面的数是从1开始的,而不是索引


工具类的提取和配置文件:
JDBC所需要的四个参数(用户名, 密码, URL,driverClass驱动)
获取属性文件中的内容 为常量赋值
java中有一个对象Properties可以获得属性中的内容
解析属性文件中的内容要调用load方法 方法里面传入输入流
使用对象properties调用getProperty(传入属性文件中的key),获取到的值赋给JDBC所需要的四个参数

命名规则:除了数据,其他的尽量不要写中文,安装目录也不要写中文
回复 使用道具 举报
何平波
JDBC
1.什么是JDBC?  一套被规范的接口
java database connection (java与数据库的连接)
可以让我们在java代码中写sql语言,用java代码操作数据库.
2.精髓  贾琏欲执事  
(1)引包 导包
5行代码步骤
1.加载驱动
class.forname("jdbc包的路径")
2.获得连接: drivermanager.getconnection
写法:Connection conn =drivermanager.getconnection("url","数据库账户","数据库密码") 这里需要connection接受获得
Connection:和数据库连接的对象
        作用:1.创建执行sql语句
             2.管理实务..
     url:与数据库连接的路径   jdbc:mysql://localhost:3306/数据库名
                        jdbc:连接数据库的协议
                        mysql:是jdbc的子协议
        localhost:3306 连接的mysql数据库服务器的主机地址
        3306:mysql数据库服务器端口号
       
           user:与数据库连接的用户名
        passwo:与数据库连接的密码
注意:1.这里的localhost:3306连接的是自己的主机,如果连接的是其他主机的数据库填入的是其他主机的IP地址.
2.url中间的localhost:3306是可以省略不写的,因为这里连接的是自己的主机名.但不推介这种方式.
获得语句对象


3.获得执行sql语句的对象  Statement Statement = conn.createStatement();
  编写sql语句
  执行sql
遍历结果集
释放资源

3.工具类的抽取

注册驱动的方法:void 捕获注册方法

获得连接的方法:将驱动一并注册, 路径账户密码
                返回注册对象 方法一样
释放资源的方法
                释放资源 两个 或 3个
(statement , connection )  两个或3个参数
这种方法经常需要修改数据
私有的final来修饰需要床数据的对象  如注册 路径 账户 密码
然后放在静态代码块里
回复 使用道具 举报
吴俊斌

jdbc就是sun公司提供的接口,用java和数据库之间通信的桥梁

一般步骤:贾琏欲执事

1.加载驱动

就是通过Class.forName("com.mysql.jdbc.Driver");

2.获得连接

Connection 变量名=DriverManager.getConnection("jdbc:mysql://ip地址:端口/数据库名","用户名",密码);

3.创建Sql语句对象

Statement  变量名=连接对象名.createStatement();

4.执行sql语句
  查询的方法是:sql对象.executeQuery("sql执行语句")得到一个结果
  可以遍历它.
    while(结果对象.next){
       用对象.getString等获取想要输出的内容
}

5.释放资源

就是把对象.close

这会产生漏洞注入,解决方法就是使用preparedStatement代替,将有可能出现问题的用?号代替.再通过setString之类的方法
替换.这样在用户输入符号就会转成普通没有特殊意思的字符
回复 使用道具 举报
郑志祥(day10jdbc)
能够用自己的话阐述什么是JDBC?使用JDBC作用是什么?
JDBC是由sum公司提供的一套规范的借口,(让所有的数据库厂商都通用的接口)
数据库驱动;两个设备之间的沟通桥梁。

能够用自己的话阐述什么是SQL注入漏洞并给出解决方法?
SQL漏洞的产生是在用户名填写入了
aaa’ or ‘1=1 密码随意(方式一)
  aaa’ --      密码随意(方式二)
"select * from user where username = '"+username+"' and password = '"+password+"'"
Statement对于sql语句字符串只能进行拼接,容易出现SQL漏洞注入
解决方式;PreparedStatement则可以使用占位符 ?,通过这个来代替字符串拼接,解决了SQL漏洞注入的问题。
// 编写SQL语句:
String sql = "select * from user where username = ? and password = ?";
// 预编译SQL
pstmt = conn.prepareStatement(sql);
// 设置参数:
pstmt.setString(1, username);
pstmt.setString(2, password);
注释1,2,代替的?的位置,从1开始,跟索引区别
独立完成使用JDBC的预编译对象进行CRUD操作(重点)
1,加载驱动
2,获得连接
3,获得语句对象
4.执行代码
5,释放资源
如果是查找记得加上ResultSet结果集,多个查找用while遍历,如果是单个查找用if语句,还学学习了抽取工具类(不是很明白),大概知道是为了减少代码的重复性,而进行优化,
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马