目录
前言:
项目中导入驱动包
插入记录
创建数据源
连接数据库
构造sql语句
执行sql语句
释放资源
整体代码展示
查看数据
代码展示
小结:
MySQL为Java提供了驱动包。通过Java程序实现的客户端,可以通过这个驱动包,把客户端和MySQL服务器进行网络通信。
将驱动包下载好之后,直接复制到项目中的包中(我这里是lib包下)。然后点击下面的Add as Library导入到库中,之后就可以发现可以解析这个驱动包了,也就成功了。
首先需要创建数据源,它是描述数据库服务器在哪里,然后才可以经过客户端进行连接服务器。
DataSource dataSource = new MysqlDataSource();
这里是构造了一个datasource对象。采取向上转型的方式。这样的好处是,如果使用不同的数据库,它所提供的驱动包也会不一致,那么我们只需要改动这一处代码就可以。
JDBC支持两种方式的风格。DriverManager和DataSource。DriverManager会利用反射的机制,并且它不支持重复连接,它会直接关闭物理连接。DataSource内置了数据库连接池,其中可以创建一定数量的数据库连接,并且支持重复连接,它只是回收了对象。这里介绍DataSource方式的风格。
jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false
设置URL,用户名及密码
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("用户名");
((MysqlDataSource)dataSource).setPassword("密码");
注意:这里需要向下转型。创建数据源需要确定数据库的具体位置,及一些信息。
Connection connection = dataSource.getConnection();
注意:连接数据库是把这个客户端和服务器进行连接。这里要使用java.sql下的Connection。这里会抛异常,需要对异常进行处理。
String sql = "insert into student values(1, 'aaa')";
String sql = "insert into student values(?,?)";//设置通配符
PreparedStatement statement = connection.prepareStatement(sql);//预处理
//替换通配符
statement.setInt(1, id);
statement.setString(2, name);
注意:
有两种方式构造sql语句。第一种是直接写出来。第二种是设置通配符,通过接下来对sql进行预处理,返回的对象来设置通配符里面的值。第一个?位置是1,第二个?位置是2以此类推。
这里使用PreparedStatement,优点是可以执行带或者不带参数的sql,sql语句会预编译在数据库系统,执行速度快于Statment对象。
//执行sql语句,返回所影响的行数
int ret = statement.executeUpdate();
注意:执行插入,修改,删除时使用executeUpdate,查看记录使用executeQuery。插入时会返回所影响的行数。
//释放资源,断开连接
statement.close();
connection.close();
注意:当进行资源的利用,就需要去释放相应的资源。不然就很有可能造成内存泄漏。释放资源时,需要释放其他资源最终断开连接。即释放资源和连接资源顺序是相反的。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCInsertDemo {
public static void main(String[] args) throws SQLException {
//先创建DateSource数据源,描述数据库服务器在哪
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("用户名");
((MysqlDataSource)dataSource).setPassword("密码");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int id = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();
//建立连接
Connection connection = dataSource.getConnection();
//构造sql语句
//String sql = "insert into student values(" + id + " , '" + name + "')";
String sql = "insert into student values(?,?)";//设置通配符
//对sql语句进行预处理,jdbc 中还需要搭配一个特定的对象, 来描述这里的 sql 的情况
PreparedStatement statement = connection.prepareStatement(sql);
//替换通配符
statement.setInt(1, id);
statement.setString(2, name);
//执行sql语句,返回所影响的行数
int ret = statement.executeUpdate();
System.out.println(ret);
//释放资源,断开连接
statement.close();
connection.close();
}
}
这里和插入记录的差别是在执行sql时使用的方法不同,返回的结果不同。插入记录使用的是executeUpdate返回的结果是所影响的行数,查看记录使用的是executeQuery返回查看结果集合。然后只需要遍历这个集合就可以看见所查询的记录。
注意:集合遍历时,是以行为单位进行遍历的。其中的参数填对应列的列名,方法就使用相对应的类型。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCSelectDemo {
public static void main(String[] args) throws SQLException {
//创建数据源,描述数据库服务器位置
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("用户名");
((MysqlDataSource)dataSource).setPassword("密码");
//建立连接
Connection connection = dataSource.getConnection();
//构造sql,预处理
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
//执行sql,返回结果集合
ResultSet resultSet = statement.executeQuery();
//遍历集合,打印数据
while(resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println(id + " " + name);
}
//释放资源
resultSet.close();
statement.close();
connection.close();
}
}
JDBC编程为我们操作数据库带来了很大的遍历,需要我们掌握和使用它。