首页 > 数据库 >实验三 嵌入式SQL与数据库连接

实验三 嵌入式SQL与数据库连接

时间:2023-06-17 18:16:03浏览次数:50  
标签:String getString rs 数据库 System 嵌入式 SQL print out

一、数据库连接技术简介

本实验在Java程序中采用JDBC连接openGauss。
Java数据库连接是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。我们通常说的JDBC是面向关系型数据库的。
JDBC有五种连接方式,分别是直接实例化Driver,反射实现Driver类,使用DriverManager替换Driver接口,利用mysql的driver实现类自动进行了注册驱动,直接调用DriverManager的静态方法连接,将连接的四个基本信息声明在配置文件中,读取配置文件进行连接jdbc.properties。
本次实验采用了第三种:使用DriverManager替换Driver接口。

二、数据库连接环境配置

本地跑有openEuler虚拟机上面装的openGauss数据库
java用的eclipse

1.配置环境

首先加载jdbc驱动从网上下(叫openGauss-1.1.0-JDBC.tar)下下来解压,在eclipse里新建一个项目,创建一个lib文件夹,把刚刚解压的文件复制到lib文件夹下,然后右击项目名,依次点击 Build Path > Configure Build Path…

选中 Libraries,点击右边的按钮 add JARs…

选中复制到项目中的jar包

最后点击 Apply and Close 即可

2.连接数据库

配置代码如下:其中IP地址、用户名、密码需根据自己要求修改

IP地址ifconfig命令查看

三、对增删查改操作的实现

查询部门表

package OpenGauss;
import java.sql.*;

public class ConnectOpenGauss {
 
    static final String JDBC_DRIVER = "org.postgresql.Driver";  
    static final String DB_URL = "jdbc:postgresql://192.168.56.104:26000/postgres?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
 
 
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "dj";
    static final String PASS = "A2285634363dj";
 
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);
        
            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        
            // 执行查询
            System.out.println(" 实例化Staff对象...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT *  FROM public.staff ;";
            ResultSet rs = stmt.executeQuery(sql);
        
            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String sno = rs.getString("sno");
                String dno = rs.getString("dno");
                String sname = rs.getString("sname");
                String ssex = rs.getString("ssex");
                String sbirth = rs.getString("sbirth");
                String skey = rs.getString("skey");
                // 输出数据
                System.out.print("职工号: " + sno);
                System.out.print(", 部门号: " + dno);
                System.out.print(", 姓名: " + sname);
                System.out.print(", 性别: " + ssex);
                System.out.print(", 生日: " + sbirth);
                System.out.print(", 口令: " + skey);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

查询部门号为‘0001’的员工

try{
 // 注册 JDBC 驱动
 Class.forName(JDBC_DRIVER);       
 // 打开链接
 System.out.println("连接数据库...");
 conn = DriverManager.getConnection(DB_URL,USER,PASS);     
 // 执行查询
 System.out.println(" 实例化Staff对象...");
 stmt = conn.createStatement();
 String sql;
 sql = "SELECT *  FROM public.staff WHERE dno='0001';";
 ResultSet rs = stmt.executeQuery(sql);
 // 展开结果集数据库
 while(rs.next()){
  // 通过字段检索
  String sno = rs.getString("sno");
  String dno = rs.getString("dno");
  String sname = rs.getString("sname");
  String ssex = rs.getString("ssex");
  String sbirth = rs.getString("sbirth");
  String skey = rs.getString("skey");
  // 输出数据
  System.out.print("职工号: " + sno);
  System.out.print(", 部门号: " + dno);
  System.out.print(", 姓名: " + sname);
  System.out.print(", 性别: " + ssex);
  System.out.print(", 生日: " + sbirth);
  System.out.print(", 口令: " + skey);
  System.out.print("\n");
 }
  // 完成后关闭
  rs.close();
  stmt.close();
  conn.close();
}

查询工资为index的员工(index可自己输入)

// 执行查询
 System.out.println(" 实例化Staff对象...");
 stmt = conn.createStatement();
 String sql;
 Scanner scanner = new Scanner(System.in);
 System.out.print("请输入一个数:");
 String index = scanner.nextLine();
 sql = " select * from public.gongzi where gongzi = '"+index+"';";
 ResultSet rs = stmt.executeQuery(sql);
 // 展开结果集数据库
 while(rs.next()){
 // 通过字段检索
 String sno = rs.getString("sno");
 String zno = rs.getString("zno");
 String sname = rs.getString("sname");
 String gongzi = rs.getString("gongzi");
 String beizhu = rs.getString("beizhu");
 // 输出数据
 System.out.print("职工号: " + sno);
 System.out.print(", 编号: " + zno);
 System.out.print(", 姓名: " + sname);
 System.out.print(", 工资: " + gongzi);
 System.out.print(", 备注: " + beizhu);
 System.out.print("\n");
}

增加sno没有匹配值的员工工资信息

System.out.println(" 实例化Staff对象...");
stmt = conn.createStatement();
String sql;
sql = "INSERT INTO public.gongzi VALUES('11','0000','明浩杨','8000',NULL)";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
 // 通过字段检索
 String sno = rs.getString("sno");
 String zno = rs.getString("zno");
 String sname = rs.getString("sname");
 String gongzi = rs.getString("gongzi");
 String beizhu = rs.getString("beizhu");
 // 输出数据
 System.out.print("职工号: " + sno);
 System.out.print(", 编号: " + zno);
 System.out.print(", 姓名: " + sname);
 System.out.print(", 工资: " + gongzi);
 System.out.print(", 备注: " + beizhu);
 System.out.print("\n");
 }
  • 显示外码错误

