--周记(杂)2019年7月19日

一. JDBC
1.// 注册驱动

  1. 使用 java . sql . DriverManager 类静态方法 registerDriver(Driver driver)

  2. 注册应使用 反射特性

    Class . forName( "com . mysql . jdbc . Driver" ); 推荐

    DriverManager . registerDriver(new com . mysql . jdbc . Driver() );  不推荐
    

2.// 获得数据库的连接

  1. 使用 DriverManager 类中静态方法

  2. 方法 法名 “Connection getConnection(String url , String user , String password)”(静态方法
    功能:获取数据库的连接,返回 Connection 接口的实现类,在 mysql 驱动程序;

url: 数据库地址 jdbc : mysql : // 连接主机 IP :端口号 / 数据库名字

例:

String  url  =  " jdbc:mysql://localhost:3306/mybase "
	   String  username = "root" , password = "root"
       Connection  con  =  DriverManager . getConnection( url , username , password );
       System . out . println( con ); 
  1. // 获得语句执行平台

1.通过数据库连接对象,获取到 SQL 语句的执行者对象
Connection 对象调用方法 Statement createStatement( ) 获取 Statement 对象,将 SQL 语句发送到数据库
返回值是 Statement 接口的实现类,在 mysql 驱动程序

  1. 方法 法名 " . createStatement( )" (静态方法)

例:Statement stat = con . createStatement( );

4.// 执行 sql 语句

  1. 通过执行者调用方法执行 SQL 语句,获取结果

  2. 方法 法名 “executeUpdate( String sql )
    功能:执行数据库中的 SQL 语句,只能进行 insert delete update 。 返回 int 类型

例:int row = state . executeUpdate("INSERT INTO sort ( sname,sprice,sdesc ) VALUES ( '汽车用品' , 500000 , '疯狂涨价' )");

  1. 使用查询功能后要进行释放资源 . close( );

例:state . close( ); con . close( );

  1. 方法 法名 “executeQuery( String sql )
    功能:获取结果集执行 SQL 语句中的 select 查询,返回值 ResultSet 接口的实现类对象,实现类在 mysql 驱动中;

例:

String  sql  =  "SELECT  *  FROM  sort";
	ResultSet  rs  =  state . executeQuery( sql );
  1. 方法 法名 “next( )” (ResultSet 的接口方法
    功能:判断是否有结果集,有的话返回 true ,没有返回 false ;

例:

while( rs . next() ){
		System . out . println( rs . getInt("") + " " + rs . getString("") + " " + rs . getDouble("") );
	}

额:① 可以使用 getObject 方法
② 可以使用 getString 方法

这两种方法比较万能;

二. 比较推荐的方法
// PreparedStatement 接口

  1. 防止注入攻击

Statement 接口实现类,作用执行 SQL 语句,返回结果集
有一个子接口 PreparedStatement (SQL 预编译储存,多次高效的执行 SQL)
PreparedStatement 的实现类数据库的驱动中,如何获取接口的实现类

  1. 方法 法名"prepareStatement(String sql)"
    功能:SQL 预编译储存,多次高效的执行 SQL,返回结果集;返回 PreparedStatement 类型;
    该方法中所有参数, SQL 语句中的参数全部采用问号占位符

案例:

Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mybase";
String username = "root" , password = "root";
Connection con = DriverManager.getConnection(url, username, password);

String  sql  =  "SELECT  *  FROM  users  WHERE  username=?  AND  PASSWORD=?";
PreparedStatement  pst  =  con . prepareStatement( sql );

pst . setObject( 1 , user );
pst . setObject( 2 , pass );

ResultSet  rs  =  pst . executeQuery( );

① 方法 法名 “setObject( )
功能:调用 pst 对象 set 方法,设置问号占位符上的参数

  1. 方法 法名 “executeQuery( )”(PreparedStatement的方法
    功能:执行查询语句;返回 ResultSet 类型;

例:

ResultSet  rs  =  pst . executeQuery( );
       while( rs . next( ) ){
	System . out . println( rs . getString("...") + " " );
       }
       rs . close( ); pst . close( ); con . close( );
  1. 注入攻击的原因是因为 statement 不安全,这并不是 JAVA 语言的问题,而是 Sql 语言本身的问题,使得可能会出现
    将用户信息直接泄露的情况, 例如: “SELET * FROM users WHERE username= … AND PASSWORD=… OR 1 = 1
    这种情况会判断 1 = 1 ,错误性的进入了数据库,使得数据被泄露或者更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值