欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java连接Oracle数据库的方法解析

程序员文章站 2024-03-09 11:33:59
oracle数据库先创建一个表和添加一些数据 1.先在oracle数据库中创建一个student表: create table student ( id...

oracle数据库先创建一个表和添加一些数据

1.先在oracle数据库中创建一个student表:

create table student
(
 id number(11) not null primary key,
 stu_name varchar(16) not null,
 gender number(11) default null,
 age number(11) default null,
 address varchar(128) default null
);

2.向表中增添一些数据

insert into student values('1','王小军','1','17','北京市和平里七区30号楼7门102')

myeclipse里编写java代码

1.将ojdbc6.jar导入项目中

   先创建一个项目,然后在鼠标移到项目上右键-->new-->folder;folder name:lib;这样就在项目中创建了一个文件夹lib;然后将ojdbc6.jar包导入该文件夹中

   该包下载地址链接:

   鼠标移到该包上;右键-->build path-->add to build path;

java连接Oracle数据库的方法解析

2.创建一个类,开始编码

import java.sql.connection;
import java.sql.drivermanager;
import java.sql.preparedstatement;
import java.sql.resultset;
import java.sql.resultsetmetadata;
import java.sql.sqlexception;
public class operateoracle {
 // 定义连接所需的字符串
 // 192.168.0.x是本机地址(要改成自己的ip地址),1521端口号,xe是精简版oracle的默认数据库名
 private static string usernamr = "orcl";
 private static string password = "orcl";
 private static string drvier = "oracle.jdbc.oracledriver";
 private static string url = "jdbc:oracle:thin:@192.168.0.x:1521:xe";
 // 创建一个数据库连接
 connection connection = null;
 // 创建预编译语句对象,一般都是用这个而不用statement
 preparedstatement pstm = null;
 // 创建一个结果集对象
 resultset rs = null;
 /**
 * 向数据库中增加数据
 * 首先获取表内数据总数,总数+1为新增数据的id值
 * @param stuname:学生姓名
 * @param gender:学生性别,1表示男性,2表示女性
 * @param age:学生年龄
 * @param address:学生住址
 */
 public void adddata(string stuname, int gender, int age, string address) {
 connection = getconnection();
 // string sql =
 // "insert into student values('1','王小军','1','17','北京市和平里七区30号楼7门102')";
 string sql = "select count(*) from student where 1 = 1";
 string sqlstr = "insert into student values(?,?,?,?,?)";
 int count = 0;
 try {
 // 计算数据库student表中数据总数
 pstm = connection.preparestatement(sql);
 rs = pstm.executequery();
 while (rs.next()) {
 count = rs.getint(1) + 1;
 system.out.println(rs.getint(1));
 }
 // 执行插入数据操作
 pstm = connection.preparestatement(sqlstr);
 pstm.setint(1, count);
 pstm.setstring(2, stuname);
 pstm.setint(3, gender);
 pstm.setint(4, age);
 pstm.setstring(5, address);
 pstm.executeupdate();
 } catch (sqlexception e) {
 e.printstacktrace();
 } finally {
 releaseresource();
 }
 }
 /**
 * 向数据库中删除数据
 * @param stuname:根据姓名删除数据
 */
 public void deletedata(string stuname) {
 connection = getconnection();
 string sqlstr = "delete from student where stu_name=?";
 system.out.println(stuname);
 try {
 // 执行删除数据操作
 pstm = connection.preparestatement(sqlstr);
 pstm.setstring(1, stuname);
 pstm.executeupdate();
 } catch (sqlexception e) {
 e.printstacktrace();
 } finally {
 releaseresource();
 }
 }
 /**
 * 向数据库中修改数据
 * @param stuname:学生姓名,根据此值查询要修改的某行值
 * @param gender
 * @param age
 * @param address
 */
 public void updatedata(string stuname, int gender, int age, string address) {
 connection = getconnection();
 string sql = "select id from student where 1 = 1 and stu_name = ?";
 string sqlstr = "update student set stu_name=?,gender=?,age=?,address=? where id=?";
 int count = 0;
 try {
 // 计算数据库student表中数据总数
 pstm = connection.preparestatement(sql);
 pstm.setstring(1, stuname);
 rs = pstm.executequery();
 while (rs.next()) {
 count = rs.getint(1);
 system.out.println(rs.getint(1));
 }
 // 执行插入数据操作
 pstm = connection.preparestatement(sqlstr);
 pstm.setstring(1, stuname);
 pstm.setint(2, gender);
 pstm.setint(3, age);
 pstm.setstring(4, address);
 pstm.setint(5, count);
 pstm.executeupdate();
 } catch (sqlexception e) {
 e.printstacktrace();
 } finally {
 releaseresource();
 }
 }
 /**
 * 向数据库中查询数据
 */
 public void selectdata() {
 connection = getconnection();
 string sql = "select * from student where 1 = 1";
 try {
 pstm = connection.preparestatement(sql);
 rs = pstm.executequery();
 while (rs.next()) {
 string id = rs.getstring("id");
 string name = rs.getstring("stu_name");
 string gender = rs.getstring("gender");
 string age = rs.getstring("age");
 string address = rs.getstring("address");
 system.out.println(id + "\t" + name + "\t" + gender + "\t"
 + age + "\t" + address);
 }
 } catch (sqlexception e) {
 e.printstacktrace();
 } finally {
 releaseresource();
 }
 }
 /**
 * 使用resultsetmetadata计算列数
 */
 public void selectdata2() {
 connection = getconnection();
 string sql = "select * from employees where 1 = 1";
 int count = 0;
 try {
 pstm = connection.preparestatement(sql);
 rs = pstm.executequery();
 while (rs.next()) {
 count++;
 }
 resultsetmetadata rsmd = rs.getmetadata();
 int cols_len = rsmd.getcolumncount();
 system.out.println("count=" + count + "\tcols_len=" + cols_len);
 } catch (sqlexception e) {
 e.printstacktrace();
 } finally {
 releaseresource();
 }
 }
 /**
 * 获取connection对象
 * 
 * @return
 */
 public connection getconnection() {
 try {
 class.forname(drvier);
 connection = drivermanager.getconnection(url, usernamr, password);
 system.out.println("成功连接数据库");
 } catch (classnotfoundexception e) {
 throw new runtimeexception("class not find !", e);
 } catch (sqlexception e) {
 throw new runtimeexception("get connection error!", e);
 }
 return connection;
 }
 /**
 * 释放资源
 */
 public void releaseresource() {
 if (rs != null) {
 try {
 rs.close();
 } catch (sqlexception e) {
 e.printstacktrace();
 }
 }
 if (pstm != null) {
 try {
 pstm.close();
 } catch (sqlexception e) {
 e.printstacktrace();
 }
 }
 if (connection != null) {
 try {
 connection.close();
 } catch (sqlexception e) {
 e.printstacktrace();
 }
 }
 }
}

3.创建一个测试类

public class test {
 public static void main(string[] args) {
 /**
 * 增删改查完成,但是有一定局限性
 * 1.增 问题不大
 * 2.删 要给出一个值去删除(可能值不存在-->没有处理机制,值不唯一怎么处理?)
 * 3.改 同删的问题
 * 4.查 问题不大
 */
 //创建operateoracle对象
 operateoracle oo=new operateoracle();
 //测试增加数据操作
 //oo.adddata("孙中山",1,25,"北京市海淀区红旗路111号");
 //测试删除数据操作
 //oo.deletedata("孙中山");
 //测试更新数据操作
 oo.updatedata("孙中山",1,30,"北京市东城区岳山路11号");
 //测试查询数据操作
 //oo.selectdata();
 //测试resultsetmetadata类
 //oo.selectdata2();
 }
}

正如测试类中所注释的,此处只可按照正确的方式去连接oracle数据库,操作增删改查操作,但是对于一些错误操作的处理机制还不够完善。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!