大家都知道JDBC是面向关系型数据库的,全称Java Database Connectivity。可是Java怎么能使用JDBC呢,小编也很好奇,但事实就是这样,大家有什么想法在留言区评论吧!(狗头保命)????
创建数据库
首先使用Navicat Premium 15 创建一个表,先存进去一点数据方便一会调用。
运行两个查询语句
insert into user_info (id,name) VALUES ('123','陈泽曈')
insert into user_info (id,name) VALUES ('456','老高')
可以看到已经添加进来了。
添加依赖
添加mysql-connector-java-5.1.44-bin.jar包
选择添加到lib文件夹下
可以去 文件–项目结构中选择添加依赖
也可以右键添加为库
连接数据库
使用JDBC应用程序向表中查询数据记录需要以下步骤:
- 导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 - 注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
- 打开连接:需要使用
DriverManager.getConnection()
方法来创建一个Connection
对象,它表示与数据库服务器的物理连接。 - 执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句,以在选择的数据库的表中查询数据记录。 - 提取数据:执行SQL查询后,可以从表中获取记录。
- 释放资源:关闭Statement和connection
数据库的查询
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/test";
Connection connection= DriverManager.getConnection(url,"root","1qazxsw2");
System.out.println("连接成功!");
Statement search=connection.createStatement();
String sql="SELECT * FROM user_info";
ResultSet rs = search.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意导入sql包,这里捕获异常直接用通用的Exception,不然要使用两个try/catch捕获异常。一个为forName,一个为getConnection抛出。
- Statement 用于执行静态SQL语句并返回其生成的结果的对象
- ResultSet 对象保持一个光标指向其当前的数据行
输出为:
数据库的修改
几个操作语法很相似,就直接给出例子了。
executeUpdate:执行给定的SQL语句,这可能是INSERT , UPDATE ,或DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。
删除数据
先插入一个id=0的数据
int result = search.executeUpdate("delete from user_info where id=0");
if(result >0){
System.out.println("ok");
}
使用这句话删除id为0的数据行
出现了OK,数据库中也删除成功。
添加数据
int result1 = search.executeUpdate("insert into user_info (id,name)values('789','hello')");
if (result1 > 0) {
System.out.println("添加成功");
}
执行结果
更新数据
这次把数据库连接语句做了封装,写进了一个类。使用时传递语句就好。
JDBC类
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBC {
boolean UpdateSql(String sql){
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test";
Connection connection = DriverManager.getConnection(url, "root", "1qazxsw2");
Statement exe=connection.createStatement();
int result=exe.executeUpdate(sql);
return result>0;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
释放资源
使用完Statement和connection后,要进行资源的释放,那么问题来了,应该怎样设置释放的逻辑呢。
如果将close添加到这里,当sql语句出错时,会跳转到catch语句,无法释放。所以要添加到finally里。
当exe或者connection中为null时,不用关闭,因为本来就没有创建成功,当为null时关闭。注意不能写到一个if中一起关闭,因为有可能statement创建失败,而在一个if中时则无法关闭connection。
注:查询也可以封装到方法里
boolean SelectSql(String sql){
Connection connection=null;
Statement search=null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test";
connection = DriverManager.getConnection(url, "root", "1qazxsw2");
search=connection.createStatement();
rs = search.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
System.out.println(rs.getString("name"));
}
} catch (Exception throwables) {
throwables.printStackTrace();
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(search!=null){
try {
search.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}