时间:2021-07-01 10:21:17 帮助过:20人阅读
JDBC驱动程序实现了JDBC API接口。各个数据库厂家根据JDBC的规范制作的JDBC实现类。
PreparedStatement 接口继承了Statement接口,PreparedStatement接口更强大,甚至有人主张所有的查询都要使用 PreparedStatement。
大部分关系型数据库使用JDBC查询数据时会经过四步:
Statement执行查询时都会经历这四步,而PreparedStatement会预先执行1-3步,因此PreparedStatement会更快,并且PreparedStatement能够防止SQL注入,可以使用问号(“?”)做参数,使用setXXX()来为参数赋值。
PreparedStatement第一次执行时比较慢,所以如果一次执行的语句可以使用Statement,多次执行的语句用PreparedStatement。
mysql-connector-java-version
-bin.jar)
Java访问数据库步骤:
Class.forName("com.mysql.jdbc.Driver");
DriverManager.registerDriver()方法可以注册驱动程序,通过查看源码发现,在MySql的JDBC Driver实现类中的静态代码块已经实现了注册,所以使用反射方式注册。
public class Driver extends NonRegisteringDriver implements java.sql.Driver { 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";
String userName= "root";
String password = "123";
Connection conn = DriverManager.getConnection(url,userName,password);
获取执行对象分三种情况
情况1:执行静态Sql,使用Statement
Statement stat = conn.createStatement();
情况2:执行动态Sql,使用PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);
情况3:执行存储过程,使用CallableStatement
CallableStatement
方式1:executeUpdate用来执行 insert,update,delete 和 DDL语句。执行DDL语句返回 0,执行 Insert,Update,Delete 返回受影响的数据行数。
//drop table student; 删除表返回结果为0 int result = pst.executeUpdate(); System.out.println(result);
//insert into Student(sname,age) values (?,?)
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,"张三");
pst.setInt(2, 20);
//pst.setObject(1,"张三")
int result = pst.executeUpdate();
System.out.println(result);
方式2:executeQuery,返回结果为ResultSet
ResultSet rs = pst.executeQuery(); if(rs.next()){
//int id = rs.getInt(0); int id =rs.getInt("id"); String name = rs.getString("sname"); int age = rs.getInt("age"); System.out.println(id+name+age); }
方式3:execute
ResultSet,PreparedStatement,Connection都需要关闭,顺序为后得到的对象先关闭
rs.close();
pst.close();
conn.clost();
Connection
java.sql
接口 Connection
- 所有超级接口:
- Wrapper
public interface Connectionextends Wrapper
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection
对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用getMetaData
方法获得的。
PreparedStatement
java.sql
接口 PreparedStatement
- 所有超级接口:
- Statement, Wrapper
- 所有已知子接口:
- CallableStatement
public interface PreparedStatementextends Statement表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在
PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
常用方法
boolean execute()
在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
ResultSet executeQuery()
在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
int executeUpdate()
在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
ResultSet
java.sql
接口 ResultSet
- 所有超级接口:
- Wrapper
- 所有已知子接口:
- CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet
public interface ResultSetextends Wrapper表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
JDBC
标签:链接 建立数据库 制作 部分 jdb spi exec lock ima