Java中通过JDBC操作MySQL数据库

JDBC相关的操作
0、JDBC常用类和接口介绍
DriverManager类
DriverManager类用来管理数据库中的所有驱动程序;是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。此外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪信息的显示等事务。DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以调用。
DriverManager类的常用方法如下:
setLoginTimeout()设置驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位; println(String message)将一条消息打印到当前JDBC日志流中。
Connection接口
Connection接口代表与特定的数据库的连接。要对数据表中的数据进行操作,首先要获取数据库连接。Connection实例就像在应用程序与数据库之间开通了一条渠道。可以通过DriverManager类的getConnection()方法获取Connection实例。
Connection接口的常用方法如下:
createStatement()创建Statement对象
createStatement(int resultSetType,int resultSetConcurrency) 创建一个Statement对象,该对象将生成具有给定类型、并发性和可保存性的ResultSet对象
prepareStatement()创建预处理对象PreparedStatement
isReadOnly()查看当前Connection对象的读取模式是否是只读形式
commit()使所有上一次提交、回滚后进行的更改成为持久更改,并释放此Connection对象当前持有的所有数据库锁
roolback()取消在当前事务中进行的所有更改,并释放此Connection对象当前持有的所有数据库锁;
close()立即释放此Connection对象的数据库和JDBC资源,而不是等待他们被自动释放。
Statement接口
Statement接口用于创建向数据库中传递SQL语句的对象,该接口提供了一些方法可以实现对数据库的常用操作。
Statement接口的常用方法如下:
execute(String sql) 执行静态的SELECT语句,该语句可能返回多个结果集
learBatch() 清空此Statement对象的当前SQL命令列表
executeBatch() 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。数组元素的排序与SQL语句的添加顺序对应
executeUpdate() 执行给定SQL语句,该语句可以为INSERT、UPDATE或DELETE语句
addBatch(String sql) 将给定的SQL命令添加到此Statement对象的当前命令列表中。如果驱动程序不支持批量处理将抛出异常
close() 释放Statement实例占用的数据库和JDBC资源
PreparedStatement接口
PreparedStatement接口继承Statement,用于执行动态的SQL语句,通过PreparedStatement实例执行的SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。
PreparedStatement接口的常用方法如下:
execute() 在此PreparedStatement对象中执行SQL语句,该语句可以是任何类型的SQL语句 executeQuery() 在此PreparedStatement对象中执行SQL查询语句,返回结果为查询结果集ResultSet对象
executeUpdate() 在此PreparedStatement对象中执行SQL语句,该SQL语句必须是一个INSERT、UPDATE、DELETE语句,或者是没有返回值的DDL语句
setByte(int pIndex, byte bt) 将参数pIndex位置上设置为给定的byte型参数bt
setDouble(int pIndex, double dou) 将参数pIndex位置上设置为给定的double型参数dou
setInt(int pIndex, int x) 将参数pIndex位置上设置为给定的int型参数x
setObject(int pIndex, Object o)将参数pIndex位置上设置为给定的Object型参数值
setString(int pIndex, String str) 将参数pIndex位置上设置为给定的String型参数值
ResultSet接口
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
ResultSet接口的常用方法如下:
getInt()
getFloat()
getDate()
getBoolean()
getString()
getObject() 以指定类型获取ResultSet对象的当前行的指定列值。
next() 将指针向下移一行
updateInt() 用int值更新指定列
updateFloat()
updateLong()
updateString()
updateObject()
updateNull()
updateDouble() 用指定类型值更新指定列
1、加载MySQL驱动
如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次。然后在每次访问数据库时创建一个Connection实例,获取数据库连接,这样就可以执行操作数据库的SQL语句。最后在完成数据库操作时,释放与数据库的连接。Java加载数据库驱动的方法是调用Class类的静态方法forName()。语法格式如下:Class.forName(String DriverManager)

    String DBDRIVER = "com.mysql.jdbc.Driver";    
    Class.forName(DBDRIVER);

2、建立连接
加载完数据库驱动即可建立数据库的连接,要连接数据库可以使用DriverManager类的静态方法getConnection()来实现,并分别将数据库的URL、数据库用户名和密码作为该方法的参数,即可建立到指定数据库的连接。

	String DBDRIVER = "com.mysql.jdbc.Driver";   
	String DBUSER = "root"; 
	String DBPASS = "mysqladmin";   
	Class.forName(DBDRIVER); 
	Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);

