2018蓝旭后端培训之JDBC
前言:在学习jdbc之前推荐大家再次学学常用的SQL语句,熟悉java API文档的查看
一.什么是JDBC
jdbc即Java Database Conection,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。JDBC是用于在Java语言编程中与数据库连接的API
二.运用jdbc能干什么?
-
连接到数据库
-
创建SQL或MySQL语句
-
在数据库中执行SQL或MySQL查询
-
查看和修改结果记录
三.解析jdbc提供的API(重点)
1.开发过程中常用的类和接口
Connection接口:与特定数据库的链接,通常使用的方法有:
(1)close():立即释放此 Connection
对象的数据库和 JDBC 资源,而不是等待它们被自动释放
(2)createStatement()
: 创建一个 Statement
对象来将 SQL 语句发送到数据库。
(3)prepareStatement(String sql):创建一个 PreparedStatement
对象来将参数化的 SQL 语句发送到数据库。
PreparedStatement接口:
表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。通常使用的方法有:
(1)execute():在此 PreparedStatement
对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。返回值是Boolean类型。
(2)executeQuery():在此 PreparedStatement
对象中执行 SQL 查询,并返回该查询生成的 ResultSet
对象。
(3)executeUpdate(): 在此 PreparedStatement
对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT
、UPDATE
或 DELETE
语句,该方法返回值是影响的行数。
(4)setBoolean(int parameterIndex, boolean x):将指定参数设置为给定 Java boolean
值。
(5)setString(int parameterIndex, String x):将指定参数设置为给定String值
(6)setInt(int parameterIndex, String x):将制定参数设置为给定int值
(7)setDate(int parameterIndex,Date x):使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date
值。
ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。常用的方法有:
(1)absolute(int row):将光标移动到此 ResultSet
对象的给定行编号。
(2)afterLast(): 将光标移动到此 ResultSet
对象的末尾,正好位于最后一行之后
(3)beforeFirst(): 将光标移动到此 ResultSet
对象的开头,正好位于第一行之前。
(4)close():立即释放此 ResultSet
对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
(5)deleteRow(): 从此 ResultSet
对象和底层数据库中删除当前行。
(6)first(): 将光标移动到此 ResultSet
对象的第一行。
(7)next():将光标从当前位置向前移一行。在这里需要注意的是光标的初始位置是在第一行的前面,而不指向第一行
注:由于该接口中的常用方法较多,也比较重要具体可参见java API文档
DriverManager类:管理一组 JDBC 驱动程序的基本服务。常用方法有:
getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。 |
Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象。它是PreparedStatement接口的父接口。
四.实例程序
package com.bluemsun.dao;
import com.bluemsun.entity.User;
import java.sql.*;
/**
* Created by mafx on 2018/6/2.
*/
public class userDao {
private final static String DRIVER = "com.mysql.jdbc.Driver";
private final static String URL = "jdbc:mysql://localhost:3306/test1.0";
private final static String USERNAME = "root";
private final static String PASSWORD = "root";
public int insertUser(User user){
String sql="INSERT INTO users (username,pwd,email)VALUES (?,?,?)";
int isSucceed=0;
Connection conn=null;
PreparedStatement ps=null;
try {
conn=getConnection();
ps=conn.prepareStatement(sql);//将SQL语句发送到数据库
ps.setString(1,user.getUsername());
ps.setString(2,user.getPwd());
ps.setString(3,user.getEmail());
isSucceed=ps.executeUpdate();//执行SQL语句,返回影响的行数
}catch (Exception ex){
ex.printStackTrace();
}finally{
try {
conn.close();
ps.close();
}catch (Exception ex){
ex.printStackTrace();
}
}
return isSucceed;
}
public User selectUser(User user){
String sql="SELECT username,pwd,email FROM users WHERE username='"+user.getUsername()+"' and pwd='"+user.getPwd()+"'";
Connection conn;
Statement st=null;
ResultSet rs=null;
conn=getConnection();
User tempUser;
try {
st = conn.createStatement();
rs=st.executeQuery(sql);//执行sql语句,返回查询的结果集
rs.first();//将指真指向表的第一行
tempUser=new User();
tempUser.setUsername(rs.getString(1));
tempUser.setPwd(rs.getString(2));
tempUser.setEmail(rs.getString(3));
}catch (Exception ex){
//ex.printStackTrace();
tempUser=null;
}finally {
try {
rs.close();
st.close();
conn.close();//关闭数据库连接
}catch (Exception ex){
ex.printStackTrace();
}
}
return tempUser;
}
public Connection getConnection(){
Connection conn=null;
try {
Class.forName(DRIVER);//加载驱动
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//获取与数据库的连接
}catch (Exception ex){
ex.printStackTrace();
}
return conn;
}
/**今天的代码***/
public void test(){
String sql="select user_id,username,pwd,email from users";
Connection conn=null;
conn=getConnection();//获取数据库连接
try {
PreparedStatement st = conn.prepareStatement(sql);//向数据库传送SQL语句
ResultSet rs=st.executeQuery();//执行SQL语句
while(rs.next()){//遍历rs中的数据
System.out.print("ID号:"+rs.getInt(1)+//因为id是int类型所以用getInt()
"用户名:" +rs.getString(2)+
"密码:"+rs.getString(3)+
"email:"+rs.getString(4));
System.out.println();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
new userDao().test();
}
}
注意点:
(1)在使用jdbc时一定要记得由里到外关闭资源
(2)使用jdbc时会抛出许多异常记得捕获
(3)jdbc是最基础的数据库连接组件,在以后我们还会讲数据库连接池、dbutils等性能更好,使用更方便的组件。但目前希望大家主要掌握好基础的jdbc.
java API文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
五.训练作业
建立一个数据库实现简单的登录注册,可以用上次的训练代码上进行修改。
推荐阅读