草庐IT

Java编程 JDBC连接Oracle数据库

嘎嘎不是鸭 2023-04-11 原文
  • Part1 JDBC

        JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问oracle数据库又专门写一个程序。使开发人员能够更便捷的编写数据库应用程序。

  • Part2 JDBC连接数据库

         使用JDBC连接数据库简而言之包含了以下四个部分:加载驱动、连接数据库、创建statement对象、执行SQL命令。

1、加载驱动 

        JDBC在连接数据库前需要先加载驱动,通过java.lang.Class类的forName()实现驱动的加载。

Class.forName("oracle.jdbc.driver.OracleDriver");

2、连接数据库

        通过java.sql.DriverManager中的getConnection()方法获取一个Connection对象,即为创建一个数据库连接。

Connection conn = DriverManager.getConnection(url,username,passwd);
//url示例
jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc:使用jdbc连接协议
oracle:使用oracle数据库
thin:oracle数据库连接模式,thin模式不需要安装客户端,oci模式需要安装客户端
@127.0.0.1:数据库地址
1521:数据库端口
orcl:数据库实例名

3、创建Statement对象

        在执行SQL语句前需要先创建statement对象。

Statement stmt = conn.createStatement();

4、执行SQL

        Statement有三种执行SQL语句的方法:

①executeQuery  此方法用来执行select语句,返回查询到的结果集。

②executeUpdate  此方法用来执行insert、update或delete语句以及SQL DDL(数据定义语言)语句,例如create table和drop table。insert、update或delete语句的效果是修改表中零行或多行中的一列或多列。返回值为一个整数,指受到影响的行数(即更新计数)。对于create table或drop table等不操作行的语句,返回值总为零。

③execute  此方法可用于执行任意SQL语句,返回值为boolean型,执行结果为ResultSet返回true,否则返回false。

String query="select * from user where id=1";
ResultSet rs=stmt.executeQuery(query);
  • Part3 数据后续处理

        通过对ResultSet结果集进行索引获取详细数据信息,或是使用get方法获取指定的字段信息。

while(rs.next()){
    System.out.println("编号为:"+rs.getInt("id")+"姓名为:"+rs.getString("username"));
}

        在使用完数据库连接后需要立马释放连接,否则时间长时间未关闭连接会导致服务器资源占用,甚至出现宕机状态。

rs.close();  //关闭ResultSet对象
stmt.close();  //关闭Statement对象
conn.close();  //关闭Connection对象

        完整JDBC连接Oracle数据库示例

import java.sql.*;
public class jdbctest {
	public static void main(String[] args) {
		String url= "jdbc:oracle:thin:@127.0.0.1:1521:myorcl";
		String user="sys as sysdba";
		String password="123";
		try {
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn= DriverManager.getConnection(url,user,password);
			System.out.println("successfully");
			Statement stmt=conn.createStatement();
			String query="select passwd from users where id=9";
			ResultSet rs=stmt.executeQuery(query);
			while(rs.next()){
			    System.out.println("编号为:"+rs.getInt("id")+"姓名为:"+rs.getString("username"));
			}
			rs.close();
			stmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

口令输入为‘sys as sysdba’,如果只输入sys则会报错java.sql.SQLException: ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

有关Java编程 JDBC连接Oracle数据库的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