二话不说,直接上代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBC {
public static void main(String[] args) {
//数据库连接
Connection connection = null;
//预编译的Statement,使用预编译的Statement可以提高数据库性能
PreparedStatement preparedStatement =null;
//结果集
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.myqsl.jdbc.Driver");
//通过数据驱动管理类获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8","root","123456");
//定义sql语句?表示占位符
String sql = "select * from user where username = ?";
//获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//设置参数
preparedStatement.setString(1, "小路");
//向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id") + " "+resultSet.getString("username") );
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(resultSet != null){
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(preparedStatement != null){
try {
preparedStatement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
JDBC介绍
JDBC的全称是Java Database Connectivity,即Java数据库连接,它是一种可以执行SQL语句的Java API。与其他数据库编程环境相比,JDBC为数据库开发提供了标准的API,所以使用JDBC开发的数据库应用可以跨平台运行,而且可以跨数据库。通过使用JDBC,就可以使用同一种API访问不同的数据库系统,只需要根据不同的数据库,使用不同的数据库驱动程序就可以了。
PS:Sun公司制定了一组标准的API,它们只是接口,没有提供实现类——这些实现类由各数据库厂商提供实现,这些实现类就是驱动程序。而程序员使用JDBC时只要面向标准的JDBC API编程即可,当需要在数据库之间切换时,只要更换不同的实现类(即更换数据库驱动程序)就行,这就是面向接口编程的典型应用。
SQL语句基础
标准的SQL语句通常可分为如下几种类型。
1)查询语句:主要由select关键字完成。
2)DML(Data Manipulation Language,数据操作语言)语句:主要由insert,update和delete三个关键字完成
3)DDL(Data Definition Language,数据定义语言)语句:主要由create,alter,drop和truncate四个关键字组成。
4)DCL(Data Control Language,数据控制语言)语句:主要由grant和revoke两个关键字完成。
5)事务控制语句:主要由commit,rollback和savepoint三个关键字完成。
SQL语句的关键字不区分大小写。
JDBC常用接口和类介绍
1)DriverManager:用于管理JDBC驱动的服务类。程序中使用该类的主要功能是获取Connection对象,该类包含如下方法:
public static synchronized Connection getConnection(String url,String user,String pass):该方法获得url对应数据库的连接。
2)Connection:代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库,必须先获得数据库连接。该接口的常用方法如下:
Statement createStatement():该方法返回一个Statement对象。
PreparedStatement prepareStatement(String sql) :该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译。
CallableStatement prepareCall(String sql) :该方法返回CallableStatement对象,该对象用于调用存储过程。
上面三个方法都返回用于执行SQL语句的Statement对象,PreparedStatement,CallableStatement是Statement的子类,只有获得了Statement之后才可执行SQL语句。
除此之外,Connection还有如下几个用于控制事务的方法。
(1)Savepoint setSavepoint():创建保存点。
(2)Savepoint setSavepoint(String name):指定名字来创建一个保存点。
(3)void setTransactionIsolation(int level):设置事务的隔离级别。
(4)void rollback():回滚事务。
(5)void rollback(Savepoint savepoint):将事务回滚到指定的保存点。
(6)void setAutoCommit(boolean autoCommit):关闭自动提交,打开事务。
(7)void commit():提交事务。
3)Statement:用于执行SQL语句的工具接口。该对象既可以执行DDL,DCL语句,也可以执行DML语句,还可以执行SQL查询。当执行SQL查询时,返回查询到的结果集。常用方法如下:
(1)ResultSet executeQuery(String sql):该方法用于执行查询语句,并返回查询结果对应的ResultSet对象。该方法只能用于执行查询。
(2)int executeUpdate(String sql):该方法用于执行DML语句,并返回受影响的行数;该方法也可以执行DDL语句,执行DDL语句将返回0。
(3)boolean execute(String sql):该方法可执行任何SQL语句。如果执行后第一个结果为ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结 果,则返回false。
4)PreparedStatement:预编译的Statement对象。preparedStatement是Statement的子接口,它允许数据库预编译SQL语句(这些SQL语句通常带有参数),以后每次只改变SQL命令的参数,避免数据库每次都需要编译SQL语句,因此性能更好。它比Statement多了如下方法:
void setXxx(int paremeterIndex,Xxx value):该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给SQL语句中指定位置的参数。
PS:PreparedStatement同样有executeUpdate(),executeQuery(),execute()三个方法,只是这三个方法无须接收SQL字符串,因为PreparedStatement对象已经预编译了SQL命令,只要为这些命令传入参数即可。
5)ResultSet:结果集对象。该对象包含访问查询结果的方法,ResultSet可以通过列索引或列名获得数据。它包含了如下常用方法来移动记录指针。
(1)void close():释放ResultSet对象。
(2)boolean absolute(int row):将结果集的记录指针移动到第row行,如果row是负数,则移动到倒数第row行。如果移动后的记录指针指向一条有效记录,则返回true。
(3)void beforeFirst():将ResultSet的记录指针定位到首行之前,这是ResultSet结果集记录指针的初始状态——就指针的起始位置位于第一行之前。
(4)boolean first():将ResultSet的记录指针定位到首行。如果移动后的记录指针指向一条有效数据,则该方法返回true。
(5)boolean previous():将ResultSet的记录指针定位到上一行。如果移动后的记录指针指向一条有效数据,则该方法返回true。
(6)boolean next():将ResultSet的记录指针定位到下一行。如果移动后的记录指针指向一条有效数据,则该方法返回true。
(7)boolean last():将ResultSet的记录指针定位到最后一行。如果移动后的记录指针指向一条有效数据,则该方法返回true。
(8)void afterLast():将ResultSet的记录指针定位到最后一行之后。
当把记录指针移动到指定行之后,ResultSet可以通过getXxx(int columnIndex)或getXxx(String columnLable)方法来获取当前行,指定列的值,前者根据列索引获取值,后者根据列名获取值。Java 7 新增了<T>T getObject(int columnIndex ,Class<T>type)和<T>T getObject(String columnLable,Class<T>type)两个泛型方法,它们可以获取任意类型的值。
JDBC编程步骤(首先得添加MySQL的数据库驱动)
1)加载数据库驱动。通常使用Class类的forName()静态方法来加载驱动。
Class.forName(driverClass) ; 如:Class.forName("com.mysql.jdbc.Driver") ;//加载MySQL的驱动
2)通过DriverManager获取数据库连接。
DriverManager.getConnection(String url,String user,String pass);
MySQL数据库的URL写法如下:jdbc:mysql://hostname:port/databasename
3)通过Connection对象创建Statement对象。Connection创建Statement的方法有如下三个:
(1)createStatement():创建基本的Statement对象。
(2)prepareStatement(String sql):根据传入的SQL语句创建预编译的Statement对象。
(3)prepareCall(String sql):根据传入的SQL语句创建CallableStatement对象。
4)使用Statement执行SQL语句。所有的Statement都有如下三个方法来执行SQL语句。
(1)execute();
(2)executeUpdate();
(3)executeQuery();
5)操作结果集。如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。
6)回收数据库资源,包括关闭ResultSet,Statement和Connection等资源。