一.通过JDBC操作数据库——步骤:
第1步:注册驱动 (仅仅做一次)
第2步:建立连接(Connection)
第3步:创建运行SQL的语句(Statement)
第4步:运行语句
第5步:处理运行结果(ResultSet)
第6步:释放资源
二.具体步骤
第一步:载入驱动:
Class.forName(“com.mysql.jdbc.Driver”);
推荐这样的方式,不会对详细的驱动类产生依赖
第二步:建立连接:
通过Connection建立连接,Connection是一个接口类。其功能是与数据库进行连接(会话)。
建立Connection接口类对象:
Connection conn =DriverManager.getConnection(url, user, password);
当中URL的格式要求为:
JDBC:子协议:子名称//主机名:port/数据库名?属性名=属性值&…如:"jdbc:mysql://localhost:3306/test“
user即为登录数据库的username,如root
password即为登录数据库的密码,为空就填””
第三步:创建运行对象:
运行对象Statement负责运行SQL语句
PreparedStatement能够对SQL语句进行预编译,这样防止了 SQL注入 提高了安全性。
PreparedStatement ps=connection.prepareStatement( "update user set id=? where username=?”);
————sql语句中用 ? 作为通配符,变量值通过参数设入:ps.setObject(1, object);
而且预编译结果能够存储在PreparedStatement对象中。当多次运行SQL语句时能够提高效率。
作为Statement的子类,PreparedStatement继承了Statement的全部函数。
第四步:运行SQL语句:
运行对象Statement 或 PreparedStatement 提供两个经常使用的方法来运行SQL语句。
executeQuery(Stringsql);
该方法用于运行实现查询功能的sql语句。返回类型为ResultSet(结果集)。
如:ResultSet rs =st.executeQuery(sql);
executeUpdate(Stringsql);
该方法用于运行实现增、删、改功能的sql语句,返回类型为int,即受影响的行数。
如:int flag = st.executeUpdate(sql);
第五步:处理运行结果:
ResultSet
对象负责保存Statement运行后所产生的查询结果。
结果集ResultSet是通过游标来操作的。游标就是一个可控制的、能够指向随意一条记录的指针。
有了这个指针我们就能轻易地指出我们要对结果集中的哪一条记录进行改动、删除,或者要在哪一条记录之前插入数据。一个结果集对象中仅仅包括一个游标。
第六步——释放资源
三.Demo
package cn.jdbc.text;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Login2 {
//建议使用
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;//存放查询结果的对象:结果集对象
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day7","root","cuichen975541045");
//登陆的SQL
System.out.println("登录账号:");
String uid = input.next();
System.out.println("登陆密码");
String pwd = input.next();
String sqlLogin = "select * from emp where empno=? and pwd=?";
pstm = con.prepareStatement(sqlLogin);
//通过pstm对象给sql中?赋值
pstm.setString(1, uid);
pstm.setString(2, pwd);
rs = pstm.executeQuery();//执行select 使用executeQuery()
//判断结果集中是否有数据
if (rs.next()) {
System.out.println("登陆成功");
}else {
System.out.println("失败");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}