增加阮贝行的工资信息

System.out.println(" 实例化Staff对象...");
stmt = conn.createStatement();
String sql;
sql = "INSERT INTO public.gongzi VALUES('10','1005','阮贝行','8000',NULL)";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
 // 通过字段检索
 String sno = rs.getString("sno");
 String zno = rs.getString("zno");
 String sname = rs.getString("sname");
 String gongzi = rs.getString("gongzi");
 String beizhu = rs.getString("beizhu");
 // 输出数据
 System.out.print("职工号: " + sno);
 System.out.print(", 编号: " + zno);
 System.out.print(", 姓名: " + sname);
 System.out.print(", 工资: " + gongzi);
 System.out.print(", 备注: " + beizhu);
 System.out.print("\n");
 }


修改阮贝行的工资信息

System.out.println(" 实例化Staff对象...");
stmt = conn.createStatement();
String sql;
sql = "UPDATE public.gongzi SET beizhu='已发' WHERE sname='阮贝行'";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
 // 通过字段检索
 String sno = rs.getString("sno");
 String zno = rs.getString("zno");
 String sname = rs.getString("sname");
 String gongzi = rs.getString("gongzi");
 String beizhu = rs.getString("beizhu");
 // 输出数据
 System.out.print("职工号: " + sno);
 System.out.print(", 编号: " + zno);
 System.out.print(", 姓名: " + sname);
 System.out.print(", 工资: " + gongzi);
 System.out.print(", 备注: " + beizhu);
 System.out.print("\n");
 }


删除工资表中所有信息

