通过代码示例跟我学JDBC对数据库的事务操作实例

合集下载

jdbc实操题

jdbc实操题

jdbc实操题好的,以下是一个简单的 JDBC 实操题:题目:使用 JDBC 连接 MySQL 数据库,查询 "students" 表中的所有数据。

要求:编写 Java 代码实现连接 MySQL 数据库,并查询 "students" 表中的所有数据。

输出查询结果。

示例代码:javaimport java.sql.*;public class JdbcExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";try (Connection conn = DriverManager.getConnection(url, username, password);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM students")) {while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");int age = rs.getInt("age");System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);}} catch (SQLException e) {e.printStackTrace();}}}解释:首先,我们定义了数据库连接的 URL、用户名和密码。

JDBC连接数据库代码示例

JDBC连接数据库代码示例

一:获取连接数据库对象的类:package com.JDBC;/**加载mysql驱动:*1:在工程下面新建文件夹lib;*2:把mysql的驱动文件拷贝到此文件夹下面*3:右击工程名,选择最下面的“首选项”,选择“Java Builde Path”;Libraries----Add JARs---"选择mysql的驱动文件"进行加载*//**数据库的连接操作,主要是通过包含在Java API包下的Class类中*的forName()进行。

通过Class.forName()来加载驱动程序*/示例1:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class Tmp0{public static void main(String[]args)throws Exception{Class.forName("com.mysql.jdbc.Driver");Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","");Statement st=conn.createStatement();st.execute("set names'utf8'");st.executeUpdate("insert into hh values('王英','67892')");ResultSet rs=st.executeQuery("select*from student");while(rs.next()){System.out.println(rs.getString("name"));System.out.println(rs.getString("pass"));}}}2import java.io.UnsupportedEncodingException;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import com.mysql.jdbc.Connection;public class DataBase{Connection con=null;Statement stat;ResultSet rs;int count;public DataBase()throws Exception{Class.forName("com.mysql.jdbc.Driver");con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","");stat=con.createStatement();}public void selectDb(String sql)throws Exception{rs=stat.executeQuery(sql);System.out.println("姓名密码");while(rs.next()){System.out.print(rs.getString("name"));System.out.print(""+rs.getString("pass"));System.out.println();}}public void updateDb(String sql)throws Exception{sql=new String(sql.getBytes(),"utf-8");stat.executeUpdate(sql);System.out.println("成功了!!!!");}public void dbClose(){try{con.close();}catch(SQLException e){//TODO Auto-generated catch blocke.printStackTrace();}}}//主类public class DataBaseDemo{public static void main(String[]args)throws Exception{ DataBase t0=new DataBase();String sql="insert into student values('刘能','123321')";t0.updateDb(sql);String sql1="select*from student";t0.selectDb(sql1);t0.dbClose();}}。

JDBC连接MySQL数据库代码

JDBC连接MySQL数据库代码

JDBC连接MySQL数据库代码******************************************************1**********************************************************1import java.sql.DriverManager;2import java.sql.ResultSet;3import java.sql.SQLException;4import java.sql.Connection;5import java.sql.Statement;678public class MysqlDemo {9public static void main(String[] args) throws Exception {10 Connection conn = null;11 String sql;12// MySQL的JDBC URL编写⽅式:jdbc:mysql://主机名称:连接端⼝/数据库的名称?参数=值13// 避免中⽂乱码要指定useUnicode和characterEncoding14// 执⾏数据库操作之前要在数据库管理系统上创建⼀个数据库,名字⾃⼰定,15// 下⾯语句之前就要先创建javademo数据库16 String url = "jdbc:mysql://localhost:3306/javademo?"17 + "user=root&password=root&useUnicode=true&characterEncoding=UTF8";1819try {20// 之所以要使⽤下⾯这条语句,是因为要使⽤MySQL的驱动,所以我们要把它驱动起来,21// 可以通过Class.forName把它加载进去,也可以通过初始化来驱动起来,下⾯三种形式都可以22 Class.forName("com.mysql.jdbc.Driver");// 动态加载mysql驱动23// or:24// com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();25// or:26// new com.mysql.jdbc.Driver();2728 System.out.println("成功加载MySQL驱动程序");29// ⼀个Connection代表⼀个数据库连接30 conn = DriverManager.getConnection(url);31// Statement⾥⾯带有很多⽅法,⽐如executeUpdate可以实现插⼊,更新和删除等32 Statement stmt = conn.createStatement();33 sql = "create table student(NO char(20),name varchar(20),primary key(NO))";34int result = stmt.executeUpdate(sql);// executeUpdate语句会返回⼀个受影响的⾏数,如果返回-1就没有成功35if (result != -1) {36 System.out.println("创建数据表成功");37 sql = "insert into student(NO,name) values('2012001','陶伟基')";38 result = stmt.executeUpdate(sql);39 sql = "insert into student(NO,name) values('2012002','周⼩俊')";40 result = stmt.executeUpdate(sql);41 sql = "select * from student";42 ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空值43 System.out.println("学号\t姓名");44while (rs.next()) {45 System.out46 .println(rs.getString(1) + "\t" + rs.getString(2));// ⼊如果返回的是int类型可以⽤getInt()47 }48 }49 } catch (SQLException e) {50 System.out.println("MySQL操作错误");51 e.printStackTrace();52 } catch (Exception e) {53 e.printStackTrace();54 } finally {55 conn.close();56 }5758 }5960 }******************************************2*****************************************1 DBHelper.java2package com.hu.demo;34import java.sql.Connection;5import java.sql.DriverManager;6import java.sql.PreparedStatement;7import java.sql.SQLException;89public class DBHelper {10public static final String url = "jdbc:mysql://127.0.0.1/student";11public static final String name = "com.mysql.jdbc.Driver";12public static final String user = "root";13public static final String password = "root";1415public Connection conn = null;16public PreparedStatement pst = null;1718public DBHelper(String sql) {19try {20 Class.forName(name);//指定连接类型21 conn = DriverManager.getConnection(url, user, password);//获取连接22 pst = conn.prepareStatement(sql);//准备执⾏语句23 } catch (Exception e) {24 e.printStackTrace();25 }26 }2728public void close() {29try {30this.conn.close();31this.pst.close();32 } catch (SQLException e) {33 e.printStackTrace();34 }35 }36 }1 Demo.java2package com.hu.demo;34import java.sql.ResultSet;5import java.sql.SQLException;67public class Demo {89static String sql = null;10static DBHelper db1 = null;11static ResultSet ret = null;1213public static void main(String[] args) {14 sql = "select *from stuinfo";//SQL语句15 db1 = new DBHelper(sql);//创建DBHelper对象1617try {18 ret = db1.pst.executeQuery();//执⾏语句,得到结果集19while (ret.next()) {20 String uid = ret.getString(1);21 String ufname = ret.getString(2);22 String ulname = ret.getString(3);23 String udate = ret.getString(4);24 System.out.println(uid + "\t" + ufname + "\t" + ulname + "\t" + udate );25 }//显⽰数据26 ret.close();27 db1.close();//关闭连接28 } catch (SQLException e) {29 e.printStackTrace();30 }31 }3233 }*********************************************3********************************************************1/*JDBC231. 在Java中,软件功能都是由类来完成的。

通过代码示例跟我学JDBC对数据库的事务操作实例

通过代码示例跟我学JDBC对数据库的事务操作实例
Connection conn = DriverManager.getConnection("URL","userName","userPassWord");
insertUserInfoSql="insert
into
userInfo
insertUserContactInfoSql="insert
into
2 杨教授工作室,版权所有,盗版必究, 2/25 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)怎么解决这个问题呢? 我们可以把存款、提款、转账这三个商业对象注册到一个事务中去,当某个对象无法完 成操作的时候,其它的对象自动恢复成原来的状态。 这个关系可以用下面的图来表示。
因此,事务机制对于一些关键事务是很重要的,例如 ATM 机提款,提款有多个动作:修 改数据库以及数钱等,如果这其中有任何一个环节出错,那么其它已经实现的操作必须还原, 否则,就会出现,提款人没有拿到钱,但是卡上已经扣款等不可思议的事情发生。 6、事务处理的应用场合 这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义): (1) 分布式访问一个单独的数据资源,以及 (2)从一个单独的应用构件访问分布式资源。 在这种情况,可能要求在(分布式)资源上的一组操作被当作一个工作单元 (unit)。在一 个工作单元中, 操作的所有部分一起成功或失败并恢复。 7、事务划分的基本原则 (1)原则一:使事务尽可能短小。 通过使事务尽量短小,您可以把阻碍其它事务的时间缩到最短,从而提高应用程序的可 伸缩性。保持事务尽可能短小的最好方法当然是不在事务中间做任何不必要耗费时间的事, 特别是不要在事务中间等待用户输入。 因为事务提供并发控制,这通常意味着资源管理器将代表您获得您在事务期间访问的数 据项的锁, 并且它必须一直持有这些锁, 直到事务结束 (前面所讨论的 ACID 特性, 其中 “ACID”

jdbc事务的基本使用方法

jdbc事务的基本使用方法

jdbc事务的基本使用方法JDBC事务是一组SQL语句指令,这些指令都需要以原子性的方式执行。

如果任何一条指令在事务执行期间发生错误,所有之前执行的指令都将被回滚到初始状态,如果所有指令都执行成功,它们将会同时被提交到数据库。

在Java编程语言中,可以通过使用JDBC事务来实现这个功能。

下面我们就来学习一下JDBC事务的基本使用方法。

1.获取连接:使用JDBC连接数据库需要连接到JDBC连接的数据库。

可以通过使用java.sql包中的DriverManaget类提供的getConnection方法来获取数据库连接。

2. 关闭自动提交:在进行JDBC事务处理时,需要手动提交或撤销所有事务处理。

在开启一个JDBC连接时,默认情况下会自动提交所有事务处理,这会使得事务处理的逻辑更加复杂,所以我们需要在开启连接之后,通过调用setAutoCommit(false)来关闭自动提交功能。

3.执行SQL语句: 在JDBC事务中,我们需要执行一系列的SQL语句来完成我们的业务逻辑。

通常我们使用Statement或PreparedStatement执行SQL语句,需要注意的是,这些语句都必须在已经关闭了自动提交的连接中执行。

4.提交事务:在所有的SQL语句都执行完毕之后,我们需要调用connection对象的commit()方法来提交所有的事务。

如果在提交事务时发生错误,也可以通过调用rollback()方法来回滚所有已经执行的操作。

5.释放资源:在事务处理结束之后,需要释放资源,包括关闭数据库连接、释放Statement和ResultSet对象等。

具体代码示例:```Connection conn = null;PreparedStatement pstmt = null;try {// 获取连接conn = DriverManager.getConnection(url, user, password);// 关闭自动提交conn.setAutoCommit(false);// 创建PreparedStatement对象pstmt = conn.prepareStatement("insert into user(name, age) values(?,?)");pstmt.setString(1, "张三");pstmt.setInt(2, 20);// 执行INSERT语句pstmt.executeUpdate();pstmt.setString(1, "李四");pstmt.setInt(2, 22);// 执行INSERT语句pstmt.executeUpdate();// 提交事务mit();} catch (SQLException e) {// 发生错误,回滚事务conn.rollback();} finally {// 释放资源if (pstmt != null) {pstmt.close();}if (conn != null) {conn.close();}}```以上是JDBC事务的基本使用方法,通过学习和实践,我们可以更好地理解和掌握JDBC事务的应用和实现。

跟我学Java JDBC数据库访问操作技术——JDBC事务管理技术在项目中的应用实例

跟我学Java JDBC数据库访问操作技术——JDBC事务管理技术在项目中的应用实例
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1
JDBC应用 JDBC 的事务控制技术 1、事务控制技术在银行账户系统中的应用示例 (1)假设有这样一个简单的编程任务 编写一段程序,将钱从一个银行账户转移到另一个账户。为了简化起见,两个账户都是 存放在内存里面的--也就是说你不用考虑跟数据库的交互。 但要求你的代码在并发环境中也必须能够正确执行,这里所谓的并发环境也就是指可能 存在多个线程同时调用你的转账函数,而所谓能够正确执行则是指任何线程都不能“看到” 系统处于不一致的状态(比如看到其中一个账户显示已被取出了一笔钱然而同时另一个账户 却显示还没有收到这笔钱)。 (2)加锁的银行账户 目前,用于协调并发程序的主导技术仍是锁和条件变量。在 Java 面向对象的语言中,每 个对象上都带有一个隐式的锁,而加锁则由 synchronized 方法来完成,但原理与经典的加锁 解锁是一样的。 因此,在 Java 程序中可以将银行账户类定义成下面这样: class Account { int balance; synchronized void withdraw( int n ) { balance = balance - n; } void deposit( int n ) { withdraw( -n ); } } 其中的 withdraw 方法必须是 synchronized 的,这样两个线程同时调用它的时候才不会 把 balance 减错了。synchronized 关键字的效果就等同于先对当前账户对象加锁,然后运行
2 杨教授工作室,版权所有,盗版必究, 2/11 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(1)标准的解决方案是规定一个全局统一的锁顺序,并按照递增顺序来进行加锁 采用这种做法的代码如下: if(from < to){ from.lock(); to.lock(); } else{ to.lock(); from.lock(); } 这个方法是可行的,但前提是必须事先知道要对哪些锁进行加锁,而后面这个条件并不 是总能满足的。例如,假设 from.withdraw 的实现当账户余额不足时就会从 from2 上提款。 遇到这种情况除非等到我们从 from 中提了钱否则是无法知道是否该对 from2 加锁的, 而另一 方面,一旦已经从 from 中提了钱,再想按“正确”顺序加锁便不可能了。 更何况 from2 这个账户可能根本就只应对 from 可见,而不应被 transfer 知道。而且退 一步说,就算 transfer 知道 from2 的存在,现在需要加的锁也已经由两个变成了三个(事先 还要记得将这些锁正确排序)。 (2)还有更糟的 如果我们需要在某些情况下阻塞(block),情况就会更加复杂。例如,要求 transfer 在 from 账户内余额不足的时候阻塞。这类问题通常的解决办法是在一个条件变量上等待,并 同时释放 from 的锁。 但更进一步, 如果要求当 from 和 from2 中的总余额不够的时候阻塞呢? 3、体验事务控制技术——了解取消 JDBC 中的默认提交 (1)常规的数据访问的编程实现的代码——使用 JDBC 中的默认的提交 public boolean insertOneUserInfo(UserInfoBasePO oneRegisterUserInfo) throws WebBankException { PreparedStatement pstmt=null; int returnResult=0; oneConnection=oneConnectDBBean.getConnection();

Java程序设计中的JDBC数据库访问与事务处理案例

Java程序设计中的JDBC数据库访问与事务处理案例

Java程序设计中的JDBC数据库访问与事务处理案例JDBC(Java Database Connectivity)是在Java程序设计中用于访问数据库的一种标准接口。

通过JDBC,我们可以方便地连接、查询和操作各种类型的数据库。

除了基本的数据库访问功能外,JDBC还提供了事务处理的支持,使得我们可以在数据库操作中保持数据的一致性和完整性。

下面将介绍一个使用JDBC进行数据库访问与事务处理的案例。

案例背景:假设我们正在开发一个在线图书商城系统,其中涉及到对图书、用户和订单等数据的管理和操作。

我们需要设计一个Java程序,使用JDBC实现对数据库中图书、用户和订单的增删改查,并且能够保持相关操作的事务一致性。

案例步骤:1. 准备工作:a. 安装并配置数据库:在本案例中,我们以MySQL数据库为例,需安装并配置好MySQL数据库环境。

b. 创建数据库和表:根据系统需求,在MySQL中创建名为bookstore的数据库,并在此数据库中创建用于存储图书、用户和订单数据的表。

c. 导入JDBC驱动:为了使用JDBC连接数据库,需先导入相应的数据库驱动。

在本案例中,我们将使用MySQL的JDBC驱动。

将相关的JDBC驱动jar包导入到项目中。

2. 建立数据库连接:a. 加载JDBC驱动:在Java程序中,通过Class.forName()方法加载JDBC驱动类。

对于MySQL,加载驱动的代码如下:```javaClass.forName("com.mysql.cj.jdbc.Driver");```b. 建立数据库连接:通过指定数据库的URL、用户名和密码,调用DriverManager.getConnection()方法建立数据库连接:```javaString url = "jdbc:mysql://localhost:3306/bookstore";Connection connection = DriverManager.getConnection(url, "username", "password");```3. 执行数据库操作:a. 查询数据:通过创建Statement或PreparedStatement对象,使用SQL语句进行查询操作。

JAVA使用JDBC技术操作SqlServer数据库实例代码

JAVA使用JDBC技术操作SqlServer数据库实例代码

JAVA使⽤JDBC技术操作SqlServer数据库实例代码JDBC(Java Data Base Connectivity,Java数据库连接)是⼀种⽤于执⾏SQL语句的Java API,可以为多种关系数据库提供统⼀访问,它由⼀组⽤Java语⾔编写的类和接⼝组成。

JDBC提供了⼀种基准,据此可以构建更⾼级的⼯具和接⼝,使数据库开发⼈员能够编写数据库应⽤程序。

JDBC并不能直接访问数据库,需要借助于数据库⼚商提供的JDBC驱动程序。

数据库连接如果要在Java访问数据库,⾸先要加载⼀个数据库驱动,数据库驱动只需要在第⼀次访问时加载⼀次。

然后再每次访问数据库时创建⼀个Connection实例,获取数据库连接,这样就可以执⾏操作数据库的SQL语句。

最后⽤完后释放掉数据库的连接。

数据库驱动类下完后在新建的java_project导⼊驱动包右击选中项⽬>>Build Path >>Add External Archives... 选中下载解压的⽂件导⼊成功后的项⽬:package com.Project_DataBase01;import java.sql.Connection;import java.sql.DriverManager;public class SelectQuery {private Connection conn;/** 创建⼀个返回Connection的⽅法*/public Connection getConnection(){try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");System.out.println("数据库驱动加载成功");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=java_conn_test","sa","123456");if(conn==null){System.out.println("数据库连接失败");System.out.println("-----------------------");}else {System.out.println("数据库连接成功");System.out.println("-----------------------");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return conn;}}进⾏SqlServe数据库java_conn_test中的tb_User进⾏数据的增删改查。

Java基于jdbc连接mysql数据库操作示例

Java基于jdbc连接mysql数据库操作示例

Java基于jdbc连接mysql数据库操作⽰例本⽂实例讲述了Java基于jdbc连接mysql数据库操作。

分享给⼤家供⼤家参考,具体如下:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class MySQLDemo {private Connection conn = null;private Statement stmt = null;private ResultSet rs = null;private String driverclass = "com.mysql.jdbc.Driver";private String url = "jdbc:mysql://localhost:3306/mydb";private String user = "root";private String password = "111111";public MySQLDemo() {try {Class.forName(driverclass).newInstance(); // 加载驱动程序} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blockSystem.out.println("class not found");}try {conn = DriverManager.getConnection(url, user, password); // 获得Connection对象} catch (Exception e) {System.out.println("Connect failed!");}}public void selectMethod(String sql) {System.out.println("id title");try {stmt = conn.createStatement(); // 获得Statement对象rs = stmt.executeQuery(sql); // 执⾏SQL语句,并返回ResultSet类型的结果while (rs.next()) {String title = rs.getString("id");String name = rs.getString("name");System.out.println(title + " " + name);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void closeDB() throws SQLException {if (rs != null)rs.close();if (stmt != null)stmt.close(); // 关闭Statement对象if (conn != null) // 关闭Connection对象conn.close();}public static void main(String args[]) {MySQLDemo demo = new MySQLDemo();demo.selectMethod("select * from test");}}⽤JDBC来连接数据库,基本步骤都⼤同⼩异,只不过不同的数据库之间的URL有些不同。

java中JDBC连接数据库代码和步骤详解及实例代码

java中JDBC连接数据库代码和步骤详解及实例代码

java中JDBC连接数据库代码和步骤详解及实例代码java 中JDBC连接数据库代码和步骤详解JDBC连接数据库•创建⼀个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,⾸先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过ng.Class类的静态⽅法forName(String className)实现。

例如:try{//加载MySql的驱动类Class.forName("com.mysql.jdbc.Driver") ;}catch(ClassNotFoundException e){System.out.println("找不到驱动程序类,加载驱动失败!");e.printStackTrace() ;}成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL•连接URL定义了连接数据库时的协议、⼦协议、数据源标识。

•书写形式:协议:⼦协议:数据源标识协议:在JDBC中总是以jdbc开始⼦协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端⼝。

例如:(MySql的连接URL)jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;useUnicode=true:表⽰使⽤Unicode字符集。

如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。

characterEncoding=gbk:字符编码⽅式。

3、创建数据库的连接•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表⼀个数据库的连接。

•使⽤DriverManager的getConnectin(String url , String username , String password )⽅法传⼊指定的欲连接的数据库的路径、数据库的⽤户名和密码来获得。

spring实现jdbctemplate添加事务支持示例

spring实现jdbctemplate添加事务支持示例
public ThreadLocal<TransactionStatus> getTranscationStatus() { return transcationStatus;
} }
}
publiLeabharlann PlatformTransactionManager getPlatformTransactionManager() { return platformTransactionManager; }
public DefaultTransactionDefinition getTransactionDefinition() { return transactionDefinition; }
private PlatformTransactionManager platformTransactionManager; private DefaultTransactionDefinition transactionDefinition; private ThreadLocal<TransactionStatus> transcationStatus = new ThreadLocal<TransactionStatus>();
public abstract void commit();
public abstract void rollback(); }
复制代码 代码如下:
public class JdbcTemplateImpl extends org.springframework.jdbc.core.JdbcTemplate implements JdbcTemplate {
}
@Override public void afterPropertiesSet() { super.afterPropertiesSet(); transactionDefinition = new DefaultTransactionDefinition(); transactionDefinition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); transactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); platformTransactionManager = new DataSourceTransactionManager(getDataSource());

JDBC连接数据库

JDBC连接数据库

JDBC连接数据库JDBC(Java Database Connectivity)是一种用于Java编程语言的API,用于连接和操作各种类型的数据库。

通过JDBC,我们可以在Java程序中与数据库进行交互,执行SQL语句并获取结果。

下面是一个示例,演示了如何使用JDBC连接到数据库并执行一些基本的数据库操作:1. 引入JDBC相关的类库。

在Java程序中,我们需要使用数据库供应商提供的JDBC驱动程序。

例如,如果我们要连接MySQL数据库,我们需要下载并引入MySQL 的JDBC驱动程序。

2. 加载JDBC驱动程序。

在Java程序中,我们需要在使用JDBC之前加载指定数据库的驱动程序。

通过调用`Class.forName()`方法并传递驱动程序的名称,我们可以动态加载相应的驱动程序。

3. 建立数据库连接。

通过调用`DriverManager.getConnection()`方法,并传递数据库URL、用户名和密码,我们可以建立与数据库的连接。

```javaimport java.sql.*;public class JDBCDemo {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydb";String username = "root";String password = "123456";try {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, username, password);// 执行SQL语句Statement statement = connection.createStatement();String sql = "SELECT * FROM users";ResultSet resultSet = statement.executeQuery(sql);// 处理结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println("id: " + id + ", name: " + name + ", age: " + age);}// 关闭连接resultSet.close();statement.close();connection.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}}```以上示例使用MySQL数据库作为示例,连接到名为"mydb"的数据库,并查询"users"表中的数据。

通过代码示例跟我学应用JDBC实现访问Access数据库表数据的程序实例

通过代码示例跟我学应用JDBC实现访问Access数据库表数据的程序实例

1.1通过代码示例跟我学应用JDBC实现访问Access数据库表数据的程序实例为了了解JDBC的编程实现的方法,下面给出一个采用JDBC-ODBC桥方式连接微软的Access数据库的示例。

1.1.1构建示例项目相关的数据库表1、首先设计一个数据库表并在其中给出一些测试数据2、然后配置出该数据库的数据源名称studlist1.1.2JDBC-ODBC桥方式连上面的Access数据库的程序示例1、程序代码示例import java.sql.*;import java.io.*;public class JdbcApplication {public static void main(String args[]) {JdbcApplication myJdbcApp = new JdbcApplication();myJdbcApp.StatementExecSQLSelect();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.StatementExecSQLUpdateDBRecord();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.StatementExecSQLInsertUpdateDB();try {System.out.println("\nPress Any Key to Continue...");System.in.read();} catch (IOException e) {}myJdbcApp.StatementExecSQLDeleteUpdateDB();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.StatementExecSQLCreateTable();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.StatementExecSQLDropTable();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.PreparedStatementExecSQLSelect();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.PreparedStatementExecSQLUpdateDBRecord();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}myJdbcApp.PreparedStatementExecSQLUpdateDBRecordWithParameter();try {System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();} catch (IOException e) {}/* 由于目前没有添加存储过程,因此现在还不能对下面的方法进行调用myJdbcApp.CallableStatementStoreProc();try{System.out.println("\n请按任意键继续进行下一步的操作....");System.in.read();}catch(IOException e){}*/}void StatementExecSQLSelect(){//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";Connection con = null;Statement stmt = null;ResultSet rs = null;PrintWriter out = null;try{out = new PrintWriter(new FileWriter("DBAccessLog.txt"));DriverManager.setLogWriter(out);out.println("以下为对数据库访问的日志信息");} catch (IOException e) {System.out.println(e);}try{Class.forName(DBDriver); //第一步: 加载JDBC的驱动程序类(本例为JDK 中所提供的JDBC-ODBC的类)} catch (ClassNotFoundException e){System.out.println(e);}try{ //第二步: 连接数据库con = DriverManager.getConnection(url, "yanguser", "1234");System.out.println("\n该数据库的基本信息如下:");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());System.out.println("表中的每条记录的最大字节总数为:" + dma.getMaxRowSize());stmt = con.createStatement(); //第三步: 创建出某种类型的"语句"对象,并执行该SQL语句System.out.print("下面将要执行本次的SQL 语句\n");rs = stmt.executeQuery("select * from student");while (rs.next()) { //第四步: 获得所需要的字段的值// 字段的名称是不区分大小写的int ID = rs.getInt("ID");System.out.print("ID: " + ID + " ");String Name = rs.getString("NAME");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("AGE");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close(); //第五步: 关闭数据库连接} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());}out.close();}void StatementExecSQLUpdateDBRecord() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());Statement stmt = con.createStatement();System.out.print("下面将要进行修改数据,调用StateMent.executeUpdate()方法\n");int RecordRowNum = stmt.executeUpdate("Update student set name='yang' where id=1");System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");ResultSet rs = stmt.executeQuery("select * from student");while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void StatementExecSQLInsertUpdateDB() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser", "1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());Statement stmt = con.createStatement();System.out.print("下面将要增加一条记录,调用StateMent.executeUpdate()方法\n");int RecordRowNum = stmt.executeUpdate("insert into student(id,name,age,sex) values(3,'zhang',30,true)");System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");ResultSet rs = stmt.executeQuery("select * from student");while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void StatementExecSQLDeleteUpdateDB() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());Statement stmt = con.createStatement();System.out.print("下面将要删除一条记录,调用StateMent.executeUpdate()方法\n"); int RecordRowNum = stmt.executeUpdate("DELETE FROM student WHERE id=3"); System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");ResultSet rs = stmt.executeQuery("select * from student");while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void StatementExecSQLCreateTable() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser", "1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());Statement stmt = con.createStatement();System.out.print("下面将要创建出某个数据库表,调用StateMent.executeUpdate()方法\n");int RecordRowNum = stmt.executeUpdate("Create Table StudentInfo(ID integer, Name V ARCHAR(20))");stmt.executeUpdate("insert into StudentInfo(ID,Name) values(3,'cheng')");System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");ResultSet rs = stmt.executeQuery("select * from StudentInfo");while (rs.next()) {int ID = rs.getInt("ID");System.out.print("ID: " + ID + " ");String Name = rs.getString("Name");System.out.println("Name: " + Name);}System.out.print("在该数据库表中再动态地添加一个字段,调用StateMent.executeUpdate()方法\n");stmt.executeUpdate("Alter Table StudentInfo add COLUMN Address VarChar(50)");RecordRowNum = stmt.executeUpdate("insert into StudentInfo(ID,Name,Address) values(4,'zhang','Beijing China')");System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");stmt.executeUpdate("Update StudentInfo set Address='ShangHai China' where ID=4");rs = stmt.executeQuery("select * from StudentInfo");while (rs.next()) {int ID = rs.getInt("ID");System.out.print("ID: " + ID + " ");String Name = rs.getString("Name");System.out.print("Name: " + Name + " ");String Address = rs.getString("Address");System.out.println("Address: " + Address);}System.out.print("在该数据库表中再动态地删除一个字段,调用StateMent.executeUpdate()方法\n");stmt.executeUpdate("Alter Table StudentInfo Drop Column Address");rs = stmt.executeQuery("select * from StudentInfo");while (rs.next()) {int ID = rs.getInt("ID");System.out.print("ID: " + ID + " ");String Name = rs.getString("Name");System.out.println("Name: " + Name);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void StatementExecSQLDropTable() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());Statement stmt = con.createStatement();System.out.print("下面将要动态地删除一个数据库表,调用StateMent.executeUpdate()方法\n");int RecordRowNum = stmt.executeUpdate("Drop Table StudentInfo");con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void PreparedStatementExecSQLSelect() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());PreparedStatement prepstmt = con.prepareStatement("select * from student");System.out.print("下面为利用PreparedStatement语句类实现的查询结果\n");ResultSet rs = prepstmt.executeQuery();while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void PreparedStatementExecSQLUpdateDBRecord() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());PreparedStatement prepstmt = con.prepareStatement( "select * from student");System.out.print("下面是利用PreparedStatement实现的修改结果\n");PreparedStatement Prepstmt = con.prepareStatement("Update student set name='yang' where id=2");int RecordRowNum = Prepstmt.executeUpdate();System.out.println("修改的记录行数为" + RecordRowNum+",修改后的结果如下");prepstmt = con.prepareStatement("select * from student");ResultSet rs = prepstmt.executeQuery();while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}con.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}//利用PreparedStatement 可以实现带参数操作void PreparedStatementExecSQLUpdateDBRecordWithParameter() {try {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url, "yanguser","1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());PreparedStatement prepstmt = con.prepareStatement("select * from student");System.out.print("下面是利用PreparedStatement实现带参数的数据修改\n");prepstmt = con.prepareStatement("Update student set name=? where id=?");prepstmt.setString(1, "LiMing"); //设置SQL语句中的第一个参数为'LiMing'for (int i = 0; i <= 2; i++) {prepstmt.setInt(2, i); // //设置SQL语句中的第一个参数为'i'prepstmt.executeUpdate();}prepstmt = con.prepareStatement("select * from student");ResultSet rs = prepstmt.executeQuery();while (rs.next()) {int ID = rs.getInt("id");System.out.print("ID: " + ID + " ");String Name = rs.getString("name");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("age");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}prepstmt.close(); //must closecon.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());} catch (ClassNotFoundException e) {System.out.println(e);}}void CallableStatementStoreProc() {//URL Format: "jdbc:odbc:Data Source Name", DSN不区分大小写String url = "jdbc:odbc:studlist";String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";Connection con = null;CallableStatement callStmt;ResultSet rs;try {Class.forName(DBDriver);} catch (ClassNotFoundException e) {System.out.println(e);}try {con = DriverManager.getConnection(url, "yanguser", "1234");System.out.println("\n该数据库的基本信息如下");DatabaseMetaData dma = con.getMetaData();System.out.println("URL String:" + dma.getURL());System.out.println("Driver Name:" + dma.getDriverName());System.out.println("Driver Version:" + dma.getDriverVersion());System.out.println("Driver Major Version:" +dma.getDriverMajorVersion());System.out.println("Driver Minor Version:" +dma.getDriverMinorVersion());System.out.println("User Name:" + dma.getUserName());System.out.println("Database Product Name:" +dma.getDatabaseProductName());System.out.println("Database Product Name:" +dma.getDatabaseProductVersion());callStmt = con.prepareCall("{call spSelect()}");//Format: callStmt=con.prepareCall("{call 存储过程名()}");System.out.print("执行该存储过程\n");rs = callStmt.executeQuery();while (rs.next()) {int ID = rs.getInt("ID");System.out.print("ID: " + ID + " ");String Name = rs.getString("NAME");System.out.print("Name: " + Name + " ");int AGE = rs.getInt("AGE");System.out.println("Age: " + AGE);boolean Sex = rs.getBoolean("Sex");System.out.println("Sex: " + Sex);}callStmt.close(); //must closecon.close();} catch (SQLException e) {System.out.println("SQLState:" + e.getSQLState());System.out.println("Message:" + e.getMessage());System.out.println("Vendor:" + e.getErrorCode());}}}2、程序执行后的结果示图每次执行完成一个方法后,按键盘的任意键将进行下一步操作。

完整java开发中JDBC连接数据库代码和步骤

完整java开发中JDBC连接数据库代码和步骤

完整java开发中JDBC连接数据库代码和步骤JDBC连接数据库创建⼀个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,⾸先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过ng.Class类的静态⽅法forName(String className)实现。

例如:try{//加载MySql的驱动类Class.forName("com.mysql.jdbc.Driver") ;}catch(ClassNotFoundException e){System.out.println("找不到驱动程序类,加载驱动失败!");e.printStackTrace() ;}成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL•连接URL定义了连接数据库时的协议、⼦协议、数据源标识。

•书写形式:协议:⼦协议:数据源标识协议:在JDBC中总是以jdbc开始⼦协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端⼝。

例如:(MySql的连接URL)jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;useUnicode=true:表⽰使⽤Unicode字符集。

如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。

characterEncoding=gbk:字符编码⽅式。

3、创建数据库的连接•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表⼀个数据库的连接。

•使⽤DriverManager的getConnectin(String url , String username ,String password )⽅法传⼊指定的欲连接的数据库的路径、数据库的⽤户名和密码来获得。

跟我学Java JDBC数据库访问操作技术——对数据库表中的数据进行访问操作的应用实例(第2部分)

跟我学Java JDBC数据库访问操作技术——对数据库表中的数据进行访问操作的应用实例(第2部分)
} catch (SQLException e) {
throw new WebBankException("在查询过程中出现了错误!系统原始的异常信息 的详细内容为:"+e.getMessage());
}
try { oneConnection.close();
} catch (SQLException e) { e.printStackTrace();
杨教授工作室,版权所有1 ,盗版必究, 1/12 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
} try{
if(!rs.next()){ // 识别当前结果集中有数据吗? return null;
} oneUserInfoPO=new UserInfoPO(); oneUserInfoPO.setUserName(rs.getString("userName")); oneUserInfoPO.setUserPassWord(rs.getString("userPassWord"));
*/ String sqlSelectStatement="select * from userInfo where userName=? and
userPassWord=?"; try { pstmt=oneConnection.prepareStatement(sqlSelectStatement, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); } catch (SQLException e) { throw new WebBankException("SQL 语句可能不正确!系统原始的异常信息的详

通过代码示例跟我学如何应用JDBC实现对数据库表的增删改查(CRUD)的功能操作应用实例

通过代码示例跟我学如何应用JDBC实现对数据库表的增删改查(CRUD)的功能操作应用实例
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
目录
1.1.2 在项目中实现对用户信息数据库表包装的 PO 类...............................................2 1.1.3 在项目中实现对用户信息数据库表的 CRUD 操作访问.....................................9 1.1.4 在业务层组件中应用 DAO 组件——实现用户登录功能 .................................26 1.1.5 在业务层组件中应用 DAO 组件——实现用户注册功能 .................................27
private String userPassWord;
private String userPassWordNoMD5;
private Integer userType;
private String aliaoName;
private String passWordAsk;
private String userImage;
VO 是业务实体对象,是存活在业务层的,是业务逻辑处理程序中使用的;VO 的属性是 根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要 的数据的名称。(与业务的数据有关)。 2、在项目中添加针对用户信息表进行包装的 PO 类 (1)设计一个共性的基类 UserInfoBasePO
杨教授工作室,版权所有1 ,盗版必究, 1/31 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 如何应用 JDBC例
1.1.1 在项目中实现对用户信息数据库表包装的 PO 类 1、理解 PO 和 VO (1)VO 和 PO 的共性(相同)

jdbc使用说明和实例

jdbc使用说明和实例

1 将数据库的JDBC驱动加载到classpath中,在基于JAVAEE的WEB应用实际开发过程中,通常要把目标数据库产品的JDBC驱动复制到WEB-INF/lib下.2 加载JDBC驱动,并将其注册到DriverManager中,下面是一些主流数据库的JDBC驱动加裁注册的代码://Oracle8/8i/9iO数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();//Sql Server7.0/2000数据库Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();//DB2数据库Class.froName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();//Informix数据库Class.forName("rmix.jdbc.IfxDriver").newInstance();//Sybase数据库Class.forName("com.sybase.jdbc.SybDriver").newInstance();//MySQL数据库Class.forName("com.mysql.jdbc.Driver").newInstance();//PostgreSQL数据库Class.forNaem("org.postgresql.Driver").newInstance();3 建立数据库连接,取得Connection对象.例如://Oracle8/8i/9i数据库(thin模式)String url="jdbc:oracle:thin:@localhost:1521:orcl";String user="scott";String password="tiger";Connection conn=DriverManager.getConnection(url,user,password);//Sql Server7.0/2000数据库String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";String user="sa";String password="";Connection conn=DriverManager.getConnection(url,user,password);//DB2数据库String url="jdbc:db2://localhost:5000/sample";String user="amdin"String password=-"";Connection conn=DriverManager.getConnection(url,user,password);//Informix数据库String url="jdbc:informix-sqli://localhost:1533/testDB:INFORMIXSERVER=myserver;user=testuser;passw ord=testpassword";Connection conn=DriverManager.getConnection(url);//Sybase数据库String url="jdbc:sybase:Tds:localhost:5007/tsdata";Properties sysProps=System.getProperties();SysProps.put("user","userid");SysProps.put("password","user_password");Connection conn=DriverManager.getConnection(url,SysProps);//MySQL数据库String url="jdbc:mysql://localhost:3306/testDB?user=root&password=root&useUnicode=true&characte rEncoding=gb2312";Connection conn=DriverManager.getConnection(url);//PostgreSQL数据库String url="jdbc:postgresql://localhost/testDB";String user="myuser";String password="mypassword";Connection conn=DriverManager.getConnection(url,user,password);4 建立Statement对象或PreparedStatement对象.例如://建立Statement对象Statement stmt=conn.createStatement();//建立ProparedStatement对象String sql="select * from user where userName=? and password=?";PreparedStatement pstmt=Conn.prepareStatement(sql);pstmt.setString(1,"admin");pstmt.setString(2,"liubin");5 执行SQL语句.例如:String sql="select * from users";ResultSet rs=stmt.executeQuery(sql);//执行动态SQL查询ResultSet rs=pstmt.executeQuery();//执行insert update delete等语句,先定义sqlstmt.executeUpdate(sql);6 访问结果记录集ResultSet对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 杨教授工作室,版权所有,盗版必究, 3/25 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
的“I”代表“隔离”---Isolation,也就是说,一个事务的结果影响不到与该事务并发执行 的其它事务)。 当您拥有锁时,任何需要访问您锁定的数据项的其它事务将不得不一直等待,直到您释 放锁。如果您的事务很长,那些其它的所有事务都将被锁定,您的应用程序吞吐量将大幅度 下降。 (2)原则二:在事务期间不要等待用户输入 (3)原则三:把相关操作归到单个事务中,但把不相关的操作放到单独的事务中 根据前面的原则一中所要求的事务应尽可能短小,我们必须把一些操作归到一个事务中来维 护一致性。 8、数据库操作过程中可能出现的三种不确定情况: (1)脏读取(Dirty Reads) 一个事务读取了另一个并行事务未提交的数据。 (2)不可重复读取(Non-repeatable Reads) 一个事务再次读取之前的数据时,得到的数据不一致,被另一个已提交的事务修改。 (3)虚读(Phantom Reads) 一个事务重新执行一个查询,返回的记录中包含了因为其他最近提交的事务而产生的新 记录。 9、标准 SQL 规范中,为了避免上面 3 种情况的出现,定义了四个事务隔离等级 (1)Read Uncommitted 最低等级的事务隔离,仅仅保证了读取过程中不会读取到非法数据。上诉 3 种不确定情 况均有可能发生。 (2)Read Committed 大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但 未提交的数据,避免了“脏读取”。该级别适用于大多数系统。 (3)Repeatable Read 保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏 读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 (4)Serializable
2 杨教授工作室,版权所有,盗版必究, 2/25 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)怎么解决这个问题呢? 我们可以把存款、提款、转账这三个商业对象注册到一个事务中去,当某个对象无法完 成操作的时候,其它的对象自动恢复成原来的状态。 这个关系可以用下面的图来表示。
因此,事务机制对于一些关键事务是很重要的,例如 ATM 机提款,提款有多个动作:修 改数据库以及数钱等,如果这其中有任何一个环节出错,那么其它已经实现的操作必须还原, 否则,就会出现,提款人没有拿到钱,但是卡上已经扣款等不可思议的事情发生。 6、事务处理的应用场合 这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义): (1) 分布式访问一个单独的数据资源,以及 (2)从一个单独的应用构件访问分布式资源。 在这种情况,可能要求在(分布式)资源上的一组操作被当作一个工作单元 (unit)。在一 个工作单元中, 操作的所有部分一起成功或失败并恢复。 7、事务划分的基本原则 (1)原则一:使事务尽可能短小。 通过使事务尽量短小,您可以把阻碍其它事务的时间缩到最短,从而提高应用程序的可 伸缩性。保持事务尽可能短小的最好方法当然是不在事务中间做任何不必要耗费时间的事, 特别是不要在事务中间等待用户输入。 因为事务提供并发控制,这通常意味着资源管理器将代表您获得您在事务期间访问的数 据项的锁, 并且它必须一直持有这些锁, 直到事务结束 (前面所讨论的 ACID 特性, 其中 “ACID”
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1
通过代码示例跟我学 JDBC 对数据库的事务操作实例
1.1.1 数据库事务及事务的特性 1、事务概述 事务是一组原子操作(执行一组 SQL)的工作单元,这个工作单元中的所有原子操作在执 行期间,与其它事务隔离,以避免数据源的交相更新而发生混乱,事务中的所有原子操作, 要嘛全部执行成功,要嘛全部失败(即使只有一个失败,所有的原子操作也要全部撤消)。 2、事务及事务的特性 在 JDBC 的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工 作单元。事务具有原子性、隔离性等的 ACID (代表不可分割性 ---atomicity 、一致性 ---consistency、隔离性----isolation 和稳定性----durability)。 (1)Atomic(原子性):事务中包含的操作被看作一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败。 (2)Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到 最初状态。 (3)Isolation(隔离性):事务允许多个用户对同一个数据的并发访问,而不破坏数据的正 确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。 (4)Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。 3、应用示例 通过一个去银行从储蓄帐户转存 500 美元到支票帐户的示例,可以帮助我们了解事务的 ACID 这四个特性的含意。 这里实际上发生了两个操作:首先,从储蓄帐户取出 500 美元,然后将这 500 美元存 到您的支票帐户里。如果两个操作都成功,您和银行都会满意。如果两个操作都失败,您们 也不必紧张,大家都可以接受这个结果,只要稍后再试一次就行了。 现在想象一下, 如果在帐户转存操作过程中银行的计算机崩溃了-----由于计算机可能会因 停电、网络中断等而出现故障,会发生什么情况?首先,假设银行计算机崩溃正好发生在从 储蓄帐户中取出 500 美元后,但在存入支票帐户之前。这样,您就会损失 500 美元。
1 杨教授工作室,版权所有,盗版必究, 1/25 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
现在假设另外一种情况:如果在 500 美元记入支票帐户后,但在从储蓄帐户中取出之前 发生银行计算机崩溃,又会发生什么情况呢。您会很高兴,但银行是不会接受的。这两个操 作必需同时成功或同时失败------这就是原子性的定义。 (1)在此例中,一致性的含义是指存入支票帐户的钱数应与从储蓄帐户中取出的钱数相等。 借助于事务处理系统,一致性由应用程序逻辑来强制实施。 (2)隔离性的含义是与帐户转存并发执行的单独事务不应看到无效的中间状态。在此例中, 如果从储蓄帐户中取出 500 美元,您永远看不到这 500 美元尚未存到支票帐户的情况。隔 离性通常用锁定来实现。 (3)持久性的含义是在事务提交后,由事务进行的更新永远不会丢失。在事务提交之后,系 统崩溃、网络故障,甚至有人不小心拔出了电源线都不应造成更新丢失。大多数数据库(以 及其他类型的事务性资源)通过先将所有需要进行的更改写入持久存储的日记文件中,来确 保持久性。只有在写入日记文件后,才会提交事务。如果在事务提交后系统崩溃或有人从插 座中拔出电源插头,资源管理器会读取其日志并重试所有非永久性的已提交事务,或尝试回 滚所有已中止的事务。 4、什么场合下应该考虑应用事务处理 在一个操作中,如果牵涉到多个永久存储,而且是多步完成,并且需要修改数据的时候, 就一定要考虑加上事务处理。 5、为什么要提供事务 (1)事务是一种手段,用于保证一系列的数据库操作能够准确的完成。 使用事务的一个重要原因,是完成一个操作可能需要使用多步,其中任何一步操作的失 败,都希望全部回滚。以银行转账系统为例: 如下图所示,转账是通这是不允许的。
相关文档
最新文档