1.原生JDBC:
* 原生JDBC:使用java程序操作数据库,对数据库表进行增删改查(CURD)
* 实现步骤:
* 1.注册驱动
* 告知JVM我们使用的是那种驱动程序(mysql驱动,oracle驱动)
* 2.获取数据库连接对象
* mysql数据库,是一个TCP服务器,我们必须使用客户端经过3次握手,和服务器建立连接通路
* 客户端(黑窗口,SQLyog,java程序)
* 就相当于在java程序和mysql服务器之间建立一条道路,这个连接通路中有一个IO对象
* 3.获取执行者对象
* 用来执行sql语句,对象数据库表进行增删改查
* 4.使用执行者对象执行sql语句,获取执行结果
* 增删改:返回值是一个整数,影响数据库的有效行数(affected受影响的)
* 查询:会查询出多行结果,把多行结果,存储一个ResultSet结果集中(集合)
* 5.处理结果集
* 6.释放资源
* 注意:
* 1236是固定不变的步骤
* 45根据增删改查不同,而不同
public class Demo02JDBC { public static void main(String[] args) throws Exception { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04", "root", "root"); //3.获取执行sql语句的执行者对象 Statement stat = conn.createStatement(); //insert(stat); //update(stat); //delete(stat); select(stat); //6.释放资源 stat.close(); conn.close(); } private static void select(Statement stat) throws SQLException { //4.使用执行者对象,执行sql语句 String sql = "SELECT * FROM category"; ResultSet rs = stat.executeQuery(sql); //5.处理结果 while(rs.next()){ System.out.println(rs.getString("cid")+"\t"+rs.getString("cname")); } } /* * 使用JDBC技术,对象数据库表中的数据进行删除 */ private static void delete(Statement stat) throws SQLException { //4.使用执行者对象,执行sql语句 String sql = "DELETE FROM category WHERE cid IN(5,6)"; int row = stat.executeUpdate(sql); //5.处理结果集 if(row>0){ System.out.println(row+"行数据删除成功!"); }else{ System.out.println("数据删除失败!"); } } /* * 使用JDBC技术,对象数据库表中的数据进行修改 */ private static void update(Statement stat) throws SQLException { //4.使用执行者对象,执行sql语句 String sql = "UPDATE category SET cname = ‘巧克力‘ WHERE cid = 7"; int row = stat.executeUpdate(sql); //5.处理结果集 if(row>0){ System.out.println("数据修改成功!"); }else{ System.out.println("数据修改失败!"); } } /* * 使用JDBC技术,对象数据库表进行添加数据 */ private static void insert(Statement stat) throws SQLException { //4.使用执行者对象,执行sql语句 String sql = "INSERT INTO category (cname) VALUES(‘零食‘)"; int row = stat.executeUpdate(sql); //5.处理结果集 System.out.println(row); } }
2.占位符;
//3.获取预编译的执行者对象,需要传递sql语句,sql语句中可以使用?占位符代替实际参数
String sql = "SELECT * FROM users WHERE username=? AND PASSWORD = ?";
PreparedStatement pst = conn.prepareStatement(sql);
/*
* 4.使用PreparedStatement接口中的方法,设置?占位符的实际参数
* void setObject(int parameterIndex, Object x) 使用给定对象设置指定参数的值。
* 参数:
* int parameterIndex:要设置的第几个?占位符;1,2,3.....
* Object x:给?占位符设置的实际参数
* 注意:
* 必须保证给所有的?占位符都设置实际参数,有几个?占位符就调用几次setObject方法
*/
pst.setObject(1, username);
pst.setObject(2, password);