java连接数据库,使用oracle和mysql

随着工程量,代码量的增加,存储数据必然会用到数据库。下面我就从mysql8.0数据库和oracle轻量版数据库,两个数据库来实现以下java连接数据库,并且访问数据库的过程。

首先来列出数据库所用到的驱动:

mysql 8.0 “com.mysql.cj.jdbc.Driver”
oracle轻量版 “oracle.jdbc.driver.OracleDriver”

需要注意的是,mysql 5.0系列和8.0系列数据驱动已经更改了。如果还有用5.0系列的需要把数据驱动改成:“com.mysql.jdbc.Driver”

java连接数据库代码部分需要进行六步操作,分别是:
加载驱动、连接数据库、创建执行sql语句的类Statement、执行sql语句、获取结果、关闭数据库

下面是关于访问oracle数据库的代码:需要注意的是在url后面的xe表示的是轻量级的oracle。用户名是user, 密码是2016205
特别提醒一下,由于成对的大括号是一个局部,所以为了代码编写上的方便和美观性,建议把需要用到的量都在try块前定义好。

public class JDBCDmeo {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
		String user = "qst";
		String password = "2016205";
		
		try {
			
			//1.加载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.链接数据库
			Connection connection = DriverManager.getConnection(url, user, password);
			
			//3.创建执行sql语句的类statement
			Statement statement = connection.createStatement();
			
			//4.执行sql语句
			String sql1 = "insert into person values('小红','12','济南')";
			statement.executeUpdate(sql1);
			ResultSet resultSet = statement.executeQuery("select * from person");
			
			//5.获取结果
			
			while(resultSet.next()) {
				System.out.println(" name: "+resultSet.getString(1)+" age: "+resultSet.getString(2)+
						" address: "+resultSet.getString(3));
			}
			
			//6.关闭数据库
			statement.close();
			connection.close();
			
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

JDBC的典型用法:
java8支持了JDBC4.2标准,下面简单介绍一下。
DriverManager: 用于管理JDBC驱动的服务类。使用它的主要目的是获取Connection对象。该类包含一个getConnection(String url, String user, String password)方法.该方法用于获取对应url数据库连接。

Statement createStatement():该方法用于返回一个Statement对象。调用该对象中的executeQuery(String sql)方法可以执行查询语句,该方法的返回值是ResultSet。需要定义一个ResultSet结果集的对象来接收查询结果。

由于查询结果不可能只有一条,此时需要使用ResultSet结果集的对象的next()方法将游标移动到下一条记录,来判断是否还有下一条数据。如果下一条记录有效的话就会返回true,否则返回flase。最后在调用getXXX(index)方法来获取对应列的内容。比如姓名是varchar2类型的,获取这一列的数据的时候,就需要使用getString()方法,该方法有一个index,用于表示获取第几列的数据。index从1开始。

最后在使用完数据库的时候需要进行关闭操作,否则会造成严重后果。Connection对象和Statement对象都需要被关闭。

下面介绍进行mysql 8.0 数据库连接的代码演示:

public class Demo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost/student?useSSL=FALSE&serverTimezone=UTC";
        String user = "root";
        String password = "password";
        String driver = "com.mysql.cj.jdbc.Driver";

        try {
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url,user,password);
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from student1");
            while(resultSet.next()){
                System.out.println(" name: "+resultSet.getString(1)+" age: "+resultSet.getString(2)+" addr: "+resultSet.getString(3));
            }
            statement.close();
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }

    }
}

有此可见,数据库连接代码的核心没有什么改变,只是在驱动和url两个地方有稍微的差别而已。

由于statement执行的是固定的语句,也是就是说不是参数可变的sql语句,实际使用起来并不方便,所以使用下面几句语句可以实现参数可变的sql语句。

 PreparedStatement preparedStatement = connection.prepareStatement("update student1 set StuName = ? where stuID = ?");
            preparedStatement.setString(1,"小强");
            preparedStatement.setString(2,"1006");
            preparedStatement.execute();

PreparedStatement是 Statement的子接口,所以executeQuery等方法都可以在子接口中使用。
prepareStatement(“update student1 set StuName = ? where stuID = ?”)
其中的sql语句,需要变化的地方我们使用?作为占位符,用来表示这里参数可变。在调用setString()方法用来设置参数,该方法有两个参数,第一个表示的是第几个占位符,第二个表示的是需要设置的参数。
java连接数据库,使用oracle和mysql