JDBC使用

发布于:2022-12-31 ⋅ 阅读:(358) ⋅ 点赞:(0)

不同数据库的forName、url书写方式不同

首先应下载相关驱动并导入

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

public class sqlserver1 {
    public static void main(String[] args) throws Exception{

        //1.注册驱动
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        //2.获取连接
        String url="jdbc:sqlserver://localhost:1433;DatebaseName=LJY";
        String username="sa";
        String passward="123456";
        Connection conn= DriverManager.getConnection(url,username,passward);
        System.out.println("连接成功");

        //3.定义sql
        String sql="use LJY update authors set state='元旦' where au_id=123";

        //4.获取sql执行的对象statement
        Statement stmt=conn.createStatement();

        //5.执行sql
        int count=stmt.executeUpdate(sql);
        System.out.println(count);

        //6.释放资源
        stmt.close();
        conn.close();
    }
}

在定义sql语句时,若不添加:use 数据库名

可能出现:对象名无效


Connection使用:

1.获取执行的sql对象

普通执行sql对象 Statement        createStatement(sql)
预编译sql的执行sql对象:防止SQL注入 PreparedStetement        prerareStatement(sql)
执行存储过程的对象 CallableStatement        prepareCall(sql)

·prepareStatement:

        在url处添加预编译:useServerPrepStmts=true

        setXXX(参数1,参数2):设置?的值,参数一是?位置,参数二是赋予的值

        executeUpdate()/executeuery():执行SQL,无需传递sql

import java.sql.*;

public class sqlserver1 {
    public static void main(String[] args) throws Exception {

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        String url = "jdbc:sqlserver://localhost:1433;DatebaseName=LJY";
        String username = "sa";
        String passward = "123465";
        Connection conn = DriverManager.getConnection(url, username, passward);
        System.out.println("连接成功");

        String uname="lisisi";
        String pwd="456faga";

        //防止字符串拼接,将敏感字符转义
        String sql = "use LJY select * from cjb where uname=? and pwd=?";

        PreparedStatement stmt = conn.prepareStatement(sql);

        //设置?的值
        stmt.setString(1,uname);
        stmt.setString(2,pwd);

        //执行sql
        ResultSet count = stmt.executeQuery();
        
        if(count.next()) {
            System.out.println("-------成功--------");
        }else{
            System.out.println("失败");
        }
        stmt.close();
        conn.close();
    }
}

2.事务管理

        当代码断中出现异常时,数据库中的数据不会更改,事务回滚到数据的原始状态

开启事务 setAutoCommit(boolean autoCommit)        false即开启
提交事务 commit()
回滚事务 rollback()
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class sqlserver1 {
    public static void main(String[] args) throws Exception{

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        String url="jdbc:sqlserver://localhost:1433;DatebaseName=LJY";
        String username="sa";
        String passward="123456";
        Connection conn= DriverManager.getConnection(url,username,passward);
        System.out.println("连接成功");

        String sql1="use LJY update authors set state='湖北' where au_id=123";
        String sql2="use LJY update authors set state='江西' where au_id=124";

        Statement stmt = conn.createStatement();

        try {
            //开启事务
            conn.setAutoCommit(false);

            int count1 = stmt.executeUpdate(sql1);
            System.out.println(count1);

            int count2 = stmt.executeUpdate(sql2);
            System.out.println(count2);

            //提交事务
            conn.commit();
        }catch(Exception throwables){
            //回滚事务
            conn.rollback();
            throwables.printStackTrace();
        }
        stmt.close();
        conn.close();
    }
}

Statement使用:

1.执行SQL语句

执行DML、DDL语句

int        executeUpdate(sql)

返回值:(1)DML影响的行数

(2)DDL可能返回0

执行DQL语句 Result        executeQuery(sql)

返回值:ResultSet结果集对象

获取ResultSet的结果:

        boolean next(): 判断当前行是否有数据,将光标移动到下一行

        xxx getXXX(参数):获取数据

                        ·int getInt(1):获取第一列数据

                        ·String getString("id"):获取列名为id的数据

例:数据库中存在如下数据

id nchar(10)
kch varchar(10)
cj int
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class sqlserver1 {
    public static void main(String[] args) throws Exception {

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        String url = "jdbc:sqlserver://localhost:1433;DatebaseName=LJY";
        String username = "sa";
        String passward = "123456";
        Connection conn = DriverManager.getConnection(url, username, passward);
        System.out.println("连接成功");

        String sql = "use LJY select * from cjb";

        Statement stmt = conn.createStatement();

        //执行sql
        ResultSet count = stmt.executeQuery(sql);

        //当存在数据时光标移动
        while (count.next()) {
            String xh = count.getString(1);
            String kch = count.getString(2);
            int cj = count.getInt("cj");

            System.out.println(xh);
            System.out.println(kch);
            System.out.println(cj);
            System.out.println("------------------");
        }
        stmt.close();
        conn.close();
    }
}

数据库连接池:Druid

public class sqlserver1 {
    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties prop=new Properties();
        prop.load(new FileInputStream("配置文件路径"));
        //获取连接池对象
        DateSource dateSource=DruidDataSourceFactory.createDataSource(prop);
        //获取数据库连接
        Connection connection=dateSource.getConnection();

        //System.out.println(System.getProperty("user.dir"));配置路径

    }
}


网站公告

今日签到

点亮在社区的每一天
去签到