当前位置:   article > 正文

javaSE基础:JDBC编写基础

javaSE基础:JDBC编写基础

目录

1、JDBC基础编写

2、编写工具类


1、JDBC基础编写

  1. /* 使用图形化工具操作数据库:步骤:1、连接数据库
  2. 1.1、启动mysql:
  3. 管理员身份运行cmd:net startstop】 mysql 密码:123123
  4. 1.2、图形化界面连接数据库
  5. JDBC:Java DataBase Connectivity java语言操作数据库
  6. JDBC本质:官方(sun公司)定义的操作所有的关系型数据库的规则(接口);各个数据库厂商去实现这套接口,提供数据库驱动jar包。
  7. 我们可以使用这套接口编程,真正执行代码的是驱动jar包中的实现类
  8. 快速入门:【注意:mysql8驱动版本必须设置时区和设置驱动为com.mysql.cj.jdbc.Driver】
  9. 步骤:1、导入驱动jar包
  10. 1.1、赋值jar包到项目的libs目录下
  11. 1.2Add As Library
  12. 2、注册驱动
  13. 3、获取连接对象,Connection
  14. String url="jdbc:mysql://localhost:3306/数据库名" +
  15. "?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT";//设置编码方式为UTF-8 设置数据库时间标准为东八区
  16. Unicode;Encode:编码 timezone:时区 userssl:关闭证书验证【下有补充】
  17. 4、定义sql语句
  18. 5、获取执行对象,Statement
  19. 6、执行sql,接受返回结果
  20. 7、处理结果
  21. 8、释放资源
  22. */
  23. /*详解创建的各个对象:
  24. 1*、DriverManager接口:驱动管理对象
  25. 功能:1、注册驱动 【.5之后的驱动jar包可以省略】
  26. static void registerDriver(Driver driver) 向DriverManager 注册给定驱动程序。
  27. 写代码的话用 例子:Class.forName("com.mysql.cj.jdbc.Driver");
  28. 通过查看源码发现:在com.mysql.cj.jdbc.Driver类中存在静态代码块
  29. static {
  30. try {
  31. DriverManager.registerDriver(new Driver());
  32. } catch (SQLException var1) {
  33. throw new RuntimeException("Can't register driver!");
  34. }
  35. }
  36. 2、获取数据库连接
  37. static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
  38. 参数:url:指定连接的路径,
  39. 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 //.5jar版本
  40. 例子:"jdbc:mysql://localhost:3306/db1"
  41. 细节:如果连接的是本机的mysql服务器,并且mysql服务默认为3306;则url可以写为:jdbc:mysql://数据库名称
  42. user:用户名,
  43. passwd:密码
  44. 2*、Connection接口:数据库连接对象
  45. 功能:1、获取执行sql的对象
  46. Statement createStatement()
  47. PreparedStatement prepareStatement(String sql)
  48. 2、管理事务
  49. 开启事务
  50. void setAutoCommit(boolean autoCommit) 调用该方法设置参数为false,即开启事务
  51. 提交事务
  52. void commit()
  53. 回滚事务
  54. void rollback()
  55. 3*、Statement:执行sql的对象 java.sql
  56. 功能:1、执行sql
  57. boolean execute(String sql) 可以执行任意sql【了解】
  58. int executeUpdate(String sql 执行DML语句【返回影响行数】、DDL语句【返回0
  59. 返回值:数据库中影响的行数 返回值>0 执行成功
  60. ResultSet executeQuery(String sql) 执行DDL语句
  61. 4*、ResultSet:结果集对象
  62. 功能:封装查询结果
  63. boolean next():游标向下移动一行;判断当前行是否是最后一行末尾【是否有数据;true--有数据】
  64. xxx getXxx(参数):获取数据 其中,Xxx是数据类型
  65. 参数:1、int:代表列的编号,从1开始
  66. 2String:代表列的名称
  67. 注意:使用步骤:
  68. 1、游标向下移动一行
  69. 2、判断是否有数据
  70. 3、获取数据
  71. 5*、PreparedStatement:执行动态sql的对象 Statement的子类
  72. 补充:
  73. SSL协议提供服务主要:
  74. 1)认证用户服务器,确保数据发送到正确的服务器;    .
  75. 2)加密数据,防止数据传输途中被窃取使用;
  76. 3)维护数据完整性,验证数据在传输过程中是否丢失;
  77. 当前支持SSL协议两层:
  78. SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持
  79. SSL握手协议(SSL Handshake Protocol):建立SSL记录协议用于实际数据传输始前通讯双进行身份认证、协商加密算法、 交换加密密钥等。
  80. */
  1. /*PreparedStatement和Statement:
  2. 关系:PreparedStatement继承自Statement,都是接口
  3. 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高???
  4. 详解:
  5. 1、PreparedStatement:表示预编译的 SQL 语句的对象。
  6. 接口:public interface PreparedStatement extends Statement之间的继承关系
  7. SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
  8. 注:用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法,问号的位置也是应该注意的,因为第一个问好的位置为1,第二个问号的位置为2.以此类推。
  9. 如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数。
  10. 在以下设置参数的示例中,con 表示一个活动连接:
  11. PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SALARY = ? WHERE ID = ?");
  12. pstmt.setBigDecimal(1, 1533.00)
  13. pstmt.setInt(2, 1102)
  14. pstmt.execute()//注意提交时这里不能再有sql语句,不同于Statment */
  15. //使用PrepareStatement
  16. import java.sql.Connection;
  17. import java.sql.DriverManager;
  18. import java.sql.PreparedStatement;
  19. import java.sql.SQLException;
  20. import java.sql.Statement;
  21. public class PreparedStatementTest {
  22. public static void main(String[] args) {
  23. test_autoCommit();
  24. }
  25. public static void test_autoCommit()
  26. {
  27. String driver="oracle.jdbc.driver.OracleDriver";
  28. String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
  29. String user="admin";
  30. String password="admin";
  31. Connection conn=null;
  32. PreparedStatement ps=null;
  33. try {
  34. //1、注册驱动
  35. Class.forName(driver);
  36. //2、获取连接
  37. conn= DriverManager.getConnection(url, user, password);
  38. //System.out.println(conn);
  39. //3、创建prepareStatement对象
  40. String sql="insert into lover values(?,?,?)";
  41. ps=conn.prepareStatement(sql);
  42. //4、执行sql语句
  43. ps.setInt(1,21);//代表设置给第一个?号位置的值为Int类型的21
  44. ps.setString(2,"suwu150");//代表设置给第二个?号位置的值为String类型的suwu150
  45. java.util.Date utilDate=new java.util.Date();//进行类型转换,由util类型的date转化为sql类型的
  46. ps.setDate(3, new java.sql.Date(utilDate.getTime()));
  47. //ps.execute();//执行
  48. System.out.println(ps.execute());//执行表输出返回的结果,结果为false,因为没有返回的结果集
  49. //5、处理结果集
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. finally{
  54. //6、关闭资源
  55. try {
  56. if(ps!=null)ps.close();
  57. } catch (SQLException e) {
  58. e.printStackTrace();
  59. }
  60. try {
  61. if(conn!=null)conn.close();
  62. } catch (SQLException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. }
  67. }

 

  1. //使用Statement
  2. public class Jdbc05 {
  3. public static void main(String[] args) {
  4. Connection conn=null;
  5. Statement stmt=null;
  6. ResultSet rs=null;
  7. try {//1
  8. Class.forName("com.mysql.cj.jdbc.Driver");
  9. //2 、获取连接对象
  10. String url="jdbc:mysql://localhost:3306/db1"+
  11. "?useUniocde=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT";
  12. conn = DriverManager.getConnection(url, "root", "123123");
  13. //3 定义sql
  14. String sql="select * from student";
  15. //4 获取执行sql对象
  16. stmt = conn.createStatement();
  17. //5 执行sql 创建结果集对象
  18. rs = stmt.executeQuery(sql);
  19. int count=rs.getMetaData().getColumnCount();//通过结果集元数据,得到列数
  20. //6 处理结果
  21. //6.1 让游标向下移动一行
  22. while(rs.next()){//循环判断游标是否是最后一行末尾 //和迭代器相似
  23. //6.2 获取数据
  24. for (int i = 1; i <= count; i++) {//光标从1开始
  25. System.out.print(rs.getString(i));
  26. if(i<count) System.out.print(",");
  27. }
  28. System.out.println();
  29. }
  30. //7 释放资源
  31. } catch (ClassNotFoundException | SQLException e) {
  32. e.printStackTrace();
  33. }finally{
  34. if(rs!=null){
  35. try {
  36. stmt.close();
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. if(stmt!=null){
  42. try {
  43. stmt.close();
  44. } catch (SQLException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. if(conn!=null){
  49. try {
  50. conn.close();
  51. } catch (SQLException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }
  56. }
  57. }

2、编写工具类

1、编写jdbc.properties文件

  1. //jdbc.properties
  2. url=jdbc:mysql://localhost:3306/db1?useDemode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT
  3. user=root
  4. password=123123
  5. driver=com.mysql.cj.jdbc.Driver

2、编写工具类

  1. /*
  2. *获取连接需求:不想传递参数(麻烦),还要保证工具类的通用性。
  3. * 解决方案:配置文件
  4. * jdbc.properties
  5. * url=
  6. * user=
  7. * password=
  8. * 文件的读取只需读取一次。使用静态代码块完成
  9. * */
  10. public class JDBCUtils {
  11. private static String url;//静态变量才能被静态代码块和静态方法访问
  12. private static String user;
  13. private static String password;
  14. private static String driver;
  15. static{
  16. //读取配置文件,获取值
  17. //1 Properties集合类
  18. Properties pro=new Properties();
  19. try {
  20. /* 2 加载文件 */
  21. //获取配置文件路径的方式 ClassLoader 类加载器
  22. ClassLoader classLoader = JDBCUtils.class.getClassLoader();
  23. URL res = classLoader.getResource("jdbc.properties");//获取统一资源定位符 定位文件路径
  24. String path = res.getPath();//获取字符串路径
  25. System.out.println(path);///E:/IdeaProjects/java_lianxi/out/production/java_lianxi/jdbc.properties
  26. // pro.load(new FileReader("src/jdbc.properties"));
  27. pro.load(new FileReader(path));
  28. //3 获取属性
  29. url=pro.getProperty("url");
  30. System.out.println(url);
  31. user=pro.getProperty("user");
  32. password=pro.getProperty("password");
  33. driver=pro.getProperty("driver");
  34. //4 注册驱动
  35. Class.forName(driver);
  36. } catch (IOException | ClassNotFoundException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. //获取连接方法
  41. public static Connection getConnection() throws SQLException {
  42. return DriverManager.getConnection(url,user,password);
  43. }
  44. //释放资源方法
  45. public static void close(Statement stmt, Connection conn){
  46. if(stmt!=null){
  47. try {
  48. stmt.close();
  49. } catch (SQLException throwables) {
  50. throwables.printStackTrace();
  51. }
  52. }
  53. if(conn!=null){
  54. try {
  55. conn.close();
  56. } catch (SQLException throwables) {
  57. throwables.printStackTrace();
  58. }
  59. }
  60. }
  61. //释放资源重载方法
  62. public static void close(ResultSet rs,Statement stmt, Connection conn){
  63. if(rs!=null){
  64. try {
  65. rs.close();
  66. } catch (SQLException throwables) {
  67. throwables.printStackTrace();
  68. }
  69. }
  70. if(stmt!=null){
  71. try {
  72. stmt.close();
  73. } catch (SQLException throwables) {
  74. throwables.printStackTrace();
  75. }
  76. }
  77. if(conn!=null){
  78. try {
  79. conn.close();
  80. } catch (SQLException throwables) {
  81. throwables.printStackTrace();
  82. }
  83. }
  84. }
  85. }

3、编写封装数据的Javabean

  1. //(id,name,age,sex,address,math,english)
  2. //对应封装student表数据的JavaBean
  3. public class Stu {
  4. private int id;
  5. private String name;
  6. private int age;
  7. private String sex;
  8. private String address;
  9. private int math;
  10. private int english;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public int getAge() {
  24. return age;
  25. }
  26. public void setAge(int age) {
  27. this.age = age;
  28. }
  29. public String getSex() {
  30. return sex;
  31. }
  32. public void setSex(String sex) {
  33. this.sex = sex;
  34. }
  35. public String getAddress() {
  36. return address;
  37. }
  38. public void setAddress(String address) {
  39. this.address = address;
  40. }
  41. public int getMath() {
  42. return math;
  43. }
  44. public void setMath(int math) {
  45. this.math = math;
  46. }
  47. public int getEnglish() {
  48. return english;
  49. }
  50. public void setEnglish(int english) {
  51. this.english = english;
  52. }
  53. @Override
  54. public String toString() {
  55. return "Stu{" +
  56. "id=" + id +
  57. ", name='" + name + '\'' +
  58. ", age=" + age +
  59. ", sex='" + sex + '\'' +
  60. ", address='" + address + '\'' +
  61. ", math=" + math +
  62. ", english=" + english +
  63. '}';
  64. }
  65. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/805047
推荐阅读
相关标签
  

闽ICP备14008679号