JAVA12_05学习总结(JDBC!)
admin
2024-03-21 03:51:09
0

今日内容

1. JDBC操作

JDBC操作DDL语句1)导包/创建驱动2)准备sql语句3)获取连接对象4)获取执行对象5)执行sql语句6)释放资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
​
//创建学生表,id,姓名,年龄,性别,住址
public class jdbcTest {public static void main(String[] args) throws Exception {//导包/创建驱动Class.forName("com.mysql.jdbc.Driver");//获取链接数据库对象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/szr","root","123456");//准备sql语句,注意拼接String sql = "create table student(" +"id int primary key auto_increment,"+"name varchar(10),"+"age int,"+"gender varchar(3),"+"address varchar(20)"+") ;";//获取执行对象 -- 获取要执行的数据库对象Statement stat = conn.createStatement();//执行sql语句stat.executeUpdate(sql); // 创建,删除,添加为Update -- 查询为Query//释放资源stat.close();conn.close();}
}

2.优化JDBC代码

优化代码每次进行操作时都要连接数据库,重复书写七大步骤七大步骤中除了准备sql语句之外基本都一样,过于冗余,所以优化代码结构!-注册驱动的路径固定-连接数据库的路径,用户,密码在个人使用时不变所以将这些都写入配置文件!直接从配置文件调用,不同的数据库直接更改配置文件即可,不用更改代码结构!--符合开闭原则!优化将重复步骤单独写入方法中,需要的时候直接调用,避免重复书写!将需要的内容写入配置文件,直接读取配置文件,不用破坏代码结构!
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
​
//将对于步骤写入对应的工具类,直接调用方法
public class JdbcUtils {//将需要从配置文件获取的值先声明出来private static String driverclass = null ;//创建驱动:com.mysql.jdbc.Driverprivate static String url = null ;//获取数据库链接对象路径:jdbc:mysql://localhost:3306/数据库名private static String user = null ;//用户名private static String password = null ;//密码//创建静态代码块,当前类初始化的时候就读取配置文件,获取内容,创建驱动!static {//读取配置文件--利用输入流读取配置文件InputStream input = JdbcUtils.class.getClassLoader() //通过class字节码文件获取类加载器.getResourceAsStream("jdbc.properties");//通过properties方法通过键获取值Properties prop = new Properties();try {prop.load(input); //加载InputStream输入对象} catch (IOException e) {e.printStackTrace();}driverclass = prop.getProperty("driverclass");//获取之后赋给对应的内容url = prop.getProperty("url");user = prop.getProperty("user");password = prop.getProperty("password");//创建驱动try {Class.forName(driverclass);} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取数据库链接对象public static Connection getConnection() throws SQLException {Connection conn = DriverManager.getConnection(url,user,password);//参数值从上面获取return conn;//返回获取的数据库连接对象}//释放资源 -- 不需要返回值的添加,删除,修改public static void close(Statement stat , Connection conn){try {stat.close();conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}//书写方式二//close(stat,conn); //调用下面的方法,传值的时候ResultSet传空值!}public static void close(ResultSet result , Statement stat, Connection conn){try {result.close();stat.close();conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}
}
​
​
​
import java.sql.*;
​
//测试
public class JdbcUtilsTest {public static void main(String[] args) throws SQLException {//删除,添加,修改---修改//连接数据库,获取对象--直接调用方法Connection conn = JdbcUtils.getConnection();//省去前面的步骤,直接调用//准备sql语句--不添加id,id自增长!String sql = "insert into student(name,age,gender,address) values" +"('钟离','30','男','往生堂') , " +"('胡桃','18','女','往生堂') , " +"('申鹤','25','女','璃月') , " +"('优菈','19','女','蒙德') "+";"; //注意拼接!!!//获取执行对象Statement stat = conn.createStatement();stat.executeUpdate(sql);//释放资源--调用方法JdbcUtils.close(stat,conn);
​//查询//连接数据库,获取对象Connection conn1 = JdbcUtils.getConnection();//准备sql语句String sql1 = "select * from student ;";//获取执行对象Statement stat1 = conn1.createStatement();ResultSet result = stat1.executeQuery(sql1);//查询返回结果集,有返回值//查询成功--后面说怎么遍历值System.out.println(result);//com.mysql.jdbc.JDBC4ResultSet@46fbb2c1}
}

3. JDBC查询遍历

JDBC查询遍历当查询返回到结果集之后ResultSet中有方法判断boolean next()--判断结果集中是否有下一条数据获取getInt(int index)--获取输入角标值列的内容getString(String str)--获取输入列名称的内容
import JDBC.JDBCTest_02.JdbcUtils;
​
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
​
public class JDBCTest {public static void main(String[] args) throws SQLException {//获取数据库连接对象Connection conn = JdbcUtils.getConnection();//准备sql语句String sql = "select * from student ;";//获取执行对象Statement stat = conn.createStatement();//执行语句并返回结果集ResultSet result = stat.executeQuery(sql);//while循环while (result.next()){ //next()为判断条件//获取输入角标值的内容int id = result.getInt(1);String name = result.getString(2);int age = result.getInt(3);String gender = result.getString(4);String address = result.getString("address");System.out.println(id+" "+name+" "+age+" "+gender+" "+address);/*1 钟离 30 男 往生堂2 胡桃 18 女 往生堂3 申鹤 25 女 璃月4 优菈 19 女 蒙德*/}}
}

4.单元测试

单元测试main方法是全局测试,只要有一个地方不对,都运行不了所以单元测试,只测试我们想要测试的地方!1)导包junit的核心包以及依赖包2)提供单元测试方法定义一个功能,没有返回值,没有参数,在方法上定义@Test标记,它是一个单元测试方法3)@Before标记的方法是在单元测试方法之前先执行比如说初始化的操作4)@After标记的方法是在用单元测试执行之后执行比如说释放资源

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...