javaWeb初识——JDBC

220 阅读3分钟

先给出总的代码示例,本文采取的数据库为MySQL,但是提示一下这个代码不能直接运行,需要先配置其相对应的环境,环境配置接下来会解释:

package mysql;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class JDBC_test {

    public static void main(String[] args) throws Exception{
        //1.注册驱动,可以省略
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接,采取Druid
        //2.加载配置文件
        Properties prop = new Properties();
        //采取加载文件的流的方式
        prop.load(new FileInputStream("JDBC_demo/src/druid.properties"));
        //获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //利用连接池进行连接
        Connection conn = dataSource.getConnection();
        //定义sql语句
        int id = 1;
        String name = "zhang";
        String sql1 = "select * from account where name = ? and id = ?";
        //获取sql语句,采取预编译方式,加快速度,防止sql注入
        PreparedStatement pstmt = conn.prepareStatement(sql1);
        //对sql中的?进行设置,第一个参数为?位置,第二个参数为对应值
        pstmt.setInt(2,id);
        pstmt.setString(1,name);
        ResultSet res = pstmt.executeQuery();
        //使用一个列表存储结果
        List<User> res_set = new ArrayList<>();
        //返回多列数据,可以采取next()方法不断向下遍历结果,但是遍历完成后next()会处在列表最后
        //可以使用try——catch来完成数据库的事务
        try {
            conn.setAutoCommit(false);//将事务设定为手动提交
            while(res.next()){
                User user = new User();
                //查询结果一行行存储,getxxx方法可以给列号也可以给列名
                user.setId(res.getInt(1));
                user.setName(res.getString(2));
                user.setMoney(res.getDouble(3));
                res_set.add(user);
                System.out.println(1);
            }
            conn.commit();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }

        for(User user:res_set){

            System.out.println("id="+user.getId()+"  name="+user.getName());
        }
        //关闭资源
        res.close();
        pstmt.close();
        conn.close();
    }
}

java并不能直接对数据库进行操作,但是Java存在着一套标准接口可以近乎对所有数据库进行操作,这套接口就是JDBC。想要使用这套接口需要下载对应的jar包。 image.png

JDBC分为七个部分,第一部分是注册驱动,在这个部分需要对数据库进行指明Class.forName("com.mysql.jdbc.Driver");

但是这部分可以省略。

image.png

相关驱动配置已经存在于MySQL的jar包之中。

接下来是获取连接。

String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
String userName = "";//具体的用户名
String password = "";//密码

先指明ip及端口,上述ip及端口表示数据库保存在本地,?后为要使用的一些具体的方法,比如 useSSL=false指的是不使用ssl连接,useServerPrepStmts=true指的是允许使用预编译功能。

Connection conn = DriverManager.getConnection(url,userName,password);

获取连接之后要进行的就是定义sql语句了,SQL语句可以分为两类,SELECT和除SELECT之外的语句

String sql1 = "update account set money = 2000 where name = '张三'";
String sql2 = "select * from account";

接下来是获取执行sql语句的对对象

Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql1);//受影响的行数 
ResultSet res = stmt.executeQuery(sql2);//res保存返回的部分表
//6. 处理结果        
System.out.println(count);        
//7. 释放资源        
stmt.close();        
conn.close();

然后是让该对象执行sql语句,需要注意的是在执行增删改时采取的方法是executeUpdate(sql1),执行查询时采取的方法是executeQuery(sql2),executeUpdate(sql1)返回的是一个整数量,表示的是受影响的行数,而executeQuery(sql2)返回的是一个ResultSet类的对象,其实就是sql查询功能完成后返回的二维表。最后就是处理结果和释放资源了,处理结果会因为需求的不同而不同。