System.out.println(" 实例化Staff对象...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM public.gongzi";
ResultSet rs = stmt.executeQuery(sql);


存储过程


四、问题分析

  • 问题1:
    因为实验中对应的用户有多个模式,所以在进行操作时需要写明是哪个模式中的表,如'public.gongzi'

  • 问题2:
    在本次实验中,使用的是eclipse,会有中文编程乱码的问题
    可以参考https://blog.csdn.net/sob_sob/article/details/120893031中的方法
    但是可能会导致原来没有乱码的项目出现乱码的情况

五、实验感想

本次实验不算困难,跟着实验指导书,可以轻易完成连接数据库,而且课上对java查询数据库内容的语句也是蛮清晰的,可以通过使用java调用SQL语句来完成增删查改等内容。
原来是想做一个可视化界面的,但是我java水平有限,只会做出来一个界面(如下图),但是其中按钮的跳转啥的并不会,最后只完成了一个类似于命令行式的形式。但总的来说,在本次实验中收获到了很多,也发现了自身对java并不是很熟悉,之后也会加强对java的学习与使用。

标签:String,getString,rs,数据库,System,嵌入式,SQL,print,out
From: https://www.cnblogs.com/daijun123/p/17487686.html

相关文章

  • Calcite sql2rel 过程
    sql2rel的过程是将SqlNode转化成RelNode的过程在SqlToRelConverterTest中添加样例测试@TestvoidtestScan(){Stringsql="SELECT*FROMEMPWHEREempno<10";sql(sql).ok();}会生成如下的relnodetree.LogicalProject(EMPNO=[$0],ENAME=[$1],JOB=[......
  • MySQL错误类型1030
     该错误类型一般为磁盘内存空间不足。常规情况下清除备份文件即可。引用:mysql出现1030Goterror28fromstorageengine解决方法_风火程序员的博客-CSDN博客......
  • Mysql 触发器smysql
    触发器1.创建--trigger_name:触发器的名称--BEFORE或AFTER用于指定触发时机--INSERT、UPDATE、DELETE用于指定触发事件--table_name为触发器所关联的表名--FOREACHROW表示针对每一行数据的变化而触发--trigger_body为触发器的执行语句CREATETRIGGERtrigg......
  • mysql四舍五入函数取两位小数
    MySQL四舍五入函数ROUND(x)ROUND(x)函数返回最接近于参数x的整数,对x值进行四舍五入。实例:使用ROUND(x)函数对操作数进行四舍五入操作。SQL语句如下:mysql>SELECTROUND(-2.34),ROUND(-4.56),ROUND(2.34),ROUND(4.56);ROUND(x)函数的执行结果如下图所示:上图中代码执行的结果显示,进行......
  • macOS 安装 postgreSQL
    PostgreSQLDocumentationbrewinstallpostgresqlbrewservicesstartpostgresqlcreatedb#Bydefault,adatabasewiththesamenameasthecurrentuseriscreated.#dropdbpsql......
  • MySQL高可用MHA原理及测试
     2020年03月22日00:06 ·  阅读5810MySQL高可用MHA原理及测试文章来源: 陶老师运维笔记-微信公众号1.MHA简介  MHA架构介绍:github.com/yoshinorim/…github下载地址:github.com/yoshinorim/…MHA简介:MHA(MasterHighAvailability)目前在MySQL......
  • mysql45讲
    mysql执行顺序解析器解析sql提示语法错误优化器优化查询索引使用执行顺序执行器操作引擎,返回结果日志模块binlog所有引擎都可使用追加写入,不会覆盖Binlog有两种模式,statement格式的话是记sql语句,row格式会记录行的内容,记两条,更新前和更新后都有redolog......
  • SQL语句_基本语句
    为了更好的学习SQL语句,我们先来设定几张表格:Store_Info表:store_namesalesDateA50001-01-2000B20002-01-2000A150002-10-2000D100003-08-2000Country_Info表:English_nameChina_nameAmercia美国China中国Japan日本A......
  • mysql常用语
    给某个字段添加另一个字段的值UPDATEproduct_noticeSETtitle=CONCAT(product_name)where(ISNULL(title)=1orLENGTH(trim(title))=0); 如果需要赋值拼接使用空格进行分隔UPDATEproduct_noticeSETtitle=CONCAT(product_name,'',content)where(ISNULL(title)=1......
  • 系统架构设计师笔记第17期: 关系数据库
    数据库的分类可以根据不同的标准进行划分:根据数据结构分类:1.1关系数据库(RelationalDatabase):关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据,以表格形式存储数据,并支持事务处理、多用户访问、数据安全性和完整性控制等功能。1.2非关系型数据......