JDBC连接数据库(一)
使用JDBC连接数据库
(一)JDBC简介
(1)什么是JDBC
JDBC: Java Data Base Connectivity (Java数据库连接),JDBC是由Java语言编写的相关类和接口组成。它可以为多种数据库提供统一的访问,并支持SQL语句。还可以利用Java代码连接多种数据库(Oracle,SQL Server,MySql),从而实现操作数据库的目的。
(2)JDBC操作
操作主要分为三大步骤:①注册驱动连接数据库,②建立操作指令操作数据库 ③关闭并释放操作指令对象
(3)JDBC常用类和接口
①连接数据库接口Connection
②驱动程序管理类DriverManager
③操作指令接口Statement;Preparedstatement;CallableStatement
④结果集合接口ResultSet
(二)JDBC编程
JDBC编程步骤
①导入相关数据库驱动包mysql-connector-java-5.1.5-bin.jar
②加载驱动程序Class.forName(driver).newInstance()
③获取数据库连接connection = DriverManager.getConnection(url, user, password);
④创建操作指令对象statement = connection.createStatement();
⑤向数据库发送操作指令 例如:resultSet = statement.executeQuery(“select* from 表名”)
⑥处理数据库的返回结果 例如:resultSet.next();resultSet.getString(””)
⑦逆置关闭并释放相关类和接口 例如:closeResultSet;closeStatement;closeConnection。
JDBC编程相关方法
①数据库连接接口Connection
(1)createStatement()方法:创建一个 Statement
对象来将 SQL 语句发送到数据库
(2)prepareStatement()方法: 创建一个 PreparedStatement
对象来将参数化的 SQL 语句发送到数据库
(3)prepareCall()方法: 创建一个 CallableStatement
对象来调用数据库存储过程
(4)setAutoCommit()方法:将此连接的自动提交模式设置为给定状态
(5)commit()方法:使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection
对象当前持有的所有数据库锁
(6)rollback()方法: 取消在当前事务中进行的所有更改,并释放此 Connection
对象当前持有的所有数据库锁
(7)close()方法:立即释放此 Connection
对象的数据库和 JDBC 资源,而不是等待它们被自动释放
②操作指令接口:Statement
(1)execute(String sql)方法: 执行给定的 SQL 语句,该语句可能返回多个结果
(2)executeQuery(String sql)方法:执行给定的 SQL 语句,该语句返回单个 ResultSet
对象
(3)executeUpdata()方法:运行更新操作,返回更新的行数
(4)close()方法:立即释放此 Statement
对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作
③结果集合接口ResultSet
(1)next()方法:将光标从当前位置向前移一行
(2)frist()方法: 将光标移动到此 ResultSet
对象的第一行
(3)last()方法:将光标移动到此 ResultSet
对象的最后一行
(4)getXXX()方法:以 Java 编程语言中 XXX 的形式获取此 ResultSet
对象的当前行中指定列的值
(5)close()方法:立即释放此 ResultSet
对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作
④特殊操作指令接口:Preparedstatement;CallableStatement
(1)setXXX(int parameterIndex, XXX x)方法:将指定参数设置为给定 JavaXXX值
(2)getXXX(XXX parameterName)方法: 以 Java 编程语言中 XXX 值的形式获取 JDBC XXX 参数的值
(3)execute()方法:在此PreparedStatement/CallableStatement
对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句
(4)executeQuery()方法 在此 PreparedStatement/
CallableStatement对象中执行 SQL 查询,并返回该查询生成的 ResultSet
对象
(5)executeUpdata()方法 在此 PreparedStatement/CallableStatement
运行更新操作,返回更新的行数
⑤驱动程序管理类DriverManager
(1)getConnection(String url)
试图建立到给定数据库 URL 的连接
(2)getConnection(String url,Sting user,String password)试图建立到给定数据库 URL 的连接
JDBC连接数据库优化
①封装数据库代码
②优化编译预处理
③优化存储过程
④优化事务处理机制(注入攻击和取消在当前事务中进行的所有更改)
(三)代码演示
①封装数据库代码
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.Statement; 5 /* 6 * 封装数据库相关操作 7 * 8 */ 9 public class JdbcTool { 10 // (1)注册驱动变量 11 static String driver = "com.mysql.jdbc.Driver"; 12 // (2)统一资源定位符 13 static String url = "jdbc:mysql://localhost/t_user?useUnicode=true&characterEncoding=utf-8"; 14 // (3)用户名 15 static String user = "root"; 16 // (4)密码 17 static String password = "yao13539753785"; 18 19 // (5)与数据库建立连接 20 public static Connection getConnection() { 21 Connection connection = null; 22 // 注册驱动 23 try { 24 Class.forName(driver).newInstance(); 25 connection = DriverManager.getConnection(url, user, password); 26 System.out.println("连接成功..."); 27 } catch (Exception e) { 28 System.out.println("连接失败..."); 29 } 30 return connection; 31 } 32 33 // (6)关闭并释放 34 public static void closeResultSet(ResultSet resultSet) { 35 try { 36 if (resultSet != null) { 37 resultSet.close(); 38 resultSet = null; 39 System.out.println("关闭ResultSet成功..."); 40 } 41 } catch (Exception e) { 42 System.out.println("关闭ResultSet失败..."); 43 } 44 } 45 46 public static void closeStatement(Statement statement) { 47 try { 48 if (statement != null) 49 statement.close(); 50 statement = null; 51 System.out.println("关闭Statement成功..."); 52 } catch (Exception e) { 53 System.out.println("关闭Statement失败..."); 54 } 55 } 56 57 public static void closeConnection(Connection connection) { 58 try { 59 if (connection != null) { 60 connection.close(); 61 connection = null; 62 System.out.println("关闭Connection成功..."); 63 } 64 } catch (Exception e) { 65 System.out.println("关闭Connection失败..."); 66 } 67 68 }
②查询数据库
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.sql.Statement; 4 import com.thxy.jdbcTool.*; 5 /* 6 * 操作指令接口Statement相关操作 7 */ 8 public class StatementWays { 9 // 操作数据库 10 Connection connection = null; 11 Statement statement = null; 12 ResultSet resultSet = null; 13 // (1)查询数据库(正常查询) 14 public void select() { 15 try { 16 connection = JdbcTool.getConnection(); 17 statement = connection.createStatement(); 18 resultSet = statement.executeQuery("select* from t_form"); 19 while (resultSet.next()) { 20 String name = resultSet.getString("name"); 21 String password1 = resultSet.getString("password"); 22 String phone = resultSet.getString("phone"); 23 System.out.println("姓名" + name + "\n" + "密码" + password1 + "\n" + "电话" + phone); 24 } 25 System.out.println("查询成功...."); 26 } catch (Exception e) { 27 System.out.println("查询失败...."); 28 } finally { 29 JdbcTool.closeResultSet(resultSet); 30 JdbcTool.closeStatement(statement); 31 JdbcTool.closeConnection(connection); 32 } 33 34 }
③增添数据库信息
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.sql.Statement; 4 import com.thxy.jdbcTool.*; 5 /* 6 * 操作指令接口Statement相关操作 7 */ 8 // (2)向数据库增添信息 9 public void insert(String name, String password, String phone) { 10 try { 11 connection = JdbcTool.getConnection(); 12 statement = connection.createStatement(); 13 int i = statement.executeUpdate("insert into t_form(name,password,phone) values(" + "'" + name + "'" + "," 14 + "'" + password + "'," + "'" + phone + "'" + ")"); 15 System.out.println("增加" + i + "条记录"); 16 } catch (Exception e) { 17 System.out.println("增加信息失败..."); 18 } finally { 19 JdbcTool.closeStatement(statement); 20 JdbcTool.closeConnection(connection); 21 } 22 }
③删除数据库信息
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import com.thxy.jdbcTool.*; 4 /* 5 * 操作指令接口Statement相关操作 6 */ 7 // (3) 删除数据库的信息 8 public void delete(String name) { 9 try { 10 connection = JdbcTool.getConnection(); 11 statement = connection.createStatement(); 12 int i = statement.executeUpdate("delete from t_form where name='" + name + "'"); 13 System.out.println("删除" + i + "条记录..."); 14 } catch (Exception e) { 15 System.out.println("删除失败"); 16 } finally { 17 JdbcTool.closeStatement(statement); 18 JdbcTool.closeConnection(connection); 19 } 20 }
④更改数据库信息
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import com.thxy.jdbcTool.*; 4 /* 5 * 操作指令接口Statement相关操作 6 */ 7 public void update(String name, String password) { 8 try { 9 connection = JdbcTool.getConnection(); 10 statement = connection.createStatement(); 11 int i = statement 12 .executeUpdate("update t_form set password='" + password + "'" + " where name='" + name + "'"); 13 System.out.println("更新" + i + "条记录..."); 14 } catch (Exception e) { 15 System.out.println("更新失败"); 16 } finally { 17 JdbcTool.closeStatement(statement); 18 JdbcTool.closeConnection(connection); 19 } 20 }
⑤注入攻击
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.sql.Statement; 4 import com.thxy.jdbcTool.*; 5 /* 6 * 操作指令接口Statement相关操作 7 */ 8 // (5)注入攻击 9 public void noSelect(String name) { 10 try { 11 connection = JdbcTool.getConnection(); 12 statement = connection.createStatement(); 13 resultSet = statement.executeQuery("select* from t_form where name='" + name + "'"); 14 while(resultSet.next()) 15 { 16 System.out.println("注入攻击成功..."); 17 name=resultSet.getString("name"); 18 String password=resultSet.getString("password"); 19 String phone=resultSet.getString("phone"); 20 System.out.println("姓名"+name+"\n"+"密码"+password+"\n"+"手机"+phone); 21 } 22 } catch (Exception e) { 23 System.out.println("注入攻击失败..."); 24 }finally { 25 JdbcTool.closeResultSet(resultSet); 26 JdbcTool.closeStatement(statement); 27 JdbcTool.closeConnection(connection); 28 } 29 }