需要先导入此包

java数据库(mysql)连接总结_数据库

建表语句


create database jdbc;

create table users( id int PRIMARY key auto_increment, name
varchar(40), password varchar(40), email varchar(60), birthday DATE );

insert into users(​​name​​,​​password​​,​​email​​,​​birthday​​) values
(‘zs’,‘123456’,‘zs@sina.com’,‘1980-12-04’),
(‘lisi’,‘123456’,‘lisi@sina.com’,‘1980-12-04’),
(‘wangwu’,‘123456’,‘wangwu@sina.com’,‘1979-12-04’);


java数据库(mysql)连接总结_数据库_02

java数据库(mysql)连接总结_sql_03

Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)

DriverManager类用于加载JDBC驱动并且创建与数据库的连接。

java数据库(mysql)连接总结_mysql_04

Connection接口代表Java程序和数据库的连接,只有获得该连接对象后,才能访问数据库,并操作数据表。在Connection接口中,定义了一系列方法,其常用方法如下所示。

java数据库(mysql)连接总结_mysql_05

Statement接口用于执行静态的SQL语句,并返回一个结果对象。Statement接口对象可以通过Connection实例的createStatement()方法获得,该对象会把静态的SQL语句发送到数据库中编译执行,然后返回数据库的处理结果。在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如下所示。

java数据库(mysql)连接总结_java_06

java数据库(mysql)连接总结_mysql_07

ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。

在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet对象初始化时,游标在表格的第一行之前调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用next()方法作为while循环的条件来迭代ResultSet结果集。ResultSet接口中的常用方法如下所示。

java数据库(mysql)连接总结_sql_08

通常,JDBC的使用可以按照以下几个步骤进行:

(1)加载并注册数据库驱动。

(2)通过DriverManager获取数据库连接。

(3)通过Connection对象获取Statement对象。

(4)使用Statement执行SQL语句。

(5)操作ResultSet结果集。

(6)关闭连接,释放资源。

package Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class test1 {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "123456");
statement = connection.createStatement();
resultSet = statement.executeQuery("select * from users");
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + ":" + resultSet.getString("name") + ":" + resultSet.getString("password") +
":" + resultSet.getString("email") + ":" + resultSet.getDate("birthday"));
}

} catch (Exception e) {
e.printStackTrace();
} finally {
resultSet.close();
statement.close();
connection.close();
}
}
}

输出:

java数据库(mysql)连接总结_数据_09

PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在该对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大的提高了数据的访问效率。

package Test;

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

public class test2 {
public static void main(String[] args) throws Exception {
Connection conn= null;
PreparedStatement ps=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
"root","123456");
String insert="insert into users(name,password,email,birthday) values" +
"(?,?,?,?)";
ps=conn.prepareStatement(insert);
ps.setString(1,"zl");
ps.setString(2,"123456");
ps.setString(3,"zl@sina.com");
ps.setString(4,"1987-12-23");
ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}
}
}

再次运行第一次的代码:

java数据库(mysql)连接总结_java_10

ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下:

Statement st = conn.createStatement(

ResultSet.TYPE_SCROLL_INSENITIVE,

ResultSet.CONCUR_READ_ONLY

);

ResultSet rs = st.excuteQuery(sql);

在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”

表示以只读形式打开结果集。

package Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class test3 {
public static void main(String[] args) throws Exception {
Connection conn=null;
Statement statement=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
"root","123456");
String sql="select * from users";
statement=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=statement.executeQuery(sql);
System.out.print("第二条数据为:");
rs.absolute(2);
System.out.println(rs.getString("name"));


System.out.print("第一条数据为:");
rs.beforeFirst();
rs.next();
System.out.println(rs.getString("name"));


System.out.print("第四条数据为:");
rs.afterLast();
rs.previous();
System.out.println(rs.getString("name"));
System.out.println();
}catch (Exception e){
e.printStackTrace();
}finally {
if(statement!=null){
statement.close();
}
if(conn!=null){
conn.close();
}
}
}
}

输出:

java数据库(mysql)连接总结_sql_11