JDBC就是使用Java语言操作关系型数据库的一套API
本质上是官方公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动的jar包中的实现类。
好处是各数据库厂商使用相同的接口,Java代码不需要针对不同的数据库分别开发。
1.DriverManage
package com.jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.Statement; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 public class JDBCDemo { public static void main(String[] args) throws Exception { // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url="jdbc:mysql://127.0.0.1:3306/db1"; String usernam="root"; String password="root"; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 Connection conn=DriverManager.getConnection(url,usernam,password); // 定义sql String sql="update stu set status=2 where id=2"; // 获取执行sql的对象 Statement stat=conn.createStatement(); // 执行sql,返回受影响的行数 int count=stat.executeUpdate(sql); // 释放资源 stat.close(); conn.close(); } }
2.Connection
package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; //Connection作用 //获取执行SQL的对象 //管理事务 public class JDBCDemo2_Connection { public static void main(String[] args) throws Exception { // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url="jdbc:mysql://127.0.0.1:3306/db1"; String usernam="root"; String password="root"; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 Connection conn=DriverManager.getConnection(url,usernam,password); // 定义sql String sql1="update stu set status=2 where id=2"; String sql2="update stu set status=2 where id=3"; // 获取执行sql的对象 Statement stat=conn.createStatement(); try { // 开启事务 conn.setAutoCommit(false); // 执行sql,返回受影响的行数 int count1=stat.executeUpdate(sql1); System.out.println(count1); // 执行sql,返回受影响的行数 int count2=stat.executeUpdate(sql2); System.out.println(count2); // 提交事务 conn.commit(); } catch (Exception throwables) { // 回滚事务 conn.rollback(); throwables.printStackTrace(); } // 释放资源 stat.close(); conn.close(); } }
3.Statement
执行sql语句
int executeUpdate(sql) 执行DML DDL语句
返回值 DML返回影响的行数 DDL语句执行成功也可能会返回0
ResultSet executeQuery(sql); 执行DQL语句
返回ResultSet结果集对象
package com.jdbc; import com.pojo.Account; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; //Statement作用 //获取执行SQL的对象 //管理事务 //执行DML语句 public class JDBCDemo4_ResultSet { @Test public void testResultSet() throws Exception{ // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url="jdbc:mysql://127.0.0.1:3306/db1"; String usernam="root"; String password="root"; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 Connection conn=DriverManager.getConnection(url,usernam,password); // 定义sql String sql="select * from stu"; // 获取执行的对象 Statement stmt=conn.createStatement(); // 执行sql ResultSet rs=stmt.executeQuery(sql); // 处理结果 遍历re中的数据 // 光标向下移动一行,判断当前行是否有数据 while(rs.next()){ // 获取数据 int id=rs.getInt(1); String name=rs.getString(2); String gender=rs.getString(3); System.out.println(id); System.out.println(name); System.out.println(gender); } // 释放资源 rs.close(); stmt.close(); conn.close(); } // 查询数据库中的数据,封装到Account类中,并存储到ArrayList集合中 // 1.定义实体类 // 2.查询数据,封装到Account对象中 // 3.将Account对象放入ArrayList集合中 @Test public void testResultSet2() throws Exception{ // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url="jdbc:mysql://127.0.0.1:3306/db1"; String usernam="root"; String password="root"; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 Connection conn=DriverManager.getConnection(url,usernam,password); // 定义sql String sql="select * from stu"; // 获取执行的对象 Statement stmt=conn.createStatement(); // 执行sql ResultSet rs=stmt.executeQuery(sql); // 处理结果 遍历re中的数据 // 光标向下移动一行,判断当前行是否有数据 List<Account> list=new ArrayList<>(); while(rs.next()){ // 获取数据 Account account=new Account(); int id=rs.getInt(1); String name=rs.getString(2); String gender=rs.getString(3); account.setId(id); account.setName(name); account.setGender(gender); list.add(account); // System.out.println(id); // System.out.println(name); // System.out.println(gender); } System.out.println(list); // 释放资源 rs.close(); stmt.close(); conn.close(); } }
4.PreparedStatement
作用
1.预编译sql语句并执行,预防SQL注入问题,因为他把特殊字符转义了SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方。
2.速度更快
package com.jdbc; import com.pojo.Account; import org.junit.Test; import java.sql.*; import java.util.ArrayList; import java.util.List; //prepareStatement作用 //预防sql注入问题 //执行DML语句 public class JDBCDemo5_PreparedStatement { @Test public void testLogin() throws Exception{ // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url="jdbc:mysql://127.0.0.1:3306/db1"; String usernam="root"; String password="root"; // DriverManager.getConnection 获取数据库连接 // DriverManager.registerDriver(); 注册驱动 Connection conn=DriverManager.getConnection(url,usernam,password); String name=""; String psw=""; // 定义sql String sql="select * from tb_user where username=? and password=?"; // 获取执行的对象 PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setString(1,name); pstmt.setString(2,psw); // 执行sql ResultSet rs=pstmt.executeQuery(); // 判断是否有数据 if(rs.next()){ System.out.println("登录成功"); }else{ System.out.println("登录失败"); } // 释放资源 rs.close(); pstmt.close(); conn.close(); } }
标签:DriverManager,JDBC,java,String,sql,import,conn From: https://www.cnblogs.com/zhang12345/p/17218042.html