JavaJava专题

理解JDBC、Connection、Session、连接池

2017-09-13  本文已影响0人  沐兮_d64c

1,JDBC分析 image.png

1)概念

2)使用jdbc

//当com.mysql.jdbc.Driver被加载时,会注册驱动到DriverManager,执行以下代码。
static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF8"; 
String url="jdbc:oracle:thin:@localhost:1521:mydb";
String url="jdbc:sqlserver://localhost:1433;DatabaseName=mydb";
Class.forName("com.mysql.jdbc.Driver") ;  
Class.forName("oracle.jdbc.driver.OracleDriver"); 
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
Connection conn = DriverManager.getConnection(url,name,password); 
stmt = conn.createStatement();
String sql = "select id, username from account where id = " + id;//sql注入,id = "1 or 1=1"就会返回所有数据。
//`select * from user_admin where id = 1 or 1 = 1;`
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){ 
          int id = rs.getLong("id");
          String username = rs.getString("username"); 
          System.out.print("ID: " + id); 
          System.out.println("username: " + username); 
} 
rs.close(); 
stmt.close(); 
conn.close();

//防止sql注入。
String sql = "select id, username from account where id = ?";
PreparedStatement ps = conn.preparedStatement(sql); 
ps.setLong("1", 1L);

2,Connection 和 Session

3,数据库连接池。(druid, c3p0, dbcp等)

3,几个对比

1)jdbc,jdbctemplate,dbutils
jdbc是java数据库连接。
jdbctemplate是springframework-jdbc中对jdbc的封装。
dbutils是对jdbc的轻量级封装。
2)jpa,hibernate jpa,spring-data-jpa
jpa是Java Persistence API 是java持久化api。
hibernate jpa实现类jpa规范。
spring-data-jpa实现了jpa规范。

上一篇下一篇

猜你喜欢

热点阅读