JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API
为什么要用JDBC
- 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】
- sun公司只是提供了JDBC API【接口】,数据库厂商负责实现。
- 对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序即可
- 大大简化了我们的学习成本
操作JDBC四个步骤
1.在pom.xml文件里添加依赖(Maven项目才可以用,体现maven好处)
<!-- MySql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
2.建立数据库连接
3.执行SQL语句
4.处理数据库返回结果集
5.关闭数据库连接
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
/*
* 加载驱动有两种方式
*
* 1:会导致驱动会注册两次,过度依赖于mysql的api,脱离的mysql的开发包,程序则无法编译
* 2:驱动只会加载一次,不需要依赖具体的驱动,灵活性高
*
* 我们一般都是使用第二种方式
* */
//1.
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.
Class.forName("com.mysql.jdbc.Driver").newInstance();//注册数据库
//获取与数据库连接的对象-Connetcion
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");
//获取执行sql语句的statement对象
statement = connection.createStatement();
//执行sql语句,拿到结果集
resultSet = statement.executeQuery("SELECT * FROM users");
//遍历结果集,得到数据
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
System.out.println(resultSet.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
/*
* 关闭资源,后调用的先关闭
*
* 关闭之前,要判断对象是否存在
* */
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
将JDBC操作写成一个DAO类
public class UserDAO {
public static final String DRIVER = "org.gjt.mm.mysql.Driver";//驱动
public static final String DBURL = "jdbc:mysql://localhost:3306/testdb";//连接字符串
public static final String DBUSER = "root";//用户名
public static final String DBPASS = "123456";//密码
// 三个对象
private Connection conn = null;
private PreparedStatement pStat = null;//PreparedStatement可实现带参数的动态查询
private ResultSet rs = null;//结果集
public Connection getConnectionn() {
// 获得数据库连接
try {
Class.forName(DRIVER).newInstance();//加载mysql驱动
return DriverManager.getConnection(DBURL, DBUSER, DBPASS);//建立数据库连接
} catch (Exception e) {
return null;
}
}
// 关闭数据库连接
public void close(){
try{
if( rs!=null ) rs.close();
if( pStat!=null ) pStat.close();
if( conn!=null ) conn.close();
}catch(Exception e){
e.printStackTrace();
}
} // end close
//
public boolean isUsernameExists(String username) {
//判断用户名是否存在
conn=getConnectionn();
try {
pStat =conn.prepareStatement("select * from users where username=?");
pStat.setString(1, username);//参数1代表第一个‘?’
rs=pStat.executeQuery();
if( rs.next() )
return true;
else
return false;
}catch (Exception e) {
return false;
}
finally{
close();
}
}
}