随着工程量,代码量的增加,存储数据必然会用到数据库。下面我就从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()方法用来设置参数,该方法有两个参数,第一个表示的是第几个占位符,第二个表示的是需要设置的参数。