目录
数据库编程条件
1.编程语言:比如Java,C++等
2.数据库:比如MySQL,Oracle,SQL Server等
3.数据库驱动包:不同语言提供相应的数据库驱动包。
MySQL给Java提供的驱动包是mysql-connector-java
Oracle给Java提供的驱动包是ojdbc
Java的数据库编程——JDBC
JDBC:Java Database Connectivity,Java数据库连接。
它是Java执行SQL语句的API,是Java中数据库连接的规范。
这个API由一些类和接口组成,它是为开发人员操作数据库所提供的,可以为多种关系数据库提供统一访问。
简单理解为有了一个万能翻译,可以把你的话翻译成任何国家的人都可以听懂的话。
JDBC原理
使用JDBC
准备驱动包并添加到项目中
驱动包下载:点击该连接,下载MySQL为Java提供的驱动包Maven Repository: mysql » mysql-connector-java (mvnrepository.com)https://mvnrepository.com/artifact/mysql/mysql-connector-java
下载时需要注意数据库版本要和下载的驱动包版本一致(比如MySQL版本是5.X),那么驱动包的版本也应该是(5.X)。至于是 . 几无所谓。
保留即可。现在已经下载好了驱动包。
找到刚才下载的驱动包,复制一下,粘贴到 lib 这里
一直ok,add即可。
然后一直ok即可,最后是这样就是成功了。
1.创建数据源
——通过DataSourse类创建
——这是为了连接数据库做铺垫
// 1.创建DataSource数据源——描述了数据库在哪
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("数据库密码");
-- 127.0.0.1: 是本机地址(因为我的数据库是在我自己的电脑上)
-- 3306 是数据库端口号
-- test 是数据库名
-- utf8 是数据库的字符集
-- root 一般安装的时候如果不修改,都是root
-- 密码 是进入数据库的密码
2.连接数据库
——通过Connection类来获取物理连接
——也可以不用通过数据源来获取连接,用反射也可以直接获取连接,但不建议使用。
反射连接数据库
// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法
区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false", "用户名", "密码");
通过数据源获取连接
// 2.连接数据库
Connection connection = dataSource.getConnection();
-- 这里的Connection是java.mysql包下面的
-- getConnection()有个受查异常要抛出,我们直接throws交个jvm来处理
3.构造SQL语句
——String+PreparedStatement或Statement 来描述SQL的情况
——通过connection中的prepareStatement()方法直接创建出一个sql对象。
// 3.构造SQL语句
// (一)不需要额外信息的直接写完整的SQL语句即可
// 建表
String sql1 = "create table user (id int, name varchar(20))";
PreparedStatement statement1 = connection.prepareStatement(sql1);
// 查询
String sql4 = "select * from user where id = 1";
PreparedStatement statement4 = connection.prepareStatement(sql4);
// (二)灵活一点还可以从控制台来输入一些信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户编号:");
int id = scanner.nextInt();
System.out.println("请输入用户姓名:");
String name = scanner.next();
// // 1.通过字符串拼接构造成一条完成的SQL语句
// String sql2 = "insert into user values(" + id + ", '" + name + "')";
// PreparedStatement statement2 = connection.prepareStatement(sql2);
//
// //上面的拼接比较丑,不易理解,而且还不安全。
//
// 2.一般通过占位符替换来写,? 的下标从 1 开始计算
String sql3 = "insert into user values(?, ?)";
PreparedStatement statement3 = connection.prepareStatement(sql3);
// 第一个 ? 就是输入的id值
statement3.setInt(1, id);
// 第二个 ? 就是输入的name值
statement3.setString(2, name);
//查看一下刚才的SQL语句
System.out.println("SQL:" + statement3);
4.执行SQL语句
——通过上面connection调用方法创造出来的实例来调用其中的执行sql的方法
——其中查询比较特殊,需要返回执行后的结果集。此时需要用ResultSet这个类创建一个实例来 接受结果集。
// 4.执行SQL语句
// 对于增删改,使用executeUpdate
// 对于查,使用executeQuery
// ret 是影响了多少行数据
// resultSet 是结果集
// 对于 增 操作
int ret1 = statement1.executeUpdate();
System.out.println("ret = " + ret1);
// int ret2 = statement1.executeUpdate();
// System.out.println("ret = " + ret2);
int ret3 = statement3.executeUpdate();
System.out.println("ret = " + ret3);
// 对于 查 操作
ResultSet resultSet = statement4.executeQuery();
// 假设,结果集的下标从 1 开始,那么开始遍历位置则是 0
// 调用了一下next方法后,遍历位置就到了 1 ,依次增加
// 最后到了结尾的时候就返回false
// 想要获取结果集里的结果,用相应的getXX("列名")方法
while (resultSet.next()) {
int x = resultSet.getInt("id");
String y = resultSet.getString("name");
System.out.println(x + ":" + y);
}
5.释放资源
// 5.释放资源
result.close();
statement1.close();
// statement2.close();
statement3.close();
statement4.close();
connection.close();
上述操作结果如下:
有什么问题评论区指出,希望可以帮到你。