3、数据操作(增、删、改、查)
在Java程序中,一旦建立类数据库连接,就可以使用Connection接口的createStatement()方法来获得Statement对象,也可调用prepareStatement()方法获得PreparedStatement对象,通过executeUpdate()方法来执行SQL语句,就可以向数据库添加数据了。

package com.photon; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement;  
public class MySQLConnectTest {  
	//定义MySQL的数据库驱动程序  
	public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
	//定义MySQL数据库的连接地址  
	public static final String DBURL = "jdbc:mysql://localhost:3303/javadata";  
	//MySQL数据库的连接用户名和连接密码  
	public static final String DBUSER = "root";  
	public static final String DBPASS = "mysqladmin";   
	public static void main(String[] args) {   
		Connection conn = null;   
		// TODO Auto-generated method stub   
		try{    
			Class.forName("com.mysql.jdbc.Driver");   
		}catch(ClassNotFoundException e){    
			e.printStackTrace();   
		}     
		String sql = "insert into mytab(id, m_name, m_password, age) values(2, '李四', '111111', 20)";   
		try {    
			conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
			System.out.println(conn);    
			Statement stmt = conn.createStatement();   
			stmt.executeUpdate(sql);    
		} catch (SQLException e1) {    
			// TODO Auto-generated catch block    
			e1.printStackTrace();   
		}     
	} 
}

Statement接口的executeUpdate()或executeQuery()方法可以执行SQL语句,executeUpdate()方法用于执行数据的插入、修改或删除操作,返回影响数据库记录的条数。executeQuery()方法用于执行SELECT查询语句,将返回一个ResultSet型的结果集。通过遍历查询结果集的内容,才可获取SQL语句执行的查询结果。ResultSet对象具有指向当前数据行的光标。最初,光标被置于第一行之前,可以通过该对象的next()方法将光标移动到下一行;如果ResultSet对象没有下一行,next()方法返回false,所以可以在while循环中使用next()方法迭代结果集。

package com.photon; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
public class MySQLConnectTest {  
	//定义MySQL的数据库驱动程序  
	public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
	//定义MySQL数据库的连接地址  
	public static final String DBURL = "jdbc:mysql://localhost:3303/javadata";  
	//MySQL数据库的连接用户名和连接密码  
	public static final String DBUSER = "root";  
	public static final String DBPASS = "mysqladmin";  
	public static void main(String[] args) {   
		Connection conn = null;   
		// TODO Auto-generated method stub   
		try{    
			Class.forName("com.mysql.jdbc.Driver");   }
		catch(ClassNotFoundException e){    
			e.printStackTrace();   
		}     
		int id, age;   
		String name, pass;   
		String sql = "select * from mytab";   
		try {    
			conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS); 
			System.out.println("id\t用户名\t密码\t年龄");    
			Statement stmt = conn.createStatement();    
			ResultSet rs = stmt.executeQuery(sql);    
			while(rs.next()){     
				id = rs.getInt("id");     
				name = rs.getString("m_name");     
				pass = rs.getString("m_password");     
				age = rs.getInt("age");     
				System.out.println(id+"\t"+name+"\t"+pass+"\t"+age);    
			}    
			conn.close();   
		} catch (SQLException e1) {    
			// TODO Auto-generated catch block    
			e1.printStackTrace();   
		}     
	} 
}

修改数据是数据库操作中必不可少的一部分,使用Statement接口中的executeUpdate()方法可以修改数据库表中的数据,也可以使用PreparedStatement接口中的executeUpdate()方法对数据库中的表进行修改操作。 修改数据是根据一定的条件进行修改,这个条件可以是固定的,也可以是一个范围。下面做一个根据范围修改的例子,同样使用executeUpdate()方法,它的返回值是一个int类型的数据,表示受影响的行数,获得这个值就可以知道这次一共修改了几条数据。
4、注意
由于在一个程序中经常需要对数据库进行操作,如果每次操作数据库都要建立数据库的连接,这样不但会出现代码重复,而且也极大地影响了编程效率,为此可以为数据库连接单独创建一个类,在该类中定义一个进行数据库连接的静态方法,当需要使用数据库连接时,可以通过类名调用该方法获得数据库的连接。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值