JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 ——百度百科
利用eclipse实现JDBC连接mysql数据库
右击项目名称,选择properties->java build path->add library->找到驱动文件所在路径并选择->apply andclose
Class.forName("com.mysql.jdbc.Driver");或者Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","name","pwd");
PreparedStatement pstmt = null;
pstmt = getConn().prepareStatement(sql);
pstmt.setInt(1, mypwd);//setInt传递整型变量,sql中的第一个参数,值为mypwd变量。
[Statement stmt = conn.createStatement();]
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;】
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)
try {
if(rs != null) {
rs.close();
}
if(pstmt != null) {
pstmt.close();
}
// if(conn != null) {
// conn.close();
// }//连接不在这里关,因为有的连接还要用
}catch(SQLException e){
e.printStackTrace();
}