JDBC连接并使用mysql数据库

时间:2021-02-09 13:15:16

数据库在开发过程中是非常容易使用到的,在java的开发中也有一套工具方便我们对于数据库的连接和操作,那就是jdbc。
jdbc是一套连接数据库的工具,在使用时,通常包括以下步骤:

  1. 加载数据库驱动程序——jdbc作为工具并不包含在jdk中,我们在使用前需要去加载该类
  2. 获取数据库连接对象——如同访问网站一样,我们需要建立与数据库的链接
  3. 构造sql语句——sql语句为字符串,如同在sql客户端执行的语句是相同的
  4. 构造Statement实例——Statement实例是sql语句的载体
  5. 执行sql语句——sql语句由数据库执行,需要通过Statement载体发送给数据库再去执行
  6. 关闭连接——关闭Statement实例连接,关闭数据库连接对象的连接

下面是一段数据库插入操作的源码:

/**
* 插入操作
*/

public static void insert(){
try {
//加载数据库驱动程序
Class.forName(Driver);
//获取数据库连接对象
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);
//构造sql语句
String sql = " insert into person(name, age, description) values('测试', 20, '测试1');";
//构造statment实例(用来发送SQL语句的载体)
Statement stat = conn.createStatement();
//执行sql语句(发送给数据库)
int num = stat.executeUpdate(sql);
System.out.println(num);
//关闭连接
stat.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

需要注意的是,在建立Mysql链接使用的URL中,为了防止字符集不匹配的情况,我们需要指定字符集,方式如下:

public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";

其中localhost:3306为数据库服务器地址,test为要使用的数据库,在其之后的characterEncoding=utf-8是指定的字符集。




上面是一个简单的插入操作,插入的是一个纯粹的字符串组成的sql语句,在实际应用中,我们可能不能确定将要插入的字符,所以我们需要通过预先编译的sql语句将即将要执行的sql语句(不含字段值)存储起来,然后在执行前给预先编译好的sql语句进行设置值操作,如下,通过实现PreparedStatement接口进行操作:

package JdbcConnect;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
* Created by zhuxinquan on 16-2-5.
*/

public class PreparedStatementDemo {

public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
public final static String USERNAME = "root";
public final static String PASSWD = "××××××××";
public final static String Driver = "com.mysql.jdbc.Driver";


public static void insert(Person p){
try {
Class.forName(Driver);
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);
String sql = "insert into person(name, age, description) values(?, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
//设置字段值
ps.setString(1, p.getName());
ps.setInt(2, p.getAge());
ps.setString(3, p.getDescription());

ps.executeUpdate();
ps.close();
conn.close();


} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
Person p = new Person("测试3", 23, "ceshi 3");
insert(p);
}
}


在上面这段代码中并没有将字段的具体值写入字符串中,而是通过PreparedStatement类去设置之前通过通配符表示的字段值。进而去执行已经预编译好的sql语句。

更新操作完成后的sql语句返回影响的行数,而查询操作完成后返回的是ResultSet结果集,我们需要对其结果进行处理才能得到我们想要的结果,如下例就是一个简单的查询操作:

package JdbcConnect;

import java.sql.*;

/**
* Created by zhuxinquan on 16-2-4.
*/

public class JdbaQueryDemo {
public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
public final static String USERNAME = "root";
public final static String PASSWD = "××××××××";
public final static String Driver = "com.mysql.jdbc.Driver";

public static void query(){
try {
Class.forName(Driver);
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);
String sql = "select id, name, age, description from person";
Statement state = conn.createStatement();
//返回查询的结果集
ResultSet rs = state.executeQuery(sql);
while (rs.next()){
int id = rs.getInt(1);
System.out.println(id);
}
rs.close();
state.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
query();
}
}


同样当我们要查询的条件不确定时,我们也可以通过使用PreparedStatement接口利用通配符的方式,之后设置字段值实现预想的要求。