JDBC详解

连接数据的步骤:

                1.注册驱动 (只做一次)

                2.建立连接(Connection) 

                3.创建执行SQL的语句(Statement)

                4.执行语句

                5.处理执行结果(ResultSet)

                6.释放资源

注册驱动:

 Class.forName(com.mysql.jdbc.Driver);

推荐这种方式,不会对具体的驱动类产生依赖。

DriverManager.registerDriver(com.mysql.jdbc.Driver);

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

System.setProperty(jdbc.driversdriver1:driver2);

虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。 

驱动类型(四种类型)

建立连接(Connection)

Connection conn = DriverManager.getConnection(url, user, password);

url格式:

JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&

User,password可以用“属性名=属性值”方式告诉数据库;

其他参数如:useUnicode=true&characterEncoding=GBK

创建执行SQL的语句(Statement)

Statement

 Statement st = conn.createStatement();

st.executeQuery(sql);

PreparedStatement

String sql = select * from table_name where col_name=?;

PreparedStatement ps = conn.preparedStatement(sql);

ps.setString(1, col_value);

ps.executeQuery();

处理执行结果(ResultSet)

ResultSet rs = statement.executeQuery(sql);

While(rs.next()){

rs.getString(col_name);

rs.getInt(col_name);

//

}

释放资源:

释放ResultSet, Statement,Connection.

数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

CRUD总结:

增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。

查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增、删、改要复杂一些,因为有查询结果要处理。

SQL注入,PreparedStatementStatement 

SQL中包含特殊字符或SQL的关键字(如:' or 1 or ')Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。

PreperedStatement(从Statement扩展而来)相对Statement的优点:

1.没有SQL注入的问题。

2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。

3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。

发布了32 篇原创文章 · 获赞 18 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章