目录
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编程为我们操作数据库带来了很大的遍历,需要我们掌握和使用它。