jdbc详解(增删改查、事务、存储过程)
来源:互联网 发布:hidpi canvas.js下载 编辑:程序博客网 时间:2024/06/05 11:35
jdbc详解(增删改查、事务、存储过程)
一、JDBC是什么?
JDBC全称java data base connectivity.相当于微软的ODBC(Open Database Connectivity),简单来说就是一组java api,实现了java和各种数据库的连接。现在持久层的各种框架MyBatis, Hibernate等等,其实就是对jdbc的封装。我们在开发过程中,不能只知道简单的调用MyBatis, Hibernate帮我们封装的方法来与数据库打交道,我们需要知道更底层到底是怎么实现的,Jdbc的各种接口包含在java.sql及javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaEE。主要包含以下类和接口:
DriverManager:这个是一个实现类,它是一个工厂类,用来生产Driver对象的
这个类的结构设计模式为工厂方法
Driver:这是驱动程序对象的接口,它指向一个实实在在的数据库驱动程序对象,那么这个数据库驱动程序对象是从哪里来的呢?
DriverManager工厂中有个方法:getDriver(String URL),通过这个方法可以得到驱动程序对象,这个方法是在各个数据库厂商按JDBC规范设计的数据库驱动程序包里的类中静态实现的,也就是在静态块中
Connection:这个接口可以指向一个数据库连接对象,那么如何得到这个连接对象呢?
是通过DriverManager工厂中的getConnection(String URL)方法得到的
Statement:用于执行静态的SQL语句的接口,通过Connection中的createStatement方法得到的
Resultset:用于指向结果集对象的接口,结果集对象是通过Statement中的execute等方法得到的
二、JDBC连接各种数据库方法
1、Oracle8/8i/9i数据库(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2数据库
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase数据库
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix数据库
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);
6、MySQL数据库
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicod
e=true&characterEncoding=8859_1"
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL数据库
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB为数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
三、实验:对用户表tb_users实现增删改查、使用存储过程、事务
package com.figo.onlinemarket.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author zhuzhifei 20130222
* jdbc增删改查、存储过程、事务操作
*/
public class JdbcTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
jdbcExample();
}
private static void jdbcExample()
{
Connection con=null;
try {
//加载oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@10.132.81.134:1521:dsdb1";
try {
//建立数据库连接相当于.net的SqlConnection
con=DriverManager.getConnection(url,"mpos","mpos");
//设置是否自动提交事务
con.setAutoCommit(false); //这个非常重要,否则事务回滚不起作用
//设置隔离级别,不允许脏读
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
//相当于.net的SqlCommond,用于执行sql
Statement stmt=con.createStatement();
//增
String sqlInsert="insert into tb_users(userId,name,password,address) values(SEQ_TB_USERS.nextval,'test','test','shanghai china')";
stmt.execute(sqlInsert);
//改
String sqlUpdate="update tb_users set address='sh' where name='test'";
stmt.executeUpdate(sqlUpdate);
//删
String sqlDelete="delete from tb_users where name='test'";
stmt.execute(sqlDelete);
//查:相当于.net的DataTable,返回的是一张数据表
String sqlSelect="select * from tb_users";
ResultSet resultSet=stmt.executeQuery(sqlSelect);
//输出表中的内容
while(resultSet.next())
{
System.out.println(resultSet.getLong(1));
System.out.println(resultSet.getString(2));
System.out.println(resultSet.getString(3));
}
//增也可以使用PreparedStatement继承至Statement,可以传参
String sqlPrepare="insert into tb_users(userId,name,password,address) values(?,?,?,?)";
PreparedStatement ps=con.prepareStatement(sqlPrepare);
ps.setLong(1, 6);
ps.setString(2, "daniel");
ps.setString(3, "123456");
ps.setString(4, "New York");
ps.executeUpdate();
//使用存储过程CallableStatement继承至Statement
String sqlCall="{call p_insertUser(?,?,?,?,?,?,?,?,?)}";
CallableStatement cs=con.prepareCall(sqlCall);
//给参数赋值
cs.setString(1, "test1");
cs.setString(2, "test2");
cs.setString(3, "test3");
cs.setString(4, "test4");
cs.setString(5, "test5");
cs.setString(6, "test6");
cs.setString(7, "test7");
cs.setString(8, "test8");
cs.setString(9, "test9");
cs.execute();
//提交事务
con.commit();
//关闭连接
stmt.close();
con.close();
ps.close();
cs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(con!=null)
{
try {
//回滚事务
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:可能会出现这个错误:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
这是因为没有提交驱动程序的类库,添加方法:项目右键PropertiesàJava Build PathàLibrariesàAdd External JARSà你本机oracle安装位置
F:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar,添加好就OK了
- jdbc详解(增删改查、事务、存储过程)
- jdbc增删改查操作 存储过程
- 存储过程增删改查
- SQL存储过程详解-通用型增删改查
- oracle 存储过程实现增删改查
- sqlserver存储过程的增删改查
- oracle存储过程增删改查
- Oracle 存储过程之增删改查
- Jdbc 增删改查
- jdbc增删改查
- JDBC 增删改查
- jdbc增删改查
- jdbc增删查改
- JDBC 增删改查
- jdbc:增删改查
- jdbc---增删改查
- SQL Server 复习 增删改查 视图 事务 存储过程 触发器
- 存储过程之七—存储过程增删改查
- MFC的GUI窗口使用Console输出函数printf
- eclipse常用快捷键总结
- 第一次C程序设计上机报告
- hibernate复合主键
- java jdbc 汇总
- jdbc详解(增删改查、事务、存储过程)
- 动态规划之矩阵连乘问题
- 信息图:移动端APP设计指南
- mongodb GridView C#
- 人生如流星
- Jquery操作select
- 打印从0到1000的所有素数
- 其他SWT组件
- JAVA的throw和throws