JDBC连接

-------------------------------《JDBC》--------------------------------

JDBC Java数据库连接

JDBC是一个规范,遵循JDBC接口规范,各个数据库厂家各自实现自己的驱动程序

JDBC驱动程序都应实现的重要接口:

DriverManager 驱动管理

Connection 数据库连接

Statement 语句执行接口 Statement---sql语句.

CallableStatement---存储过程、函数.

ResultSet 结果集

ODBC 开放数据库连接

 

驱动包放入classpath环境变量中。

 

//Java连接Oracle

"jdbc:oracle:thin:@192.168.2.23:1521:simple","simple","simple"

//Java连接SQLServer

jdbc:microsofr:sqlserver://localhost:1433;DatabaseName=dbName

 

---------------------------------------Java连接Oracle------------------------------------------------------

1、加载驱动

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

2、得到连接

Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@192.168.2.23:1521:simple","simple","simple");

3、创建CallableStatement

CallableStatement cs = ct.prepareCall("{call pro_input(?,?)}");

4、给?赋值

cs.setString(1,"simple");

cs.setInt(2, 20);

5、执行

cs.execute();

ct.commit();

6、关闭

//cs.close();

ct.close();

 

 

完整例子:

 

public class JDBCTest
{
	//1.加载驱动
	static boolean LoadDriver()
	{
		String driverClass="oracle.jdbc.driver.OracleDriver";
		try
		{
			//根据类名 搜索驱动程序
			Class.forName(driverClass);
			return true;
		}
		catch(ClassNotFoundException e)
		{
			System.out.println(e);
		}
		return false;
	}

	//2.数据库连接
	static Connection OpenDataBase(String user,String pwd)
	{
		//定义链接字符串
		String url="jdbc:oracle:thin:@192.168.2.23:1521:simple";
		try
		{
			return DriverManager.getConnection(url,user,pwd);
		}
		catch(SQLException e)
		{
			System.out.println("建立数据库连接失败,"+e);
		}
		return null;
	}
	
	//3.执行语句
	static void testSql(Connection con,String sql)
	{
		try
		{
			Statement stmt = con.createStatement();
			int rows = stmt.executeUpdate(sql);
			System.out.println("执行语句,返回:"+rows);
		} catch (SQLException e)
		{
			System.out.println("执行语句失败,"+e);
		}
	}
	
	//数据库事物控制
	//开始事务
	static void BeginTranaction(Connection con)
	{
		try
		{
			con.setAutoCommit(false);//设置jdbc事务为手动模式
		}
		catch(SQLException e)
		{
			System.out.println("事务初始化失败,"+e);
		}
	}
	//提交
	static void Commit(Connection con)
	{
		try
		{
			con.commit();
		}
		catch(SQLException e)
		{
			System.out.println("事务提交失败,"+e);
		}
		try
		{
			con.setAutoCommit(true);//还原为自动单条事务模式
		}
		catch(SQLException e){}
	}
	//回滚
	static void Rollback(Connection con)
	{
		try
		{
			con.rollback();
		}
		catch(SQLException e)
		{
			System.out.println("事务回滚失败,"+e);
		}
		try
		{
			con.setAutoCommit(true);//还原为自动单条事务模式
		}
		catch(SQLException e){}
	}
	
	//查询
	static ResultSet testQuerry(Connection con,String sql)
	{
		try
		{
			Statement stmt = con.createStatement();
			return stmt.executeQuery(sql);
		}
		catch(SQLException e)
		{
			System.out.println("执行查询发生异常:"+e);
		}
		return null;
	}
	
	//执行预处理的语句对象
	static PreparedStatement getPrapareStmt(Connection con,String sql)
	{
		try
		{
			return con.prepareStatement(sql);
		} catch (SQLException e)
		{
			System.out.println("创建预处理对象发生异常,"+e);
		}
		return null;
	}
	
	//调用存储过程
	static int WriteSyslos(Connection con,int tid,String content)
	{
		try
		{
			String sql = "{call prc_writelog(?,?,?,?)}";
			//String sql = "{?=call prc_writelog(?,?,?,?)}";	//调用函数
			CallableStatement stmt = con.prepareCall(sql);
			//参数赋值
			stmt.setInt(1, tid);
			stmt.setString(2, content);
			//注册出参类型
			stmt.registerOutParameter(3, Types.INTEGER);
			stmt.registerOutParameter(4, Types.VARCHAR);
			//执行
			stmt.execute();
			//取出出参的数据
			int iRet = stmt.getInt(3);
			String sRet = stmt.getString(4);
			System.out.printf("iRet:%d,sRet:%s \r\n",iRet,sRet);
			return iRet;
		}
		catch (SQLException e)
		{
			System.out.println("调用存储过程失败,"+e);
		}
		return 0;
	}
	
	public static void main(String[] args)
	{
		if(LoadDriver())
		{
			Connection dbCon = OpenDataBase("simple","simple");
			if(dbCon!=null)
			{
				System.out.println("连接成功!");
			}
			//写日志
			WriteSyslos(dbCon, 10, "记录java日志,通过存储过程!");
			//开始事务
			BeginTranaction(dbCon);
			//insert
			for(int i = 0;i<3;i++)
			{
				testSql(dbCon, "insert into syslogs values(seq_syslogs.nextval,10,sysdate,'java客户端程序日志',user)");
			}
			//结束事务
			Commit(dbCon);
			//Rollback(dbCon);
			
			//执行批量任务
			try
			{
				PreparedStatement pstmt = getPrapareStmt(dbCon, "insert into syslogs values(seq_syslogs.nextval,?,sysdate,?,user)");
				BeginTranaction(dbCon);//手动事务
				for(int i=0;i<300;i++)
				{
					pstmt.setInt(1, 10);
					pstmt.setString(2, "No."+i+"批量插入任务");
					
					pstmt.addBatch();//添加到批处理任务中
				}
				int[] rows = pstmt.executeBatch();
				System.out.print("批处理任务返回:("+pstmt.SUCCESS_NO_INFO+"表示执行成功, "+pstmt.EXECUTE_FAILED+"表示执行失败!)[");
				for(int val:rows)
				{
					System.out.print(val+",");
				}
				System.out.println("]");
				Commit(dbCon);
				pstmt.close();
			} catch (SQLException e1)
			{
				e1.printStackTrace();
			}
			//update
			//testSql(dbCon, "update syslogs set content='java客户端更新日志' where logid=90");
			//testSql(dbCon, "delete from syslogs where logid=90");
			
			//查询
			try
			{
				ResultSet rs = testQuerry(dbCon, "select log.logid,type.title,log.dtm,log.content from syslogs log,logtypes type where log.tid=type.tid order by log.dtm desc ");
				if(rs!=null)
				{
					while(rs.next())//移到下一条记录
					{
						//int logid_1 = rs.getInt(1);
						int logid_2 = rs.getInt("logid");
						System.out.printf("日志ID :%d \r\n",logid_2);
						String title = rs.getString("title");
						Date dtm = rs.getDate("dtm");
						java.util.Date dtm_2 = new java.util.Date(dtm.getTime());
						System.out.printf("类型:%s  记录时间:%s  内容:%s \r\n",title,dtm_2.toLocaleString(),rs.getString("content"));
					}
				}
				rs.close();//释放结果集
			} catch (SQLException e){}
			
			//关闭连接
			try
			{
				if(dbCon!=null)
					dbCon.close();
			}
			catch(SQLException e){}
		}
	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值