JDBC连接mysql数据库

  JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序    ——百度百科

0X00 版本1(版本2将使用DAO文件简化操作)

利用eclipse实现JDBC连接mysql数据库

0X01 加载数据库驱动

右击项目名称,选择properties->java build path->add library->找到驱动文件所在路径并选择->apply andclose

Class.forName("com.mysql.jdbc.Driver");或者Class.forName("org.gjt.mm.mysql.Driver");

0X02 创建数据库连接

Connection conn = null;

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","name","pwd");

 

0X03 创建数据库执行对象

PreparedStatement pstmt = null;

pstmt = getConn().prepareStatement(sql);

pstmt.setInt(1, mypwd);//setInt传递整型变量,sql中的第一个参数,值为mypwd变量。

 

[Statement stmt = conn.createStatement();]

0X04 执行SQL语句

ResultSet rs = null;

rs = pstmt.executeQuery();//执行结果返回给rs 集合

executeQuery(),执行查询操作,返回一个结果集,需要用到resultset 接收。resultset使用指针,指针只可以单向移动,不能回到起始位置,所以重复执行两次,也只有一个resultset结果集。

executeUpdate(),执行修改操作,不需要resultset,但是可以返回一个行数,如插入一个字段,返回成功插入一行的“1”,可以用int型变量接收。

execute(),用于执行返回多个结果集、多个更新计数或二者组合的语句

1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。

PreparedStatement方式:使用的是预编译,执行预编译之后的内容,可以防止SQL截断注入攻击,sql语句在执行对象建立时赋值,如:pstmt = getConn().prepareStatement(sql);

Statement方式:未进行预编译,存在SQL注入漏洞,sql语句写在excute()括号内,如:stmt.executeUpdate("insert into dept(deptno,dname,loc) values(31,'admin','1234')"); 【where username = name and password = pwd or 'a'= 'a;】

0X05 处理结果集--只针对查询操作 

rs.next()的使用

ResultSet 对象具有指向其当前数据行的指针。

最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时

返回 false,所以可以在 while 循环中使用它来迭代结果集。

一般常用:

While(rs.next()){

//如果返回ture

//可以循环取出多行数据

}

If(rs.next()){

//如果返回ture

再取出指针所指向的那行数据

}

参考文章:https://blog.csdn.net/yong97go/article/details/81805877 

1.一开始是处于第一行之前,即beforeFirst,第一次使用next()就将指针指向返回结果集的第一行。

2.每使用一次next(),指针就指向下一行,这时候你就可以使用rs.getObject()或者getInt()或者getString()之类的方法返回该行的某一个字段的值,也就是getObject()方法里面的参数可以传递索引(索引由1开始),即如果你的数据库第一列的数据叫id,那你可以用getObject("id")或者getObject(1)得到你的rs目前指着的那一条数据的该列的值。

3.当next()成功的时候其实会返回一个布尔值true,当指针指到最后一行的后面时候,即afterLast()就返回布尔值false。 

4.所以第一次调用next()的时候应该是指向第一行数据。next()在指针指向第一行之前到最后一行之间的返回true的,也就是当你的指针已经指向到最后一行的数据集了,再用一次next()是返回true的,但此时再用一次next()就是false,因为执政已经到最后一行的后面了(也就是afterLast)

0X06 关闭连接

try {
            if(rs != null) {
                rs.close();
            }
            if(pstmt != null) {
                pstmt.close();
            }
//            if(conn != null) {
//                conn.close();
//            }//连接不在这里关,因为有的连接还要用
            
        }catch(SQLException e){
            e.printStackTrace();
        }

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyx107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值