JDBC的总结

JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。

执行流程:

  1. 连接数据源,如:数据库;
  2. 为数据库传递查询和更新指令;
  3. 处理数据库响应并返回的结果;

JDBC(Java Data Base Connectivity  :java数据库连接)是SUN公司为了简化,统一对数据库的操作,定义的一套Java操作数据库的规范;

JDBC代码的编译步骤:

  • 加载驱动
Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")
  • 获取与数据库的连接
DriverManager.registerDriver(new Driver());
DriverManager.getConnection(url, user, password);
  1. 采用registerDriver方法注册驱动,一方面是Driver的源码容易查看到,而且还会导致驱动程序注册两次,在内存中会出现两个Driver对象;另一方面程序依赖mysql的API,如果没有jar包,再次切换底层数据库是很麻烦的;所以一般不推荐使用
  2. Class.forName("com.mysql.jdbc.Driver");这种方法只需要一个字符串,不依靠驱动并且不会导致驱动内存对象重复出现;
  3. URL的写法: jdbc:mysql://localhost:3306/test?参数名:参数值 
  • 获取用于向数据库发送SQL语句的statement;
conn.createStatement();
conn.prepareStatement(sql);

Statement  对象用于向数据库发送SQL语句,Statement对象常用方法:

  1. executeQuery(String sql):用于向数据库发送查询语句;
  2. executeUpdate(String sql):用于向数据库发送inset,update,或delete语句;
  3. execute(String sql):用于向数据库发送任意的sql语句;
  4. addBatch(String sql):把多条sql语句放到一个批处理中;
  5. executeBatch():向数据库发送一批sql语句执行;
  • 向数据库发SQL,并获取代表结果集的resultset;

ResultSet  用于代表sql语句的执行结果;一般会采用类似表格的方式封装执行结果;该对象提供获取数据的get()方法:

  1. getObject(int index)
  2. getObject(string columnName)
  3. getString(int index)
  4. getString(String columnName)
  • 获取结果集的数据;
  • 关闭链接,释放资源;

这里释放的是程序在运行的过程中,创建的那些与数据库进行交互的对象。通常是ResultSet,Statement,Connection;

JDBC增删改查

增操作(create):

Statement st = conn.createStatement();
String sql = "insert into user(….) values(…..) ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!!!");
}

更新操作(update):

Statement st = conn.createStatement();
String sql = “update user set name= ' ' where name= ' ' ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“修改成功!!!");
} 

删除操作(delete):

Statement st = conn.createStatement();
String sql = “delete from user where id=1”;
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“删除成功!!!");
}

查操作(read):

Statement st = conn.createStatement();
String sql = “select * from user where id=1;
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
}

 

PreparedStatement与Statement的区别

  1. PreperedStatement是Statement的子类 ;
  2. 它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象 而言:PreperedStatement可以避免SQL注入的问题
  3. Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对 SQL进行预编译,从而提高数据库的执行效率
  4. PreperedStatement对于sql中的参数, 允许使用占位符的形式进行替换;

PreparedStatement 的占位符使用代码实例:

public static void main(String[] args) {
int _id=1;
String _name="张三";
String _gender="男";
Connection con=null;
PreparedStatement ps=null;

try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//使用驱动创建连接
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123456");
//定义sql语句
String sql="insert into hehe values(?,?,?)";
//创建执行命令对象
ps= con.prepareStatement(sql);
//设置参数
ps.setInt(1, 1);
ps.setString(2,_name);
ps.setString(3, _gender);

//执行命令并接受结果
int result=ps.executeUpdate();
System.out.println(result);

} catch (ClassNotFoundException e) {

e.printStackTrace();
} catch (SQLException e) {

e.printStackTrace();
}finally{
try {
if(null!=ps)
ps.close();
if(null!=con)
con.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
}

}
posted @ 2019-07-12 23:26  张**  阅读(174)  评论(0)    收藏  举报